Add optional full-band Galileo E1 CBOC support

This commit is contained in:
2026-07-31 02:56:04 +03:00
parent 9db955d02e
commit 3662ba7e53
28 changed files with 2065 additions and 101 deletions
+9 -6
View File
@@ -2,7 +2,8 @@
This repository is a modular Python reference model for a Galileo receiver
baseband and a starting point for bit-true/RTL verification. It currently
implements E1B data and E1C pilot processing with a BOC(1,1) local replica,
implements E1B data and E1C pilot processing with selectable BOC(1,1) or
full-band CBOC(6,1,1/11) local replicas,
streaming real-IF or complex-IQ front ends, FFT PCPS acquisition, independent
tracking channels, fixed-point boundary models, and hardware sizing models.
The floating reference uses `numpy.float64`/`numpy.complex128` throughout;
@@ -23,7 +24,9 @@ complex IQ; both acquisition and tracking pass on its IQ8 output. See the
## Status and limitations
- 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.
- BOC(1,1) remains the default regression mode. Full-band CBOC is enabled
explicitly per acquisition/tracking configuration. Unambiguous BOC remains
an API extension point.
- E1B bit-transition hypotheses and E1C secondary wipeoff/search are available
for acquisition. E1C tracking jointly searches the 25-symbol phase and
residual carrier frequency before continuous secondary-code wipeoff.
@@ -74,6 +77,7 @@ python -m galileo_rx.cli validate-signalsim --signalsim-path signalsim/SignalSim
python -m galileo_rx.cli collect-navigation --config configs/navigation_collection.yaml --output-dir reports/navigation_run
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 tools/run_cboc_validation.py --output-dir reports --duration-s 0.30
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
@@ -136,10 +140,9 @@ the official 30×8 deinterleaver and soft Viterbi decoder, validates CRC-24Q, an
parses typed word 1–6 data. Ephemerides are committed atomically only when words
1–4 have matching IODnav; the previous valid set survives incomplete updates.
The measured 32.2 s SignalSim regression decoded 70/70 CRC-valid pages. Four of
five tracked satellites produced complete ephemerides, clocks, healthy status,
and GST; PRN 19 correctly remained incomplete because word 1 was outside the
observation. Post-decode comparison against SignalSim's RINEX source passed at
The post-CBOC 32.2 s raw-IQ SignalSim regression decoded 75/75 CRC-valid pages.
All five tracked satellites produced complete ephemerides, clocks, healthy
status, and GST. Post-decode comparison against SignalSim's RINEX source passed at
the broadcast quantization resolution. No simulator truth is accepted by the
normal decoder API.