Skip to content

Feat/satellite beamforming array#247

Merged
brunohcfaria merged 10 commits intodevelopmentfrom
feat/satellite_beamforming_array
Feb 10, 2026
Merged

Feat/satellite beamforming array#247
brunohcfaria merged 10 commits intodevelopmentfrom
feat/satellite_beamforming_array

Conversation

@artistrea
Copy link
Member

@artistrea artistrea commented Jan 30, 2026

DONE

  • Added RigidTransform class for transformations;
  • Added ReferenceFrame class for ENU and other local plane definitions;
    • ENUReferenceFrame implemented;
    • DWNReferenceFrame implemented
  • Better and faster M.2101 antenna array implementation;
    • Still the slowest antenna there is, by a factor of 3x comparing against s1528 taylor implementation;
    • If needed, should consider using cython or numba. Benchmarking on plot_footprints script shows that memory bandwidth is a limiting factor now. Having a slow simulation as reference would be better for that optimization, however;

TODO

Consider changing existing implementation of CoordinateSystem (remove or refactor it). It is being used in other urgent featuresets, so it may be better to maintain as is for now and refactor later

Notes

M.2101 implementation considers two main optimizations, changing a bit the equations in https://www.itu.int/dms_pubrec/itu-r/rec/m/R-REC-M.2101-0-201702-I!!PDF-E.pdf.

From table 4, it can be seen that the superposition vector V(n, m, theta, phi) and weighting W(i, n, m) are separable as V(n, m, theta, phi) = V1(m, theta, phi) V2(n, theta, phi) and W(i, n, m) = W1(i, m) W2(i, n). This means that the summation of V * W over a 2d array (n, m) becomes isntead a multiplication of 2 sums, one with n terms and the other with m terms. This reduces memory bandwidth needed and speeds up the function runtime considerably. Do note that arrays for satellites contain approx. 50 elements, and so this optimization reduces a constant factor of 50**2 = 2500 to 50 + 50 = 100 for memory and computation requirements. This constant factor multiplies the number of pointing vectors. While it improves considerably (> 10x) performance for the plot_footprint scripts, it is uncertain how much it affects normal simulation with few victims.

The second optimization is the usage of recursive nature of the phase change by array row/column. We compute a single exp() call, and use it to get all row weights. exp is a very costly mathematical function, and this reduces the runtime observed by ~1.7x

The following image contains a draft of the proof of mathematical validity for both optimizations.

Untitled2

@artistrea artistrea marked this pull request as ready for review February 3, 2026 02:21
@artistrea
Copy link
Member Author

artistrea commented Feb 3, 2026

For testing with plot footprint scripts, consider using these parameters, taken from System 2 definition in WP4C-Working-Document-4C-356, Annex 7:


    params.antenna.pattern = "ARRAY2"
    params.antenna.array.element_max_g = 2.0
    params.antenna.array.n_rows = 28
    params.antenna.array.n_columns = 28
    params.antenna.array.element_horiz_spacing = 0.5
    params.antenna.array.element_vert_spacing = 0.5
    params.antenna.array.element_phi_3db = 120.
    params.antenna.array.element_theta_3db = 120.
    params.antenna.array.element_sla_v = 30.
    params.antenna.array.element_am = 30.
    params.beam_positioning.type = "ANGLE_AND_DISTANCE_FROM_SUBSATELLITE"

Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This pull request introduces significant improvements to the satellite beamforming array implementation, including new transformation classes and an optimized M.2101 antenna array implementation.

Changes:

  • Introduced RigidTransform and ReferenceFrame classes (ENUReferenceFrame, DWNReferenceFrame) to provide a cleaner abstraction for coordinate transformations
  • Refactored SimulatorGeometry to use the new reference frame abstraction instead of raw tuples for coordinate system definitions
  • Added optimized AntennaArray class implementing M.2101 with significant performance improvements through mathematical optimizations (separability of array factors and recursive phase calculations)

Reviewed changes

Copilot reviewed 7 out of 7 changed files in this pull request and generated 14 comments.

Show a summary per file
File Description
sharc/support/geometry.py Core transformation infrastructure with RigidTransform and ReferenceFrame classes; refactored SimulatorGeometry to use new abstractions
sharc/antenna/antenna_array.py New optimized M.2101 antenna array implementation with ~10x performance improvement
tests/test_geometry.py Comprehensive tests for RigidTransform, ReferenceFrame classes, and updated geometry tests
tests/test_antenna_array.py New test suite for AntennaArray class covering element gain, weight vectors, and superposition vectors
sharc/station_factory.py Integration of ARRAY2 antenna pattern with geometry transformations
sharc/topology/topology_spherical_sampling_from_grid.py Updated to use ENUReferenceFrame instead of tuples
sharc/parameters/parameters_antenna.py Added ARRAY2 pattern support
Comments suppressed due to low confidence (1)

sharc/parameters/parameters_antenna.py:192

  • The TODO comment should be addressed or removed. If array validation is deferred for a future implementation, this should be tracked in a proper issue tracking system rather than leaving TODO comments in production code.
                # TODO: validate here and make array non imt specific
                # self.array.validate(
                #     f"{ctx}.array",
                # )
                pass

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

artistrea and others added 2 commits February 3, 2026 00:25
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
@brunohcfaria brunohcfaria merged commit c6edd05 into development Feb 10, 2026
2 checks passed
@brunohcfaria brunohcfaria deleted the feat/satellite_beamforming_array branch February 10, 2026 10:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants