Feat/satellite beamforming array#247
Merged
brunohcfaria merged 10 commits intodevelopmentfrom Feb 10, 2026
Merged
Conversation
This commit adds RigidTransform, ReferenceFrame and ENUReferenceFrame for preparation for usage with other reference frames. SimulatorGeometry was refactored and its API was updated for better maintainability.
Member
Author
|
For testing with plot footprint scripts, consider using these parameters, taken from System 2 definition in WP4C-Working-Document-4C-356, Annex 7: |
There was a problem hiding this comment.
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
RigidTransformandReferenceFrameclasses (ENUReferenceFrame, DWNReferenceFrame) to provide a cleaner abstraction for coordinate transformations - Refactored
SimulatorGeometryto use the new reference frame abstraction instead of raw tuples for coordinate system definitions - Added optimized
AntennaArrayclass 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.
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
brunohcfaria
approved these changes
Feb 10, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
DONE
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 weightingW(i, n, m)are separable asV(n, m, theta, phi) = V1(m, theta, phi) V2(n, theta, phi)andW(i, n, m) = W1(i, m) W2(i, n). This means that the summation ofV * Wover a 2d array(n, m)becomes isntead a multiplication of 2 sums, one withnterms and the other withmterms. This reduces memory bandwidth needed and speeds up the function runtime considerably. Do note that arrays for satellites contain approx.50elements, and so this optimization reduces a constant factor of50**2 = 2500to50 + 50 = 100for 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.expis a very costly mathematical function, and this reduces the runtime observed by ~1.7xThe following image contains a draft of the proof of mathematical validity for both optimizations.