Commit Graph
155 Commits
Author SHA1 Message Date
Carles Fernandez ac3f3f8e4c Improve robustness against a corrupted reference satellite 2026-08-22 11:10:08 +02:00
Carles Fernandez cb7366d2d9 Improve robustness against code outliers 2026-08-22 10:11:55 +02:00
Carles Fernandez 2f5322c20e Fix handling of malformed HTTP chunks 2026-08-22 10:01:31 +02:00
Carles Fernandez 07a0bed246 Improve snapshot caching in NTRIP client 2026-08-22 09:40:56 +02:00
Carles Fernandez 3867acb595 Fix DNS stalls in NTRIP client 2026-08-22 09:08:30 +02:00
Carles Fernandez e66c9a9538 Fix B3I-only Single Point Positioning ionosphere scaling 2026-08-22 08:47:13 +02:00
Carles Fernandez 6b1a2e2560 GnuTLS now verifies the leaf certificate for TLS server purpose 2026-08-22 08:35:43 +02:00
Carles Fernandez ac0e54bcab Address the findings of a third deep review of the RTK and NTRIP code 2026-08-19 20:49:12 +02:00
Carles Fernandez d9cdc16daa Address the findings of a second deep review of the RTK and NTRIP code 2026-08-18 21:31:57 +02:00
Carles Fernandez dd7931fc5b Fix defects found in a deep review of the RTK and NTRIP code 2026-08-18 12:56:49 +02:00
Carles Fernandez 9accccdbaa Add BeiDou B1C signals to RTK 2026-08-18 08:07:20 +02:00
Carles Fernandez e368102bfb Add single-frequency RTK 2026-08-17 20:29:25 +02:00
Carles Fernandez 43bff15976 Fix formatting 2026-08-17 14:19:31 +02:00
Carles Fernandez 59f2cb4509 Add L5 to RTK 2026-08-17 13:19:37 +02:00
Carles Fernandez 0ee669f59f Add Galileo E1+E5a to RTK 2026-08-17 11:52:41 +02:00
Carles Fernandez a936c4d2d8 Enable usage of Virtual Reference Stations 2026-08-17 09:37:25 +02:00
Carles Fernandez f65e43b72f Make the reacquisition-gap boundary robust to x87 excess precision 2026-08-16 19:35:48 +02:00
Carles Fernandez 3b94087b20 Fix rtklib_tls_test building against GoogleTest < 1.10
GTEST_SKIP() does not exist before GoogleTest 1.10, which breaks the
build on Ubuntu 16.04 with the distro-provided GoogleTest. Wrap it in
a guarded macro that records a success and returns on older versions,
following the pattern already used in osnma_test_vectors.cc.¡
2026-08-16 00:32:46 +02:00
Carles Fernandez 87d8a6991e Improve carrier phase integrity in the RTK engine 2026-08-15 21:22:41 +02:00
Carles Fernandez 9b8e047885 Enforce TLS 1.2 or newer, improve NTRIP v2 to v1 fallback 2026-08-15 11:30:28 +02:00
Carles Fernandez 5470aafe85 Add RTKLIB engine improvements 2026-08-11 08:57:04 +02:00
Carles Fernandez 1f9afe4431 Implement SBAS/EGNOS correction path 2026-08-09 07:55:04 +02:00
Carles Fernandez 02ac2ff616 Merge branch 'fix_beidou_geo_posvel' of https://github.com/vladisslav2011/gnss-sdr into vladisslav2011-fix_beidou_geo_posvel 2026-08-08 13:50:25 +02:00
Carles Fernandez e45f231a32 Merge branch 'fix-IbyteToComplexValidationOfResults' of https://github.com/vladisslav2011/gnss-sdr into vladisslav2011-fix-IbyteToComplexValidationOfResults 2026-08-08 13:16:35 +02:00
Vladslav P 55fcdea42a GnssEphemerisPosVelTest: add BeiDou GEO/IGSO tests
Signed-off-by: Vladslav P <vladisslav2011@gmail.com>
2026-08-08 14:11:08 +03:00
Carles Fernandez f0e75ce558 Improve SBAS L1 telemetry decoder and simplify SBAS adapters
Compensate the Viterbi traceback delay when timestamping decoded SBAS
messages by carrying per-sample reception timestamps through the sample
and symbol aligners (removes a ~140 ms bias), with a deterministic unit
test covering the FIFO pairing.
Protect decoder state with d_setlock in reset(), set_satellite(),
set_channel() and general_work(), following the convention of the other
telemetry decoders.
Share per-PRN EMS dump files through a per-run dump session: the first
open in a run truncates stale data, later opens append, so channel
reassignments no longer wipe previously decoded messages.
2026-08-08 12:10:10 +02:00
Vladslav P 59830231a0 Fix broken test IbyteToComplexValidationOfResults
Call run_ibyte_to_complex_block instead of run_ibyte_to_cbyte_block
before valudating the result.

