ArrayLink Codebase: Near-field LoS MIMO for Satellites#1
Merged
Conversation
License - Add LICENSE (Apache 2.0, copyright 2025 UCSD WCSNG) - Add SPDX-License-Identifier headers to all 18 Python source files - Add license badge and License section to README New figure - scripts/fig02_parabolic_gain.py: Airy-disk beam pattern for 1.85 m and 1.47 m dishes (η=0.6) at 28 GHz; outputs full ±90° and zoomed ±1° PDFs - arraylink/beamforming.py: add parabolic_beam_pattern_dbi() using scipy j1; stable near θ=0 via masked denominator YAML config loading (fig09 / fig11 / fig12) - Load frequency, aperture, subarray shape, and element gain from configs/arraylink_1km.yaml via --config CLI arg; no more scattered module-level magic numbers - Fix PyYAML float parsing: 28.0e9 → 28.0e+9 in both config files Bug fixes - channel.degrees_of_freedom: use σ_k/σ_1 ≥ τ (paper Eq. 7), not L2-normalised absolute threshold; fixes undercounting of spatial streams - fig12_mimo_dof.py: same DoF criterion fix applied inline - fig06 quick mode: √2e3 → √2×1e3 (was ~45 m instead of ~1414 m) - fig13 config labels: dynamic f-strings instead of hardcoded "52.6 dBi" - fig13 --quick: print completion message instead of silent exit - arraylink/__init__.py: export parabolic_beam_pattern_dbi and load_config Tests - test_channel.py: add test_uses_sigma1_ratio_not_l2_norm (guards DoF fix) - test_channel.py: add test_rank1_channel_dof_is_1
- Move optional plotly install out of Installation into a callout under Reproducing Figures, next to the fig11 interactive flag - Merge Hardware data subsection into a matching callout, same pattern - Trim Quick Start to a single clean code block (remove verbose comments) - Rename Key Assumptions → Key Parameters; trim from 8 to 5 rows, drop Notes column and internal params already covered by YAML configs - Condense License section to one line + copyright
Contributor
Author
|
Confirm squash and merge. |
There was a problem hiding this comment.
Pull request overview
This PR replaces the placeholder repository with the initial ArrayLink simulator codebase for near-field LoS MIMO satellite-ground-station experiments, including reusable Python modules, figure-generation scripts, configs, tests, CI, documentation, and data notes.
Changes:
- Adds the
arraylinkpackage for channel modeling, array geometry, beamforming, coordinate utilities, and config loading. - Adds reproducibility scripts for paper figures 2, 4, 6, 9, 10, 11, 12, and 13.
- Adds YAML configs, pytest unit/smoke tests, CI, Apache 2.0 license, README documentation, and hardware-data documentation.
Reviewed changes
Copilot reviewed 25 out of 27 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
.github/workflows/ci.yml |
Adds GitHub Actions CI using micromamba and pytest. |
.gitignore |
Ignores generated Python/simulation artifacts while allowing the bundled hardware pickle. |
LICENSE |
Adds Apache 2.0 licensing text. |
Readme.md |
Documents installation, usage, figure reproduction, tests, package layout, and citation. |
environment.yml |
Defines the conda/mamba environment for simulator dependencies. |
arraylink/__init__.py |
Re-exports core simulator APIs. |
arraylink/array_geometry.py |
Adds UPA, center-dense, uniform-grid, subarray, and ground-station builders. |
arraylink/beamforming.py |
Adds dish/array gain formulas, DC weights, and beam-pattern computation helpers. |
arraylink/channel.py |
Adds LoS channel, singular-value, DoF, MIMO-boundary, and spectral-efficiency utilities. |
arraylink/utils.py |
Adds YAML loading, coordinate conversion, dB conversion, and grid generation helpers. |
configs/arraylink_1km.yaml |
Adds default ArrayLink satellite-scale simulation parameters. |
configs/upa_baseline.yaml |
Adds monolithic UPA baseline configuration. |
data/README.md |
Documents bundled hardware metrics and Fig. 10 data expectations. |
data/hardware_metrics.pkl |
Provides preprocessed hardware metrics for validation plotting. |
scripts/fig02_parabolic_gain.py |
Adds Fig. 2 parabolic dish beam-pattern generation. |
scripts/fig04_gain_vs_arrays.py |
Adds Fig. 4 total/marginal array-gain plotting. |
scripts/fig06_mimo_boundaries.py |
Adds Fig. 6 MIMO feasibility boundary plotting. |
scripts/fig09_beampattern_sim.py |
Adds Fig. 9 UPA/ArrayLink geometry and beam-pattern simulation. |
scripts/fig10_hardware_validation.py |
Adds Fig. 10 theory/simulation/hardware validation plotting. |
scripts/fig11_2d_beampattern.py |
Adds Fig. 11 2D beam-pattern heatmap generation. |
scripts/fig12_mimo_dof.py |
Adds Fig. 12 singular-ratio and DoF-vs-distance plotting. |
scripts/fig13_throughput.py |
Adds Fig. 13 throughput comparison plotting. |
tests/__init__.py |
Marks tests as a package and adds license header. |
tests/test_array_geometry.py |
Adds unit tests for array geometry helpers. |
tests/test_beamforming.py |
Adds unit tests for gain and beamforming helpers. |
tests/test_channel.py |
Adds unit tests for channel, MIMO bounds, spectral efficiency, and DoF. |
tests/test_smoke.py |
Adds smoke tests for most figure scripts in quick mode. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Comment on lines
+11
to
+12
| - D = 1.85 m (η = 0.577) → ~52.3 dBi peak [baseline dish] | ||
| - D = 1.47 m (η = 0.50) → ~49.7 dBi peak [smaller reference] |
Comment on lines
+215
to
+216
| s = compute_singular_values(H, normalise=True) | ||
| dof_list.append(int(np.sum(s >= threshold))) |
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Contributor
Author
|
Confirm squash and merge. |
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.
Full simulator and hardware results for the INFOCOM 2026 paper.
For more details refer webpage: wcsng.ucsd.edu/arraylink/