Skip to content

About

Lunar-surface channels (LOLA terrain) for Colosseum (RFscenario.mat) and LCHEM (MT-012) hardware-in-the-loop emulation

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

2 Commits

Folders and files

Repository files navigation

lunaremu: lunar-surface channels for Colosseum and LCHEM

lunaremu turns real lunar terrain into radio channels that hardware channel emulators can replay. It takes a LOLA elevation model of an Artemis candidate site near the lunar south pole, places a base station and user equipment on it, and computes the channel of every link at every time step: spherical-Moon line of sight, two-ray ground reflection over regolith, and diffraction over crater rims. It then writes the channels in the two formats we use:

Emulator What it takes What this repo produces
Colosseum (MCHEM) a precomputed RF scenario, installed by the Colosseum team RFscenario.mat, in the layout of the MathWorks × Colosseum scenario generator
LCHEM (USRP X410) live channel updates over ZeroMQ MT-012 frames (lchem_frames.json) and a streaming client

Two scenarios are ready to use in scenarios/out/. You only need to install the package to generate new ones.

Status. Everything here is validated in software: 152 unit tests, and a MATLAB check of the Colosseum file (matlab/check_rfscenario.m). Nothing has been run on Colosseum or on an X410 yet. The open points are listed in docs/COLOSSEUM.md and docs/LCHEM.md.

Ready-made scenarios

Each scenario has one gNB and three UEs, which matches LCHEM's default deployment, and runs at S-band (2.5 GHz) for 600 s with one snapshot per second. All sites use a 10 km × 10 km tile.

  • gNB: a 30 m mast on the tile's highest point.
  • UE1_LOS: static, in line of sight, about 1 km from the mast.
  • UE2_fringe: static, not in line of sight, but still served through diffraction.
  • UE3_rover: drives away from the mast at 1 m/s, starting in line of sight and ending in terrain shadow.
Scenario Site gNB path loss: UE1 / UE2 / rover
connecting_ridge_4node Connecting Ridge (Site01), 89.46°S 137.49°W 94 / 152 / 87→174 dB
shackleton_4node Shackleton rim (Site04), 89.77°S 171.87°W 94 / 143 / 88→outage (75 s of intermittent outage after t≈475 s)

Connecting Ridge scenario

The rover's trace shows what makes the Moon different. While it is in line of sight, the channel follows the slow two-ray interference lobes. When it crosses behind a rim, the loss steps up by about 25 dB within a few metres. Coverage boundaries on the Moon are cliffs, not fades.

Each folder contains:

  • RFscenario.mat: the scenario for Colosseum;
  • lchem_frames.json: 601 frames × 6 links for LCHEM;
  • scenario.json: nodes (role, height, selenographic position), band, and statistics;
  • summary.png: the figure above.

Install

git clone https://github.com/ebaenamar/lunar-channel-emulation
cd lunar-channel-emulation
python -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"          # add ,lchem for live streaming to an X410
pytest                            # 152 tests, no downloads needed

Python 3.11 or later is required.

Generate a scenario

lunaremu fetch-dem Site01                             # 41 MB PGDA DEM, SHA-256 checked
lunaremu build scenarios/connecting_ridge_4node.toml  # ~30 s
lunaremu validate scenarios/out/connecting_ridge_4node/RFscenario.mat

To make your own, copy a TOML file in scenarios/ and change the site, band (UHF, S, Ka, FR2, D), duration, snapshot step, or nodes. A UE can be placed with:

  • static_los: in line of sight;
  • static_fringe: not in line of sight but served;
  • rover_cliff: a radial traverse from line of sight into shadow;
  • fixed: explicit row and col on the tile.

How the channels are computed

The physics is the planner described in our LunaCov paper (in preparation for IEEE Aerospace 2027):

  • Terrain. PGDA LOLA 5 m/pixel DEMs (Barker et al., 2021, PGDA Product 78).
  • Line of sight is tested on a spherical Moon: the terrain profile is lowered by the bulge d₁d₂/2R. A flat-Moon test reports line of sight beyond the real horizon.
  • Line-of-sight links use a coherent two-ray model whose reflection coefficient is the grazing-angle Fresnel coefficient of regolith. Regolith permittivity follows ε′ = 1.919^ρ (Olhoeft and Strangway, 1975) and the loss tangent follows Siegler et al. (2020).
  • Shadowed links use free-space loss plus multi-edge Deygout diffraction with the ITU-R P.526 knife-edge loss.
  • Taps. Each link becomes a sparse set of taps. The two-ray excess delay is below 1 ns, so on a 10 ns emulator grid a link is a single complex tap, and its magnitude carries the interference nulls.

The unit tests check the kernels against primary sources:

  • free-space loss of 120.4 dB at 10 km and 2.5 GHz;
  • ITU-R knife-edge losses J(1) = 13.9 dB and J(2.4) = 20.5 dB;
  • the two-ray fourth-power law beyond the breakpoint;
  • regolith ε′ = 2.66 at ρ = 1.5 g/cm³;
  • tan δ = 0.0055 at 2.5 GHz;
  • the vertical-polarization Brewster angle.

In the source repository, the exported taps also reproduce the analytic path loss in MATLAB nrTDLChannel to 0.000 dB.

Conventions and limitations

  • Excess delay only. The absolute propagation delay of a multi-kilometre link does not fit either emulator's delay line, so it is dropped.
  • Reciprocal links. Downlink and uplink carry the same channel.
  • Outages. Links weaker than max_pl_db (default 180 dB) are written as outages, not as attenuated channels.
  • Position resolution is the 5 m DEM pixel, so a rover's channel changes every few metres.
  • Link budget. The budget in the TOML files is used only to choose where served UEs go. Transmit power and gains are set on the emulator.
  • Surface model. Regolith is modeled as a surface. There is no subsurface propagation, and diffraction is first-order multi-edge (Deygout).

Repository layout

lunaremu/            package
  colosseum.py       RFscenario.mat writer and validator
  scenario.py        nodes, trajectories, per-snapshot channels, automatic placement
  export/lchem.py    LCHEM MT-012 frames, ZeroMQ streaming, JSON I/O
  export/taps.py     sparse tap model (LinkTaps)
  propagation/ geometry/ regolith/ antenna/ io/   physics (vendored)
  cli.py             `lunaremu fetch-dem | build | validate`
scenarios/           TOML configs and ready-made outputs (out/)
matlab/              check_rfscenario.m
examples/            stream_to_lchem.py
docs/                COLOSSEUM.md, LCHEM.md
tests/

Provenance, data, and license

  • Physics. The propagation modules are vendored unchanged, apart from the package name, from hariniiisathya-coder/lunar-surface-communication- at commit efe592a (MIT). New in this repository: the scenario builder, the Colosseum writer, the LCHEM scenario export, and the CLI.
  • Terrain. Barker, M. K. et al., Improved LOLA elevation maps for south pole landing sites, Planet. Space Sci. 203, 105119 (2021), doi:10.1016/j.pss.2020.105119. NASA PGDA Product 78.
  • Colosseum scenario format. ColosseumScenarioGenerator (MathWorks × Colosseum, GPL-3.0). Only the file layout is followed; no code is reused.
  • License. MIT, see LICENSE.

About

Lunar-surface channels (LOLA terrain) for Colosseum (RFscenario.mat) and LCHEM (MT-012) hardware-in-the-loop emulation

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages