Put B1C on RTKLIB slot 0 with prefer-B1C XOR and lam[0] override,
align QMBOC quadrature and BCH thresholds with the ICD, fix BDGIM
nearest-odd-hour t_p and CNAV1 ephemeris defaults, tighten math/constants
usage, and drop the non-reproducible LDPC generator script. Move replica,
LDPC, and navigation unit tests into the default test set.
Signed-off-by: OuWenhao16 <104730917+OuWenhao16@users.noreply.github.com>
Update pseudorange outlier rejection
- Gate relative pseudorange rejection behind a new configuration flag
`Observables.reject_outlier_pseudoranges` (default: true) to prevent
premature PVT breakage and improve space compatibility.
Align B1C with unified adapters.
- Fold B1C acquisition/tracking/telemetry into PcpsAcquisitionAdapter,
DllPllTrackingAdapter, and TelemetryDecoderAdapter, and add SPDX author
headers for the B1C/CNAV1 contribution files.
Fix B1C ICD alignment for eph, TGD, UTC, and PR gating.
Gate CNAV1 publish on IODE/IODC, fix gettgd SYS_BDS selection,
correct LS/LSF and UTC scales, and drop the MEO-biased PR median cut.
Signed-off-by: OuWenhao16 <104730917+OuWenhao16@users.noreply.github.com>
Map B1C to its own RTKLIB frequency/wavelength, apply correct TGD/ISC and BDGIM,
and define same-PRN mixed-signal policy with regression tests and conf notes.
Signed-off-by: OuWenhao16 <104730917+OuWenhao16@users.noreply.github.com>
Integrate acquisition, pilot/data tracking, B-CNAV1 telemetry decoding, and
PVT/RINEX hooks on upstream/next with minimal changes to shared blocks.
Includes example configuration, code generators, and unit tests.
Signed-off-by: OuWenhao16 <104730917+OuWenhao16@users.noreply.github.com>
Signed-off-by: Vladslav P <vladisslav2011@gmail.com>
Extend the QZSS L1 C/A LNAV treatment to the L5 CNAV chain: the QZSS-
configured L5 telemetry decoder now publishes dedicated Qzss_CNAV_Iono
and Qzss_CNAV_Utc_Model objects instead of the shared GPS CNAV types,
and PVT keeps them in their own Rtklib_Solver members.
- RINEX 4.02 navigation files get "> STO J CNVX" QZUT records with the
UTC(NICT) identifier and "> ION J CNVX WIDE" Klobuchar records. The
WIDE subtype, compulsory for the QZSS CNVX ION message type, is
correct because CNAV Message Type 30 broadcasts the Wide Area
coefficient set (IS-QZSS-PNT-006; the Japan area set of Message Type
61 is not decoded).
- QZSS CNAV parameters no longer overwrite the GPS CNAV ones in mixed
configurations.
- The QZSS slots of the RTKLIB navigation structure take the LNAV
values with CNAV as fallback, and QZSS-only configurations keep
feeding the broadcast ionospheric model and the leap second count.
- The XML storage output gains qzss_cnav_utc_model.xml and
qzss_cnav_iono.xml.
The Klobuchar coefficients and the UTC(NICT) offset broadcast by QZSS
satellites in LNAV subframe 4 (both the wide-area and Japan-area pages)
were stored in the shared GPS structures, overwriting the GPS-sourced
values in mixed GPS + QZSS configurations and making it impossible to
label them correctly in RINEX output.
New Qzss_Utc_Model and Qzss_Iono storage classes are now published by
the QZSS-configured L1 C/A telemetry decoder and kept in dedicated
Rtklib_Solver members. With this in place:
- RINEX 4.02 navigation files get "> STO J LNAV" QZUT records with the
UTC(NICT) identifier and "> ION J LNAV" Klobuchar records, and the
LEAP SECONDS header is updated from QZSS data in QZSS-only setups.
- QZSS-sourced parameters are no longer mislabeled as GPS corrections
(GPUT / GPS ION or TIME SYSTEM CORR / IONOSPHERIC CORR lines).
- The QZSS slots of the RTKLIB navigation structure (utc_qzs, ion_qzs)
are now populated; QZSS-only configurations keep feeding the broadcast
ionospheric model and the leap second count as before.
- The XML storage output gains qzss_utc_model.xml and qzss_iono.xml.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Activated by setting PVT.rinex_version=4 in the configuration file (or
with the -RINEX_version=4.02 command-line flag). The default behavior
when the parameter is not set remains unchanged (RINEX 3.02).
Observation files are generated in the 4.02 version format. Navigation
files use the data record structure introduced in RINEX 4.00:
- EPH ephemeris records preceded by "> EPH <sat> <msg-type>" header
lines: GPS/QZSS LNAV, GPS/QZSS CNAV (with its own record layout, Table
A10), Galileo INAV/FNAV, GLONASS FDMA (including the new BROADCAST
ORBIT - 4 line with status flags, group delay, URAI and health flags),
and BeiDou D1/D2.
- Ionospheric corrections logged as ION data records (Klobuchar for GPS
and BeiDou, NeQuick-G for Galileo) and time system corrections logged
as STO records (GPUT, GAUT, GAGP, GLUT, GLGP, BDUT) instead of header
lines, written as soon as the corresponding data are received.
- The compulsory LEAP SECONDS header record, written blank if the data
are not available yet and updated in place afterwards.
- Navigation data records use the recommended 'e' exponent indicator
instead of the deprecated FORTRAN 'D' notation.
Also fix update_obs_header() so that the end-of-file position is
preserved after rewriting the header, preventing the destructor from
mistaking an updated observation file for an empty one and deleting it.
- Restore true chip semantics for L1: QZSS_L1_CHIP_RATE is 1.023 Mcps and
QZSS_L1_CODE_LENGTH is 1023 chips again. The replica carries
QZSS_L1_SAMPLES_PER_CHIP = 2 samples per chip (L1 C/A chips duplicated,
L1 C/B sinBOC(1,1) subchips), following the Galileo E1 approach. The
generated waveform is unchanged, but Tracking_1J.early_late_space_chips
is expressed in chips again, consistently with all other signals.
- Normalize the DLL discriminator with the sinBOC(1,1) correlation
function when the tracked PRN broadcasts L1 C/B, selected per PRN in
start_tracking(); warn if the configured correlator spacing falls
outside the BOC(1,1) correlation main peak (> 0.33 chips).
- Attribute L1 C/B observables and ephemerides (PRN 203-206) to the PRN
of the satellite's nominal PNT signals (RINEX 4.00, Table 6), so RINEX,
RTCM and rtklib identify the transmitting satellite correctly and
multi-frequency observations of the same satellite are paired instead
of counted twice.
- Do not search QZSS L5 signals for PRNs above 202, which have no L5
PRN code assigned in IS-QZSS-PNT.
- Remove reserved, non-operational PRNs 198 and 202 from the default
QZSS search list; they remain selectable via the QZSS.prns option.
- Fix a potential std::out_of_range in
GNSSFlowgraph::priorize_satellites() when assisted acquisition
prioritizes satellites of a constellation with only a subset of its
signals configured.