Add BOC-aware lock detection and E1C-aided tracking

This commit is contained in:
2026-07-31 01:13:35 +03:00
parent 814a788b36
commit 9db955d02e
133 changed files with 6536 additions and 42 deletions
+19 -8
View File
@@ -25,7 +25,8 @@ complex IQ; both acquisition and tracking pass on its IQ8 output. See the
- E1 profile: 1.023 Mcps, 4092 chips, 4 ms, 1575.42 MHz.
- BOC(1,1) is implemented; CBOC and unambiguous BOC are API extension points.
- E1B bit-transition hypotheses and E1C secondary wipeoff/search are available
for acquisition. E1C tracking supports known-phase wipeoff.
for acquisition. E1C tracking jointly searches the 25-symbol phase and
residual carrier frequency before continuous secondary-code wipeoff.
- The code-table provider, not the DSP engine, determines whether codes are
synthetic or official.
- The floating-point model is executable. The fixed PCPS model is bit-true at
@@ -35,8 +36,13 @@ complex IQ; both acquisition and tracking pass on its IQ8 output. See the
- Channel impairments include Doppler rate, sampling-clock offset, carrier
offset, AWGN, clipping, and quantization. Multipath, jerk, oscillator phase
noise, and interference are future channel-model plug-ins.
- Combined E1B/E1C tracking is represented by separate manager channels; a
weighted combining policy is intentionally not assumed.
- The default navigation architecture acquires E1C, synchronizes/wipes its
25-symbol secondary code, and drives shared carrier/code states, C/N0, and
BOC-aware lock monitoring from E1C. A phase-coherent E1B branch supplies only
Prompt I/Q to I/NAV decoding. E1B-only tracking remains a regression mode.
- Code lock is derived from smoothed VE/E/P/L/VL BOC-shape powers with explicit
metric validity, hysteresis, and side-peak/signal-loss tests; the legacy
instantaneous Prompt/Early/Late ratio is diagnostic-only.
- E1B I/NAV word types 1–6 are decoded from tracked RF prompts. Almanac parsing,
OSNMA authentication, and PVT are deliberately not implemented yet.
@@ -66,9 +72,11 @@ python -m galileo_rx.cli run --config configs/acquisition_example.yaml --input s
python -m galileo_rx.cli compare-fixed --config configs/acquisition_example.yaml --input samples.bin
python -m galileo_rx.cli validate-signalsim --signalsim-path signalsim/SignalSim --config configs/signalsim_validation.yaml --output-dir reports/signalsim_validation
python -m galileo_rx.cli collect-navigation --config configs/navigation_collection.yaml --output-dir reports/navigation_run
python -m galileo_rx.cli prompts-to-symbols --input verification/navigation/signalsim_navigation_multisat/prn_01/prompt_epochs.npz --prn 1 --output-dir reports/navigation_replay/prn_01
python -m galileo_rx.cli decode-inav --input verification/navigation/signalsim_navigation_multisat/prn_01/prompt_epochs.npz --prn 1 --output-dir reports/navigation_replay/prn_01
python -m galileo_rx.cli inspect-navigation --input verification/navigation/signalsim_navigation_multisat/prn_01
python -m galileo_rx.cli collect-navigation --config configs/navigation_collection.yaml --output-dir reports/navigation_e1b --tracking-mode e1b_only
python tools/compare_e1_tracking_modes.py --config configs/navigation_collection.yaml --output-dir reports/e1_tracking_mode_comparison
python -m galileo_rx.cli prompts-to-symbols --input verification/navigation/signalsim_navigation_multisat_e1c_pilot_aided_e1b/prn_01/prompt_epochs.npz --prn 1 --output-dir reports/navigation_replay/prn_01
python -m galileo_rx.cli decode-inav --input verification/navigation/signalsim_navigation_multisat_e1c_pilot_aided_e1b/prn_01/prompt_epochs.npz --prn 1 --output-dir reports/navigation_replay/prn_01
python -m galileo_rx.cli inspect-navigation --input verification/navigation/signalsim_navigation_multisat_e1c_pilot_aided_e1b/prn_01
```
The CLI uses synthetic codes by design. Replace the provider with
@@ -103,8 +111,9 @@ not change.
sample source -> streaming front end -> sample buffer -> PCPS acquisition
| |
+---- tracking manager
+-- E1B channel
+-- E1C channel
+-- E1C pilot master
+-- shared NCO phases
+-- E1B navigation branch
float blocks <-> fixed block boundaries <-> cycle transactions <-> RTL
```
@@ -136,6 +145,8 @@ normal decoder API.
See [ICD mapping](docs/inav_icd_mapping.md), the
[hardware/software partition](docs/navigation_hardware_software_partition.md),
[BOC-aware lock design](docs/boc_aware_lock_detector.md),
[pilot-aided tracking architecture](docs/e1_pilot_aided_tracking.md),
the [collection report](reports/navigation_run/inav_collection_report.md), and
the [readiness gate](reports/navigation_readiness_review.md). Saved artifacts
under `verification/navigation/` can replay navigation decoding without RF