Signal support matrix

Every concrete signal type GNSSSignals.jl defines, and what Tracking.jl does with it. test/signal_coverage.jl checks the table against the live type tree, so a GNSSSignals release that adds a signal fails the test suite rather than user code.

What "supported" means here

Tracking is not navigation decoding, and neither is PVT.

  • Sync feature is what the tracker locks onto to leave its one-block pre-sync integration: a data-bit edge, a secondary-code phase, or nothing where the primary code period already is the integration unit.
  • Navigation data is what the signal carries. A pilot or acquisition aid carries none: it yields code phase, carrier phase, Doppler and C/N₀, and get_soft_bits stays empty. Decoding is GNSSDecoder.jl's job, and a satellite can be ranged on without it.

Evidence level. Every row is verified against clean synthetic GNSSSignals replicas: TrackingLoops' test/signals.jl pins defaults and sync behaviour, and test/signal_coverage.jl here runs each signal through track. Simulated-FPGA, hardware-replay and live-RF validation are tracked in GNSSReceiver.jl#130.

The matrix

Blocks per integration is the coherent integration length in primary code blocks a fresh TrackedSignal starts at (default_num_code_blocks_to_integrate), and in brackets the ceiling (max_num_code_blocks_to_integrate) set_preferred_num_code_blocks_to_integrate! may raise it to: one data bit, overlay period or code cycle. Until sync, one block is integrated regardless.

SignalBandPrimary codeBlocks per integrationSync featureNavigation dataPRNs
GPSL1CAL11023 chips, 1 ms1 (max 20)soft CFAR bit-edge searchLNAV, 50 sym/s1-37
GPSL1C_DL110230 chips, 10 ms1 (max 1)none needed — 1 symbol per code periodCNAV-2, 100 sym/s1-63
GPSL1C_PL110230 chips, 10 ms1 (max 1800)hard rotation sweep, 1800-chip overlaynone (pilot)1-63
GPSL2CML210230 chips, 20 ms1 (max 1)none needed — 1 symbol per code periodCNAV, 50 sym/s1-63
GPSL2CLL2767250 chips, 1.5 s1 (max 1)none — the code period is the integrationnone (pilot)1-63
GPSL5IL510230 chips, 1 ms1 (max 10)soft CFAR overlay search, NH10CNAV, 100 sym/s1-37
GPSL5QL510230 chips, 1 ms1 (max 20)soft CFAR overlay search, NH20none (pilot)1-37
GalileoE1BL14092 chips, 4 ms1 (max 1)none needed — 1 symbol per code periodI/NAV, 250 sym/s1-50
GalileoE1B_BOC11L14092 chips, 4 ms1 (max 1)none needed — 1 symbol per code periodI/NAV, 250 sym/s1-50
GalileoE1CL14092 chips, 4 ms1 (max 25)soft CFAR overlay search, CS25none (pilot)1-50
GalileoE1C_BOC11L14092 chips, 4 ms1 (max 25)soft CFAR overlay search, CS25none (pilot)1-50
GalileoE5aIL510230 chips, 1 ms1 (max 20)soft CFAR overlay search, CS20F/NAV, 50 sym/s1-50
GalileoE5aQL510230 chips, 1 ms1 (max 100)soft CFAR overlay search, per-PRN CS100none (pilot)1-50
GalileoE5aQPL5330 chips, 64.5 µs31 (max 31)none — no data, no overlaynone (acquisition aid)1-40
GalileoE5bIE5b10230 chips, 1 ms1 (max 4)soft CFAR overlay search, CS4I/NAV, 250 sym/s1-50
GalileoE5bQE5b10230 chips, 1 ms1 (max 100)soft CFAR overlay search, per-SVID CS100none (pilot)1-50
GalileoE6BE65115 chips, 1 ms1 (max 1)none needed — 1 symbol per code periodC/NAV, 1000 sym/s1-50
GalileoE6CE65115 chips, 1 ms1 (max 100)soft CFAR overlay search, per-PRN CS100none (pilot)1-50
BeiDouB1IB1I2046 chips, 1 ms1 (max 20)soft CFAR overlay search, NH20D1, 50 sym/s (see GEO note)1-63
BeiDouB3IB3I10230 chips, 1 ms1 (max 20)soft CFAR overlay search, NH20D1, 50 sym/s (see GEO note)1-63
BeiDouB1C_DL110230 chips, 10 ms1 (max 1)none needed — 1 symbol per code periodB-CNAV1, 100 sym/s1-63
BeiDouB1C_PL110230 chips, 10 ms1 (max 1800)hard rotation sweep, 1800-chip overlaynone (pilot)1-63
BeiDouB2aIL510230 chips, 1 ms1 (max 5)soft CFAR overlay search, 5-chipB-CNAV2, 200 sym/s1-63
BeiDouB2aQL510230 chips, 1 ms1 (max 100)soft CFAR overlay search, per-PRN 100-chipnone (pilot)1-63
BeiDouB2bIE5b10230 chips, 1 ms1 (max 1)none needed — 1 symbol per code periodB-CNAV3, 1000 sym/s (see below)6-58

