GNSS-SDR v0.0.21 released
This release provides bug fixes and new features. Most relevant changes with respect to the former release are listed below:
Improvements in Availability:
- Introduced a histogram-based navigation data bit synchronizer used by tracking
loops to robustly detect navigation-bit transitions in signals without
secondary code. Lock is declared when the histogram exhibits a clearly
dominant phase bin, verified using a configurable dominance ratio and
stability criterion. Once synchronized, the tracking loop can safely switch to
extended coherent integration, improving tracking sensitivity and TTFF. New
configuration parameters are
Tracking_1C.bs_dominance_ratio(ratio between the count of the dominant histogram bin and the total number of detected transition events, default: 0.6),Tracking_1C.bs_stable_best_required(required number of consecutive evaluations with the same dominant histogram bin, default: 3), andTracking_1C.bs_min_events_for_lock(minimum number of detected transition events before lock evaluation, default: 10).
Improvements in Interoperability:
- Enabled multi-band processing off-loading to the FPGA when using the MAX2771 RF front-end.
- Added a new Signal Source implementation
NTLab_File_Signal_Source, which is able to read files grabbed from NTLab RF front-ends. - Improved
Labsat_Signal_Sourceby fixing multi-channel file reading from LabSat 3 recordings and adding initial support for LabSat 4. - Improvements in Glonass L1/L2 C/A signal tracking and decoding of the GNAV message.
- Added a cycle-slip detector, with events reported in internal logging and
RINEX observation files. This introduces a new field in
Gnss_Synchroand in the corresponding.protodefinition. - Improved tracking of GPS L2C(M) signals.
- Fixed GPS L1 decoding failure when
pull_in_time_sis too short. - Improved processing chain for BeiDou B1I and B3I signals.
- Added processing chains for the Quasi-Zenith Satellite System (QZSS), Japan’s regional navigation satellite system, supporting L1 C/A and L5 signals.
Improvements in Maintainability:
- Added a CI job to detect lines longer than 512 characters (avoid this lintian tag warning).
- Added formatting of
.protofiles with clang-format. Added check in CI job. - Major refactoring of the
GNSSFlowgraphandGNSSBlockFactoryclass implementations, greatly improving maintainability, simplifying the addition of new signals, and eliminating a lot of duplicated code. Awesome contribution by @MathieuFavreau. - Major refactoring of the acquisition adapters and GNU Radio blocks, improving maintainability and extensibility. Another excellent contribution by @MathieuFavreau.
- Refactoring of Telemetry Decoder adapters for better maintainability.
- Refactored the internal handling of multi-signal configurations in the PVT block for improved maintainability and extensibility. Another excellent contribution by @MathieuFavreau.
- Major refactoring of the RINEX printer, significantly improving maintainability and correcting several bugs. The printer now consistently populates all observable fields when multiple signals exist for the same constellation, writing zeros for missing observables as needed to strictly match the observables header format. Another excellent contribution by @MathieuFavreau.
- Integration of Glonass L1/L2 C/A signal tracking into the main tracking
engine. Removed
GLONASS_L1_CA_DLL_PLL_C_Aid_TrackingandGLONASS_L1_CA_DLL_PLL_C_Aid_TrackingTracking block implementations, replaced byGLONASS_L1_CA_DLL_PLL_TrackingandGLONASS_L1_CA_DLL_PLL_Tracking.
Improvements in Portability:
- Fixed building option
-DENABLE_ION=ONwhen using CMake >= 4.0. - Updated
gsl-liteto v1.0.1. See the gsl-lite release. - Updated local
cpu_featureslibrary to v0.10.1. - Allow linking against Boost 1.89.0.
- Added implementations of several
volk_gnsssdrkernels for the RISC‑V Vector (RVV) instruction set. Awesome contribution by @BigTurtle8 (Marcus Alagar) as part of Google Summer of Code 2025.
Improvements in Usability:
- Added a Python-based GNSS skyplot visualization utility at
utils/skyplot/skyplot.py, which generates a skyplot from a RINEX navigation file and saves the image in usual image formats. It requiresnumpyandmatplotlib. - Added a Python-based OSNMA timeline viewer visualization utility at
utils/osnma-log-viewer/osnma_log_viewer.py, which generates a plot from a GNSS-SDR log file containing OSNMA messages. It requiresmatplotlibandpandas. File_Signal_Sourcefixed file length and sample skip calculations on 32-bit systems.- Fixed tracking the same PRN in multiple channels. Previously, this could happen when the number of acquisition channels was close to the number of available PRNs for a given signal.
- Added a new global configuration parameter,
GNSS-SDR.tow_to_trk. When set totrue, Telemetry blocks send asynchronous messages back to the Tracking blocks containing the information required to compute the TOW and week number at the tracking stage. The default value isfalse. - Fixed a long-standing issue in which acquisition blocks still blocked
execution even when
blocking=falsewas specified in the configuration.
As usual, compressed tarballs are available from GitHub and Sourceforge.