Status: Stage 2 result. Date: 2026-06-09. Tag: sim-result-v8.
Reproduce: python3 tools/fetch_malla.py then cd sim && python3 -m experiments.propagation_calibration.
We found that malla.mtnme.sh (a Malla instance on the same North Georgia network, distinct from
the Meshview view.mtnme.sh) exposes a public, no-auth API with per-gateway reception rows —
snr, rssi, gateway_id, from_node_id, hop fields, payload_length (real wire bytes). This is
the per-gateway RF data we had been waiting on the operator's DB export for. It lets us calibrate the
sim's propagation model against real measurements rather than a literature assumption — directly
addressing the v2 validation gap (north-georgia-validation.md).
malla.mtnme.sh and
malla.gamesh.net — each joined to node positions from its own Meshview instance. The two
networks cover the same metro (centroids 33.89,−84.25 vs 33.95,−84.23) but use largely
different gateways, so each is an independent vantage onto the same RF environment.obs_hops == 0). For a multi-hop packet, the
gateway heard a relay, not the originator, so from_node_id → gateway distance is meaningless;
only hop-0 rows give a valid originator→gateway RF link. This reduced ~20k → 1,125 valid points.rssi = A + B·log10(d) → path-loss exponent n = -B/10; residual std → shadowing σ.
| Network (independent gateways) | direct points | exponent n | R² |
|---|---|---|---|
malla.mtnme.sh |
413 | 2.52 | 0.37 |
malla.gamesh.net |
712 | 3.36 | 0.11 |
| combined | 1,125 | 2.50 | 0.26 |
The exponent is the headline, and it's good news: two independent networks (different gateways) both land in the physical outdoor-LoRa range and bracket the assumed 2.7 (2.52 and 3.36, combined 2.50). The PHY model's single most important propagation parameter is now data-confirmed against two real networks, not assumed. The spread (2.5–3.4) is itself realistic — the effective exponent depends on gateway siting (gamesh's lower/different gateways give steeper, noisier path loss).
What the data can't give (honestly): the intercept (PL@1 m → non-physical by naive extrapolation) and shadowing σ (a fit value ~24 dB) conflate path loss with per-node tx-power / antenna heterogeneity and survivorship bias (only decoded links are logged, so the low-RSSI tail is truncated). A passive third-party reception log cannot separate these. So we apply only the data-derived exponent and keep PL@1 m and σ at their literature values.
Re-running the North Georgia validation gate with the data-derived exponent (2.50):
| channel_utilization (%) | median | mean | p90 | max |
|---|---|---|---|---|
| SIM, prior (n=2.7) | 3.7 | ~3.5 | 5.0 | 5.6 |
| SIM, data exponent (n=2.50) | 7.8 | 7.4 | 8.0 | 8.0 |
| REAL | 5.7 | 7.0 | 14.8 | 37.3 |
The data-derived exponent brings the mean into agreement (7.4 vs 7.0) and the median to the same order (7.8 vs 5.7) — up from the prior ~1.5× under-prediction. The distribution is still narrow (no long tail), exactly as before.
num_packets_rx_bad, num_rx_dupe), which Malla does not decode — the one
remaining item worth asking the operator for.Bottom line: the public Malla data let us confirm the propagation model against real measurements and bring the gate's central tendency into agreement with the real network — without operator permission. The residual is now a well-characterised, evidence-backed structural gap, not a PHY uncertainty.