Signed-off-by: Vladslav P <vladisslav2011@gmail.com>
2026-08-08 12:31:26 +03:00
Carles Fernandez 697f3fab66 Merge branch 'ft/sbas' of https://github.com/gnss-sdr/gnss-sdr-vtl into gnss-sdr-ft/sbas 2026-08-08 10:38:50 +02:00
Carles Fernandez e3a369009d Fix tests 2026-08-07 15:30:18 +02:00
Carles Fernandez 0ea3c54429 Improve printing of BeiDou B1C data 2026-08-07 14:27:22 +02:00
miguekf ef7df8f5ad Guard SBAS Viterbi startup traceback
Wait until the continuous decoder has accumulated the requested traceback depth before advancing trellis iterators. Add a regression test for the 30-bit SBAS input block versus its 35-bit traceback depth.

Signed-off-by: miguekf <miguel.gomezlopez@uclm.es>
2026-08-04 23:05:33 +02:00
kalmancitoandClaude Opus 5 68bac23bcb Fix sign convention in SBAS message timestamp correction
The symbol alignment term of compute_message_timestamp() used the
opposite sign convention to the sample alignment term. In both
aligners, true means the non-shifted hypothesis won (no correction)
and false means the shifted one won (-1 unit), so the symbol term
must be (symbol_aligned ? 0 : -1).

Two of the unit tests added along with that function were failing as
a result, which is what broke the check step of the CI on all three
platforms.

Also express the correction bound in whole code periods rather than
comparing doubles at an exact boundary: the worst case is 3 code
periods (1 from the sample-pairing ambiguity plus 2 from the
symbol-pairing one), not 2, and the floating-point comparison was
fragile at that boundary.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-04 23:05:33 +02:00
miguekf f129a4af8e Address PR #1059 review: PRN whitelist, SBAS coherent integration, timestamp, reset, dead code, config
- gnss_satellite.cc: accept the full supported SBAS PRN range (120-138)
  instead of a stale 6-PRN whitelist that rejected valid PRNs such as WAAS
  PRN 133. Per-PRN satellite/service names are no longer hardcoded, since
  that assignment changes over time and cannot be reliably kept up to date
  here (fixes review comments on PRN support and outdated satellite info).
- SBAS_L1.h: cap SBAS_L1_MAX_COHERENT_INTEGRATION_SYMBOLS at 1 (1 ms). The
  telemetry decoder performs its own unsynchronized sample/symbol pairing,
  so extending tracking's coherent integration to 2 ms is unsafe and
  corrupts that pairing.
- sbas_l1_telemetry_decoder_gs.{h,cc}: carry an absolute per-sample/per-bit
  timestamp through the sample buffer and Frame_Detector, replacing the
  buggy offset that anchored the message timestamp to whichever sample was
  current when decoding happened, which could be off by up to a full
  message duration. Add
  sbas_l1_telemetry_decoder_gs::compute_message_timestamp() as a small,
  independently testable helper for the residual sub-bit correction, and a
  matching deterministic unit test.
- sbas_l1_telemetry_decoder_gs.{h,cc}: implement a real reset() that clears
  all decoder buffers/aligners and closes the dump file, so a channel
  reassigned to a different PRN never mixes messages into the previous
  satellite's file.
