Repository navigation
Epic: spatial-diversity axis — exploiting idle RF chains for the single-stream video link #127
Description
The third diversity axis
devourer's long-range single-stream video link already exploits two physical-layer
diversity axes:
- frequency — single-adapter per-packet hopping (
docs/frequency-hopping.md),
which doubles as a frequency-diversity interleaver for the outer FEC; - code — the fused cross-layer FEC stack (
docs/fused-fec.md): sub-block
integrity salvage, an MDS outer code, soft-decision inner decode, and
per-temporal-layer unequal error protection.
The spatial axis is unexploited. Because a single-stream video link never
stacks spatial streams, the extra RF chains (1 idle on a 2T2R part, up to 3 on a
4T4R 8814) sit unused. Turning them into diversity/robustness rather than
throughput is almost pure upside for this use case: it is USB-free (one
stream in, one stream out — no MIMO-multiplexing bandwidth hit), and it composes
multiplicatively with the frequency and code axes already in place.
The single hard constraint (from docs/frequency-hopping.md): there is one LO
per chip, so the chains share one centre frequency — they give spatial
diversity within a channel, orthogonal to (not a substitute for) the frequency
diversity that hopping provides.
Why this matters
- RX MRC across a 4T4R chip's chains is a ~10·log₁₀(N) dB SNR win from a
single ground adapter — partially replacing wfb-ng's multi-adapter diversity
array, in-chip, at zero USB cost. - TX diversity (CSD / STBC) attacks the deep fades that push corruption
into the frame-wide regime where sub-block salvage fails — so spatial diversity
improves the precondition of the whole fused-FEC stack, not just its input. - Chain count is a new lever for the energy-minimizing adaptive link
(docs/adaptive-link.md), which today has no spatial knob: a convex
PA-power-saved vs chain-baseline-added tradeoff with an optimal N per range,
and a per-layer spatial UEP knob alongside modulation and FEC.
Approach
Research/design track — simulators, measurement harnesses, and conceptual docs
first (the way the frequency and code axes were developed), hardware validation
following. Each activity is a separate tracked issue.
Roadmap
Foundations
- HAL capability audit — independent per-chain TX (CSD/STBC/beam-steer vs RF-path enable) #128 — HAL capability audit ✅ (capability matrix posted)
- Antenna-decorrelation measurement harness #129 — Antenna-decorrelation measurement harness ✅ (merged PR Add antenna-decorrelation measurement harness (spatial-diversity #129) #140; N_eff metric)
Core diversity techniques
- RX-side in-chip MRC on an 8814 ground station #130 — RX-side in-chip MRC ✅ measured on hardware (features merged PR RX-chain masking + CCK TX rates (spatial-diversity #130) #141)
- ANTSEL per-frame antenna-selection diversity probe (rescoped from CSD) #131 — ANTSEL selection ✅ closed (superseded: RX-MRC dominates it; power→Spatial × energy — active-chain count as an adaptive-link lever #135, TX→Close STBC on-air — resolve the 2-channel-alignment root cause #132)
- Close STBC on-air — resolve the 2-channel-alignment root cause #132 — STBC on-air ✅ (PR Chip STBC TX diversity + txdemo event-loop EINTR fix (#132) #144): chip emits STBC (6336/6336), and TX-STBC diversity MEASURED — 1.94× static → 3.27× moving at marginal MCS5 (TX-side dual of RX-side in-chip MRC on an 8814 ground station #130, helps even a single-antenna RX)
Cross-layer composition
- Spatial × FEC — spatial diversity keeps corruption localized (sim + measure) #133 — Spatial × FEC ✅ sim (PR Spatial diversity keeps corruption localized — the SBI precondition (#133) #147): diversity cuts SNR variance → moves frames out of the frame-wide-loss bin into the SBI-salvageable one (a mobility effect; improves SBI's precondition)
- Spatial × frequency — space-frequency interleave for the outer FEC #134 — Spatial × frequency ✅ sim done (PR Space-frequency diversity sim for the outer FEC (#134) #143): frequency = dependable axis, spatial = motion bonus, they multiply
- Spatial × energy — active-chain count as an adaptive-link lever #135 — Spatial × energy ✅ sim (PR Active-chain-count energy lever sim (#135) #145): energy-optimal chain count adapts to fade state — 1 static, up to 4 at a deep mobile link
- Per-temporal-layer spatial UEP (diversity order as a per-layer knob) #136 — Per-temporal-layer spatial UEP ✅ sim (PR Per-SVC-layer spatial UEP: the third protection axis (#136) #146): the 3rd axis already lived in svc_tx.h (STBC on critical/base); now quantified — spatial knob adds ~2.5 dB survival on top of MCS+FEC
Speculative
- TX beam-steer feasibility study for a moving broadcast source (speculative) #137 — TX beam-steer feasibility ✅ (PR Beam-steer feasibility study for a moving broadcast source (#137) #148): NO-GO for a moving source — pointing budget (28° error) puts the beam in a null; feedback-free STBC/MRC wins. Only slow/known-geometry clears STBC
Key finding from #130 — re-prioritisation (2026-07-02)
The on-hardware RX-MRC measurement changed the picture: static spatial-diversity
gain is small (MRC over the best single chain was 2–10% across both 8814 SKUs,
1M/6M, several positions), because the chains' instantaneous channels are
effectively correlated at a fixed position — even for the adapter whose rotation
N_eff was 3.8. Rotation-decorrelation does not translate to a static-link
benefit. The value of spatial diversity is in mobility / fading, where the
best chain constantly changes, plus antenna-selection insurance (~60× vs the worst
chain). This reshapes the roadmap:
- Linchpin — mobile/fading combining measurement ✅ DONE, thesis CONFIRMED
(PR Mobile combining measurement: RX-path toggle + mobility analyzer (spatial-diversity #130) #142). Toggling a fixed chain vs all-4 while moving the RX: under motion
the best chain constantly shifts, so a fixed antenna hits deep-fade dropouts
that MRC eliminates (half the delivery variance) — static +2 % → moving +17 %
on the 4-internal 8814. That is the moving-drone FPV case, so the spatial
techniques (STBC, spatial×FEC, energy lever) are worth pursuing for the
mobile scenario. Bonus finding: physical antenna spacing decides static
benefit — wide external dipoles decorrelate even at rest (+17 % static), a
packed internal array only under motion; this can invert the rotation N_eff
ranking (spacing > count for real fading). - Frequency diversity is immune to the static-correlation problem — different
channels fade independently regardless of motion. So Spatial × frequency — space-frequency interleave for the outer FEC #134 (space×frequency)
rises in priority: lead with the frequency axis (hopping, already shipped),
which delivers real diversity even static. - ANTSEL per-frame antenna-selection diversity probe (rescoped from CSD) #131 (antenna selection) is validated as "nearly as good as MRC" at static
— selection of the best chain captured most of the benefit (MRC added only a
few %). Simpler than combining; worth the ANTSEL probe. - Spatial × energy — active-chain count as an adaptive-link lever #135 (energy lever) gets a sharper thesis — since extra chains add little
at static, a ground station should run fewer chains to save baseline power
and light up chains only under fading/motion. Chain count adapts to fade
state, not just range.
Sequencing (updated)
#128, #129, #130 ✅ → mobile combining measurement ✅ (thesis confirmed,
PR #142) → #134 (frequency-led diversity) + #131 (selection) → #132 (STBC,
now justified for the mobile case) → #133, #135, #136 (composition) → #137.
Current-state anchors
- CSD is chip-validated; STBC lives in the radiotap path but on-air STBC is
unresolved; 4-path RF is supported for the 8814.
Activity
Add antenna-decorrelation measurement harness (spatial-diversity #129)
josephnef commentedon Jul 2, 2026
Roadmap complete (2026-07-02)
All ten activities are done — #128–#136 landed, #131 closed as superseded, #137
assessed no-go. The through-line held: spatial diversity's payoff is under
motion, and it recurs the same way on every layer.
helps even a single-antenna receiver.
wide external dipoles decorrelate even at rest, a packed internal array only
under motion (can invert the rotation N_eff ranking).
salvage works.
with the spatial (conditional) axis.
chain still, more when moving.
FEC + STBC), already in the ladder, now quantified.
diversity wins.
Shipped: PRs #140–#148. Tooling: decorrelation harness + N_eff, RX-path mask +
mobility toggle, CCK rates, STBC-toggle + sanity gate, and five composition sims
(space×freq, chain-count energy, per-layer UEP, spatial-SBI, beam-steer). Two
honest course-corrections recorded: a real EINTR TX-wedge bug (not "chip
flakiness"), and an array-gain-vs-variance modelling fix in the SBI sim.
Beam-steer feasibility study for a moving broadcast source (#137)
josephnef commentedon Jul 2, 2026
Roadmap complete — all activities done (#128–#136 landed via PRs #140–#148, #131 closed as superseded, #137 assessed no-go). Closing the epic.