018a: GPS L1C Weil codes + TMBOC(6,1,4/33) pilot, gps_l1c Tier-1 flip #25

Merged
ykp merged 1 commit from feat/018a-gps-l1c into main 2026-09-25 07:52:27 +02:00
Owner

First step of the remaining-Tier-2 wave (prep for v1.1).

Data provenance: IS-GPS-800J fetched from gps.gov (the site moved to a
new Drupal layout; IS-GPS-800J is current as of Aug 2022). L1C ranging-code
construction per 3.2.2.1.1: Legendre sequence over the prime 10223 (bit
convention: L(0)=0, QR->1), Weil Wi(t;w) = L(t) XOR L((t+w) mod 10223),
then the fixed 7-bit expansion sequence 0110100 inserted before the p-th
value -> exactly 10230 chips.

Table 3.2-2 (sheets 1-3): all 63 PRNs x 2 components extracted (w, p,
initial-24 and final-24 chips octal) and VALIDATED against BOTH octal
columns: 126/126 reproduce. PRN 38's row lost its '8' in PDF text
extraction - recovered manually and confirmed by its octal columns.
Note: GPS L1C uses prime 10223 (BDS B1C uses 10243 - the existing Weil
machinery is reused with the ICD bit convention here; documented).

Modulation (IS-GPS-800 3.3 + 3.2.1.6.1): BOTH components in phase.
data = L1CD x BOC(1,1); pilot = L1CP x TMBOC(6,1,4/33) with BOC(6,1)
spreading symbols at u_t = 0, 4, 6, 29 of every 33-chip group (3.3);
data:pilot = 1:3 (Table 3.2-1: -163 vs -158.25 dBW). L1C overlay codes
(L1CO, Table 3.2-3 LFSR polys) DEFERRED like the B1C secondary.

Implementation: codes.py (GPS_L1C_PARAMS 63 rows, gps_l1c_code),
generator data_mode 'l1c', gps_l1c Tier-1 flip, harness data replica,
README matrix.

Tests (5): PRN-1 octal columns, all 126 rows re-validated in-process,
properties/unknown-PRN, TMBOC recovery (data amp/2, pilot amp*sqrt(3)/2),
pilot-vs-plain-BOC(1,1) degradation proving the BOC(6,1) insertion.

Local verification: pytest 185 passed + 1 gui skip, ruff clean (Python 3.14).

Note (process): NOT to be merged by automation - awaiting manual review/merge.
Next: 018b (BeiDou B2a from the already-fetched B2A ICD + GLONASS CDMA
disposition), then the v1.1 release (task tracked).

First step of the remaining-Tier-2 wave (prep for v1.1). **Data provenance:** IS-GPS-800J fetched from gps.gov (the site moved to a new Drupal layout; IS-GPS-800J is current as of Aug 2022). L1C ranging-code construction per 3.2.2.1.1: Legendre sequence over the prime 10223 (bit convention: L(0)=0, QR->1), Weil Wi(t;w) = L(t) XOR L((t+w) mod 10223), then the fixed 7-bit expansion sequence 0110100 inserted before the p-th value -> exactly 10230 chips. **Table 3.2-2 (sheets 1-3)**: all 63 PRNs x 2 components extracted (w, p, initial-24 and final-24 chips octal) and VALIDATED against BOTH octal columns: **126/126 reproduce**. PRN 38's row lost its '8' in PDF text extraction - recovered manually and confirmed by its octal columns. Note: GPS L1C uses prime 10223 (BDS B1C uses 10243 - the existing Weil machinery is reused with the ICD bit convention here; documented). **Modulation** (IS-GPS-800 3.3 + 3.2.1.6.1): BOTH components in phase. data = L1CD x BOC(1,1); pilot = L1CP x TMBOC(6,1,4/33) with BOC(6,1) spreading symbols at u_t = 0, 4, 6, 29 of every 33-chip group (3.3); data:pilot = 1:3 (Table 3.2-1: -163 vs -158.25 dBW). L1C overlay codes (L1CO, Table 3.2-3 LFSR polys) DEFERRED like the B1C secondary. **Implementation**: codes.py (GPS_L1C_PARAMS 63 rows, gps_l1c_code), generator data_mode 'l1c', gps_l1c Tier-1 flip, harness data replica, README matrix. **Tests** (5): PRN-1 octal columns, all 126 rows re-validated in-process, properties/unknown-PRN, TMBOC recovery (data amp/2, pilot amp*sqrt(3)/2), pilot-vs-plain-BOC(1,1) degradation proving the BOC(6,1) insertion. Local verification: pytest 185 passed + 1 gui skip, ruff clean (Python 3.14). Note (process): NOT to be merged by automation - awaiting manual review/merge. Next: 018b (BeiDou B2a from the already-fetched B2A ICD + GLONASS CDMA disposition), then the v1.1 release (task tracked).
018a(core): GPS L1C Weil codes (IS-GPS-800J Table 3.2-2, 126/126 validated) + TMBOC(6,1,4/33) pilot, tier flip
All checks were successful
ci / test (3.12) (push) Successful in 1m14s
ci / test (3.14) (push) Successful in 1m16s
ci / test (3.12) (pull_request) Successful in 2m34s
ci / test (3.14) (pull_request) Successful in 2m41s
047f22d6ca
ykp merged commit 9adada68a6 into main 2026-09-25 07:52:27 +02:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
ykp/gengnss!25
No description provided.