PRNs is the range the upstream code table defines; this package does not check it, and other PRNs give an all-zero or out-of-bounds code. BeiDou B2b-I's table has 63 columns, but the ICD defines codes for PRN 6-58 only.

Signals sharing a band can be tracked in one BandMeasurement regardless of constellation: Galileo E5b and BeiDou B2b share the 1207.14 MHz carrier (E5b for both), BeiDou B2a shares L5 with GPS L5 and Galileo E5a, and BeiDou B1C shares L1 with GPS L1 C/A, GPS L1C and Galileo E1.

Galileo E5a-QP, the acquisition aid

E5a-QP (OS SIS ICD v2.2 §2.3.1.4) is a dataless BPSK(5) quasi-pilot at 5.115 Mcps with a 330-chip, 64.5 µs primary code, repeated 31 times per 2 ms with no overlay, broadcast so a receiver can find Galileo with a search 31× smaller than E5a-I's.

  • As an acquisition aid. Its carrier Doppler transfers directly to E5a-I/Q (same carrier). Its code phase pins E5a-I only modulo 64.5 µs, leaving 31 hypotheses, still a 330× reduction. At half the E5a-I/Q chip rate it cannot share their SignalGroup (#151); track it in its own group and hand over.
  • As a tracked signal it yields the usual observables. One 64.5 µs block would run the loop at 15.5 kHz, so it integrates a whole 31-block, 2 ms code cycle by default: a 500 Hz loop, where the carrier loop pulls in at 45 Hz and narrows to 18 Hz.
  • It never provides navigation data, for itself or for E5a.

Only part of the constellation transmits it (see the GSC list), and the ICD says it will eventually be discontinued.

Known limitations

  • BeiDou GEO satellites (PRN 1-5, 59-63) never sync on B1I/B3I. They carry no NH20 overlay and broadcast D2 at 500 sym/s instead of D1 at 50 sym/s, so the secondary-code detector has nothing to lock onto. They track and can be ranged on, but are not decoded: a D2 bit-edge search would need a per-PRN data rate, while get_data_frequency reports D1's for every PRN. See TrackingLoops' src/beidou/b1i.jl.
  • BeiDou B2b-I correlates to an all-zero prompt on a clean replica, which takes the loop down through a NaN Doppler (#234); its defaults and sync detector are checked, but it is not usable end to end.
  • Long-overlay pilots (GPSL1C_P, BeiDouB1C_P) need a full 18 s overlay period before the hard rotation sweep can lock (#215).
  • Secondary-code phase is re-searched at handoff even when the acquisition stage already recovered it (#120).
  • One chip rate per SignalGroup, which keeps E5a-QP out of an E5a group (#151).
  • Pilots without a secondary code (GPS L2 CL, Galileo E5a-QP) keep the two-quadrant Costas discriminators, at half the four-quadrant range, as no sync gives them the prompt sign; secondary-coded pilots switch to four-quadrant once synced (#230).