- Remove the orphan sbas_l1_telemetry_decoder.cc adapter: it includes a
  header that no longer exists and is not part of any CMake target (the
  factory instantiates the GNU Radio block directly), so it silently never
  compiled.
- Dump file: overwrite instead of append on each run, remove the hardcoded
  GNSS-SDR version string, and document that the .ems output is an
  EMS-like raw message dump, not a conformant EMS file.
- conf/File_input/SBAS/gnss-sdr_SBAS_EGNOS_rx.conf: drop the outdated
  PRN/satellite table and per-channel satellite comments, correct the
  coherent-integration note to 1 ms, and clarify that SBAS is not used as
  a ranging source in this configuration.

Signed-off-by: miguekf <miguel.gomezlopez@uclm.es>
2026-08-04 23:05:33 +02:00
Carles Fernandez b596884e9e Merge upstream next into contrib/beidou-b1c-clean
Signed-off-by: Carles Fernandez <carles.fernandez@cttc.es>
2026-08-03 21:09:57 +02:00
Carles Fernandez 833bfb5dd1 Corrected RINEX 3/4 navigation and observation output 2026-08-03 11:47:34 +02:00
OuWenhao16 aa1ca2163d Fix SOH framing/sync-loss and other questions raised by the PM.
Keep BeiDou B1C/CNAV1-focused changes; remove B1I OPT_ACQ, outlier PR
gating, DNAV toe/sqrt(A) sanity, and Flag_cycle_slip move-assignment submitted separately.

Signed-off-by: OuWenhao16 <104730917+OuWenhao16@users.noreply.github.com>
2026-08-01 02:32:19 +08:00
OuWenhao16 97680490e0 Address Project Manager review feedback for BeiDou B1C/CNAV1.
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>
2026-08-01 02:32:18 +08:00
OuWenhao16 da9eba4af2 Remove redundant BeiDou PVT pre-filters in the src/algorithms/PVT/libs/rtklib_solver.cc.
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>
2026-08-01 02:32:17 +08:00
OuWenhao16 e633273448 Fix B1C PVT: separate B1I/B1C bands, isolate DNAV/CNAV1, and harden hybrid solving.
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>
2026-08-01 02:32:16 +08:00
OuWenhao16 77f2c18f01 Add BeiDou B1C (signal 1D) signal processing and CNAV1 support.
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>
2026-08-01 02:32:08 +08:00
Carles Fernandez 5454bc22ee Complete BeiDou D1/D2 DNAV decoding 2026-07-31 19:11:58 +02:00
Carles Fernandez f7fa1ff68e Merge branch 'fix-L2-L5-CNAV' of https://github.com/vladisslav2011/gnss-sdr into vladisslav2011-fix-L2-L5-CNAV 2026-07-31 16:51:51 +02:00
Vladslav P 2f86def08b GnssEphemeris position/velocity test: BeiDou DNAV
Signed-off-by: Vladslav P <vladisslav2011@gmail.com>
2026-07-31 03:31:04 +03:00
Vladslav P b070e4fbe4 GnssEphemeris position/velocity test: Galileo
Signed-off-by: Vladslav P <vladisslav2011@gmail.com>
2026-07-31 03:31:04 +03:00
Vladslav P 5eb08f9baa GnssEphemeris position/velocity test: GPS NAV
Signed-off-by: Vladslav P <vladisslav2011@gmail.com>
2026-07-31 03:31:04 +03:00
Vladslav P a42d93567b GnssEphemeris position/velocity test: CNAV
Signed-off-by: Vladslav P <vladisslav2011@gmail.com>
2026-07-31 03:31:04 +03:00
kalmancito 81f4c8846b Add SBAS support 2026-07-30 17:40:43 +02:00
Carles Fernandez cfc45fb8bf Store QZSS L5 CNAV UTC and iono parameters separately, log CNVX records
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.
2026-07-30 12:55:28 +02:00
Carles FernandezandClaude Fable 5 4f570e7867 Store QZSS UTC and iono parameters separately and log RINEX 4 QZUT records
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>
2026-07-30 12:21:59 +02:00
Carles Fernandez e52191d476 Add support for RINEX 4.02 observation and navigation files
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.
2026-07-30 11:22:10 +02:00