Releases: gnss-sdr/gnss-sdr
GNSS-SDR v0.0.20
This release provides bug fixes and new features. Most relevant changes with respect to the former release are listed below:
Improvements in Interoperability:
-
Improved error handling in UDP connections.
-
Make it possible to receive multiple constellations using a single channel wideband device (HackRF/LimeSDR/USRP). Demonstration: here and here.
-
Add the following signal sources for use when GNSS-SDR is operating on SoC FPGA boards (
-DENABLE_FPGA=ON
):ADRV9361_Z7035_Signal_Source_FPGA
: Analog Devices ADRV9361-Z7035 board.FMCOMMS5_Signal_Source_FPGA
: FMCOMMS5 analog front-end.MAX2771_EVKIT_Signal_Source_FPGA
: MAX2771 evaluation kit analog front-end.DMA_Signal_Source_FPGA
: FPGA DMA working in post-processing mode.
When building GNSS-SDR for the SoC FPGA, the following options can be passed to CMake with possible values of
ON
orOFF
, and their default value isOFF
:-DENABLE_AD9361
: Checks if the IIO driver is installed and builds theADRV9361_Z7035_Signal_Source_FPGA
and theFMCOMMS5_Signal_Source_FPGA
sources.-DENABLE_MAX2771
: Checks if the SPIdev driver is installed and builds theMAX2771_EVKIT_Signal_Source_FPGA
source.-DENABLE_DMA_PROXY
: Checks if the DMA proxy driver is installed for controlling the DMA in the FPGA and enables its usage.
-
Add the
ION_GSMS_Signal_Source
, which is able to process raw data files described with the ION GNSS Software Defined Receiver Metadata Standard. It requires the-DENABLE_ION=ON
building configuration option. -
The
Monitor
andPVT
blocks are now able to send data to multiple UDP ports. -
Add experimental decoding of Galileo's I/NAV ARAIM Integrity Support Message (ISM) as defined in the OS SIS ICD v2.1. Values, if received, are only logged but not used.
-
Added new
Cshort_To_Gr_Complex
Data Type Adapter implementation. -
The Osmosdr_Signal_Source has gained two new optional configuration parameters:
iq_balance_mode
anddc_offset_mode
, both of which are set to Automatic by default. -
Implemented missing GPS almanac decoding.
Improvements in Maintainability:
- Updated GSL implementation to v0.42.0. See the gsl-lite release.
- Code formatting now based on clang-format 19.
Improvements in Portability:
- Fix building against google-glog 0.7.x.
- Find dependencies in the loongarch64 architecture.
- Soft transition from GFlags and Google Logging (glog) to Abseil Logging and Flags libraries. While gflags and glog have dutifully served GNSS-SDR for over a decade, they are now showing signs of aging. The latest version of gflags dates back six years now, although the master branch seems to be maintained. Glog remains well maintained, with its latest version v0.7.1 released in June 2024, but with no active development of new features and stuck at C++14. Abseil, on the other hand, represents a contemporary evolution in software development, supports C++17 and C++20, and has absorbed the functionalities of flags and logging from its predecessors. Furthermore, as Abseil has become a prerequisite for the latest versions of Protocol Buffers, its eventual inclusion in GNSS-SDR's indirect dependencies is inevitable. Leveraging Abseil allows for eliminating the need for gflags and glog, thereby reducing the number of mandatory dependencies for GNSS-SDR in forthcoming GNU/Linux distributions. For seamless integration, GNSS-SDR requires a quite recent minimum version of Abseil, v20240116. If an older version is detected, the library will not be utilized, and GNSS-SDR will fall back to using gflags and glog, which still can be used and are fully supported. A new CMake configuration option
-DENABLE_GLOG_AND_GFLAGS=ON
is available to force the usage of glog and gflags instead of Abseil, even if a valid version of that library is present. If the Abseil version installed in your system is too old but you still want to try it, you can also force the downloading and building of a recent version with the new CMake configuration flag-DENABLE_OWN_ABSEIL=ON
(requires CMake >= 3.24, otherwise it has no effect). This change has a downside in maintainability, since the source code becomes plagued with preprocessor directives required to maintain compatibility both with gflags and glog, and with Abseil. - Historically, GNSS-SDR linked against the GnuTLS library for cryptographic functions. If GnuTLS was not found, then the building system looked for and linked against OpenSSL as a fallback. This was due to the OpenSSL 1.x dual license scheme, which was incompatible with GPL v3.0 license, preventing it from being a mandatory dependency for GNSS-SDR in most GNU/Linux distributions. This issue was solved with the release of OpenSSL 3.0.0, which transitioned to the Apache License 2.0, fully compatible with GPL v3.0. Accordingly, the GNSS-SDR building system now looks for OpenSSL in the first place and, if not found, then it looks for GnuTLS as a fallback. The new CMake configuration option
-DENABLE_GNUTLS=ON
allows linking against GnuTLS instead of OpenSSL. - Allow linking against Boost 1.87.0.
- Replace the System V queues by boost::interprocess, improving portability.
- Improve detection of Homebrew or Macports in macOS.
Improvements in Reliability:
- Implementation of the Galileo Open Service Navigation Message Authentication (OSNMA), a data authentication function for the Galileo Open Service worldwide users, freely accessible to all. OSNMA provides receivers with the assurance that the received Galileo navigation message is coming from the system itself and has not been modified. OSNMA is enabled by default if the receiver configuration defines Galileo E1 OS channels. More details can be found in Introducing GNSS Navigation Message Authentication.
Improvements in Usability:
-
Tidy up the
conf/
folder. -
Add
install
anduninstall
targets to thenav_msg_listener
utility. -
Potential Breaking Change: The source tree has been refactored to follow a more conventional folder structure. This may disrupt user pipelines that relied on the previous structure and could break development branches that were branched off from
next
before this change. The key changes are:- The
tests
andutils
directories have been moved from thesrc
folder to the root of the source tree. - The empty
build
anddata
folders have been removed. Users can create a building folder usingmkdir build
or by having CMake handle it:cmake -S . -B build
. - All default names for dump or input files starting with
../data/<filename>
have been changed to./<filename>
.
- The
GNSS-SDR v0.0.19.1
Changelog for v0.0.19.1
- Fix formatting of
CITATION.cff
file.
Changelog for v0.0.19
This release provides bug fixes and new features. The most relevant changes with respect to the former release are listed below:
Improvements in Efficiency:
- Fixed some performance inefficiencies detected by Coverity Scan.
Improvements in Interoperability:
- Added a new PVT configuration boolean flag (
flag_geohash_log_out
) that enables or disables the Position Geohash tag output in INFO log files. Set tofalse
by default. - New fields have been added to the custom output stream defined by
monitor_pvt.proto
:utc_time
(a RFC 3339 datetime string),- velocity in the local ENU frame (
vel_e
,vel_n
, andvel_u
), in m/s, - the course over ground,
cog
, in degrees, - the status of the Galileo's High Accuracy Service,
galhas_status
:- 0: HAS data not available
- 1: HAS Corrections applied
geohash
, an encoded geographic location.
Improvements in Maintainability:
- Removed useless casts and shadowed variables, improving source code readability.
Improvements in Portability:
- Updated local
cpu_features
library to v0.9.0. volk_gnsssdr
: fix syntax for Python 3.12 without breaking backward compatibility with Python 2.7.- Fixed linking against GNU Radio v3.10.9.1.
- Make use of new API if linking against VOLK >= 3.1.
- Fixed undefined behavior in
volk_gnsssdr
arising from incompatibility between complex numbers in C and C++. - Now build system paths are not leaked when cross-compiling.
- Enabled building using macOS Sonoma and
arm64
processor architecture.
Improvements in Repeatability:
- A Kalman filter is now available in the PVT block, smoothing the outputs of a simple Least Squares solution and improving the precision of delivered fixes. It can be enabled by setting
PVT.enable_pvt_kf=true
in the configuration file. The user can set values for the measurement and process noise covariances with the following optional parameters (here with their default values):PVT.kf_measures_ecef_pos_sd_m=1.0
, in [m];PVT.kf_measures_ecef_vel_sd_ms=0.1
, in [m/s];PVT.kf_system_ecef_pos_sd_m=2.0
, in [m]; andPVT.kf_system_ecef_vel_sd_ms=0.5
, in [m/s].
Improvements in Scalability:
- Fixed some potential data race conditions detected by Coverity Scan.
Improvements in Usability:
- The Galileo E1B Reduced CED parameters usage has been set to
false
by default. You can activate its usage withGalileo_E1B_Telemetry_Decoder=true
in your configuration file. - The generation of Galileo E6B observables has been disabled if the user sets
PVT.use_e6_for_pvt=false
, fixing the PVT computation in some multi-band configurations. - Fix bug in the custom binary output (
PVT.enable_monitor=true
) output rate. Before this fix, it was outputting data every 20 ms, instead of observing thePVT.output_rate_ms
setting. - Now the program exits properly if a SIGINT signal is received (e.g., the user pressing Ctrl+C, or another user application sending an interruption signal).
- The estimated CN0 value is now printed in the terminal when navigation data is successfully decoded.
- Fixed GPS navigation message satellite validation.
- Latitude and longitude are now reported in the terminal with six decimal places (the sixth decimal place worths up to 0.11 m), instead of the overkilling nine (the ninth decimal place worths up to 110 microns). Similarly, height in meters is now reported with two decimal places instead of three, and velocity in m/s also with two decimal places instead of three.
- Fixed the rate at which KML, GPX, GeoJSON, and NMEA annotations are made. The rate is now set by
PVT.output_rate_ms
(500
ms by default), and can be particularized byPVT.kml_rate_ms
,PVT.gpx_rate_ms
,PVT.geojson_rate_ms
, andPVT.nmea_rate_ms
. Those values should be multiples ofPVT.output_rate_ms
, or the least common multiple will be taken.
See the definitions of concepts and metrics at https://gnss-sdr.org/design-forces/
GNSS-SDR v0.0.19
This release provides bug fixes and new features. The most relevant changes with respect to the former release are listed below:
Improvements in Efficiency:
- Fixed some performance inefficiencies detected by Coverity Scan.
Improvements in Interoperability:
- Added a new PVT configuration boolean flag (
flag_geohash_log_out
) that enables or disables the Position Geohash tag output in INFO log files. Set tofalse
by default. - New fields have been added to the custom output stream defined by
monitor_pvt.proto
:utc_time
(a RFC 3339 datetime string),- velocity in the local ENU frame (
vel_e
,vel_n
, andvel_u
), in m/s, - the course over ground,
cog
, in degrees, - the status of the Galileo's High Accuracy Service,
galhas_status
:- 0: HAS data not available
- 1: HAS Corrections applied
geohash
, an encoded geographic location.
Improvements in Maintainability:
- Removed useless casts and shadowed variables, improving source code readability.
Improvements in Portability:
- Updated local
cpu_features
library to v0.9.0. volk_gnsssdr
: fix syntax for Python 3.12 without breaking backward compatibility with Python 2.7.- Fixed linking against GNU Radio v3.10.9.1.
- Make use of new API if linking against VOLK >= 3.1.
- Fixed undefined behavior in
volk_gnsssdr
arising from incompatibility between complex numbers in C and C++. - Now build system paths are not leaked when cross-compiling.
- Enabled building using macOS Sonoma and
arm64
processor architecture.
Improvements in Repeatability:
- A Kalman filter is now available in the PVT block, smoothing the outputs of a simple Least Squares solution and improving the precision of delivered fixes. It can be enabled by setting
PVT.enable_pvt_kf=true
in the configuration file. The user can set values for the measurement and process noise covariances with the following optional parameters (here with their default values):PVT.kf_measures_ecef_pos_sd_m=1.0
, in [m];PVT.kf_measures_ecef_vel_sd_ms=0.1
, in [m/s];PVT.kf_system_ecef_pos_sd_m=2.0
, in [m]; andPVT.kf_system_ecef_vel_sd_ms=0.5
, in [m/s].
Improvements in Scalability:
- Fixed some potential data race conditions detected by Coverity Scan.
Improvements in Usability:
- The Galileo E1B Reduced CED parameters usage has been set to
false
by default. You can activate its usage withGalileo_E1B_Telemetry_Decoder=true
in your configuration file. - The generation of Galileo E6B observables has been disabled if the user sets
PVT.use_e6_for_pvt=false
, fixing the PVT computation in some multi-band configurations. - Fix bug in the custom binary output (
PVT.enable_monitor=true
) output rate. Before this fix, it was outputting data every 20 ms, instead of observing thePVT.output_rate_ms
setting. - Now the program exits properly if a SIGINT signal is received (e.g., the user pressing Ctrl+C, or another user application sending an interruption signal).
- The estimated CN0 value is now printed in the terminal when navigation data is successfully decoded.
- Fixed GPS navigation message satellite validation.
- Latitude and longitude are now reported in the terminal with six decimal places (the sixth decimal place worths up to 0.11 m), instead of the overkilling nine (the ninth decimal place worths up to 110 microns). Similarly, height in meters is now reported with two decimal places instead of three, and velocity in m/s also with two decimal places instead of three.
- Fixed the rate at which KML, GPX, GeoJSON, and NMEA annotations are made. The rate is now set by
PVT.output_rate_ms
(500
ms by default), and can be particularized byPVT.kml_rate_ms
,PVT.gpx_rate_ms
,PVT.geojson_rate_ms
, andPVT.nmea_rate_ms
. Those values should be multiples ofPVT.output_rate_ms
, or the least common multiple will be taken.
See the definitions of concepts and metrics at https://gnss-sdr.org/design-forces/
GNSS-SDR v0.0.18
This release provides bug fixes and new features. Most relevant changes with respect to the former release are listed below:
Improvements in Accuracy:
- Processing and application of the corrections provided by the Galileo High Accuracy Service (HAS) to the PVT solution. It requires at least a Galileo E1 (or E5a) + Galileo E6B configuration. A new configuration parameter
PVT.use_has_corrections
, set totrue
by default, can be used to deactivate the application of HAS corrections but still retrieve the HAS data if set tofalse
.
Improvements in Availability:
- Fixed bug that made the PVT block to not resolve position anymore after a loss of samples event.
- Improved non-coherent acquisition when
Acquisition_XX.blocking=false
. - Implemented processing of BeiDou PRN 34 up to PRN 63 signals.
- Implemented Hamming code correction for Glonass navigation message.
- Now the first iteration of the PVT computation is initialized by the Bancroft method. This allows to get PVT fixes in some unusual geometries (e.g., GNSS-like signals transmitted by LEO satellites). This initialization is performed by default. You can opt-out by setting
PVT.bancroft_init=false
in your configuration file.
Improvements in Interoperability:
- Enabled PVT computation in the Galileo E5a + E5b receiver. Observables reported in the RINEX file.
- Fixed PVT computation in the Galileo E5b-only receiver.
- Get E6B observables and PVT solutions in the Galileo E1B + E6B receiver. Decoding of HAS messages as described in the HAS SIS ICD v1.0. Generation of RTCM 3.2 messages from the received HAS messages in the IGS State Space Representation (SSR) Format. Specifically, it generates messages of type IGM01 (SSR Orbit Correction), IGM02 (SSR Clock Correction), IGM03 (SSR Combined Orbit and Clock Correction), and IGM05 (SSR Code Bias).
- Added a
ZMQ_Signal_Source
for working with streams of samples published via ZeroMQ. - Fixed register unpacking for Labsat3W files in
Labsat_Signal_S 8000 ource
. This fix is only available if gnss-sdr is linked against Boost >= 1.58.0.
Improvements in Maintainability:
- The now archived GPSTk toolkit, used in some optional tests and applications, has been replaced by the new GNSSTk C++ Library. Compatibility with the former GPSTk toolkit is maintained.
Improvements in Portability:
- Improved detection of the BLAS library under macOS / Macports (the
lapack
port dependency installed with the+openblas
variant does not installblas
butopenblas
, which is used as a replacement ifblas
is not found). - Removed duplicated files in the Secure User Plane Location implementation, which caused issues when linking with some compilers.
- Added support for Xilinx's Zynq UltraScale+ devices (requires the
-DENABLE_FPGA=ON
building option). - Fixed running time error if the
gnss-sdr
binary and/or the GNU Radio libraries were built with the-D_GLIBCXX_ASSERTIONS
compiler option. This is added by default in some GNU/Linux distributions (e.g., ArchLinux and Fedora). - Fixed linking against libunwind when the glog library is built locally.
- The configuration options at building time
-DENABLE_OWN_GLOG
,-DENABLE_OWN_ARMADILLO
, and-DENABLE_OWN_GNSSTK
can now be switchedON
andOFF
without the need to start from an empty buiding folder. - Improved CMake handling of the spdlog library used by GNU Radio >= 3.10.
- Make use of the C++20 standard if the environment allows for it.
- Improved passing of compiler flags to
volk_gnsssdr
if the corresponding environment variables are defined. This fixes warnings in some packaging systems. - Improved support for the RISC-V architecture.
- Test files are now donwloaded at configuration time instead of being included in the source tree. This allows for a smaller package and fixes Lintian
very-long-line-length-in-source-file
warnings since those files were not recognized as binaries. The configuration flag-DENABLE_PACKAGING=ON
passed to CMake deactivates file downloading. - The
ENABLE_GENERIC_ARCH
building option was removed, simplifying the process of buiding the software in non-x86 processor architectures. - If the Protocol Buffers dependency is not found, it is downloaded, built and statically linked at buiding time. If CMake >= 3.13 and the Abseil C++ libraries >= 20230117 are installed on your system, Protocol Buffers v22.2 will be used. If those requirements are not met, Protocol Buffers v21.4 will be used instead (requires autotools).
- Since Debian 8 "Jessie", which enjoyed Long Term Support until the end of June 2020, is not anymore in the Debian official repositories, we drop its support.
- Fixes for GCC 13 and Clang 16.
Improvements in Usability:
- Fixed large GLONASS velocity errors and the extended correlator when using the
GLONASS_L1_CA_DLL_PLL_C_Aid_Tracking
andGLONASS_L2_CA_DLL_PLL_C_Aid_Tracking
implementations. - The
UHD_Signal_Source
learned a new parameterotw_format
for setting the over-the-wire data format (that is, the format used between the device and the UHD) in some devices, thus allowing to select thesc8
format instead of the defaultsc16
. This would reduce the dynamic range and increase quantization noise, but also reduces the load on the data link and thus allows for more bandwidth. - The
UHD_Signal_Source
learned another two optional parameters:device_recv_frame_size
anddevice_num_recv_frames
for overriding transport layer defaults. - Added gain setting and reading for the XTRX board when using the
Osmosdr_Signal_Source
implementation of aSignalSource
. - The
Osmosdr_Signal_Source
implementation learned a new parameterif_bw
to manually set the bandwidth of the bandpass filter on the radio frontend. - The new configuration parameter
Channels_XX.RF_channel_ID
allows to specify the signal source per channel group. - New configuration parameter
PVT.use_unhealthy_sats
, set by default tofalse
, allows processing observables of satellites that report an unhealthy
status in the navigation message if set totrue
. - Added the Geohash of the PVT solution in the internal logs.
- Allowed the CMake project to be a sub-project.
See the definitions of concepts and metrics at https://gnss-sdr.org/design-forces/
GNSS-SDR v0.0.17
This release provides minor bug fixes, new features, and compatibility with GNU Radio 3.10.2.0. Most relevant changes with respect to the former release are listed below:
Improvements in Availability:
- Compute PVT solutions when using GPS L5 signals even if the satellite is reported as not healthy in the CNAV message.
Improvements in Portability:
- Updated
cpu_features
library to v0.7.0. The building optionENABLE_OWN_CPUFEATURES
has been replaced byENABLE_CPUFEATURES
, defaulting toON
. - Fixed building against GNU Radio v3.10.2.0.
Improvements in Reliability:
- Fix some defects detected by Coverity Scan 2021.12.1.
Improvements in Usability:
- Added a script at
src/utils/scripts/download-galileo-almanac.sh
that downloads an XML file with the latest Galileo almanac published by the European GNSS Service Centre at https://www.gsc-europa.eu/product-almanacs
See the definitions of concepts and metrics at https://gnss-sdr.org/design-forces/
GNSS-SDR v0.0.16
This release adds new features and fixes some bugs. Most relevant changes with respect to the former release are listed below:
Improvements in Availability
- Added the Galileo E5b receiving chain. The software is now able to compute PVT solutions as a standalone Galileo E5b receiver.
- Improved Time-To-First-Fix when using GPS L1 C/A signals, fixing a bug that was making the receiver to drop the satellite if the PLL got locked at 180 degrees, and making some optimizations on bit transition detection.
- Fixed a bug that prevented from obtaining PVT fixes with Galileo E1 OS signals if the I/NAV subframe type 0 was the first decoded subframe.
Improvements in Interoperability
- Fixed setting of the signal source gain if the AGC is enabled when using the AD9361 front-end.
- Fixed the regeneration of Galileo ephemeris from the reduced clock and ephemeris data (CED) defined in the Galileo E1B INAV message introduced in Galileo OS SIS ICD Issue 2.0.
- Added a
Limesdr_Signal_Source
for interoperability with LimeSDR (requires gr-limesdr and the-DENABLE_LIMESDR=ON
building flag).
Improvements in Maintainability
- Rewritten Viterbi decoder for Galileo navigation messages. Encapsulated in a class instead of being implemented as free inline functions. This improves memory management and source code readability.
- Prefer initialization to assignment in constructors. This improves the readability of the code, could potentially increase performance, and allows for easier detection of unused data members (see the CppCoreGuidelines. Added the
cppcoreguidelines-prefer-member-initializer
clang-tidy check to enforce this policy. - Non-functional change: Fixed formatting defects detected by clang-format 13.0.
- Non-functional change: Simplified flow graph disconnection.
- Updated GSL implementation to v0.40.0. See the gsl-lite release
- CI -
cpplint
job on GitHub: Added thebuild/include_what_you_use
filter for early detection of missing includes. - CI -
clang-tidy
job on GitHub: More robust detection of LLVM paths installed by homebrew.
Improvements in Portability
- Fixed building against the new API in the gr-iio component present in GNU Radio v3.10.X.Y.
- Fixed building against GNU Radio v3.10.X.Y, which does not support the C++20 standard.
- Fixed building against GNU Radio v3.10.X.Y, which replaced log4cpp by the spdlog and fmt libraries.
- Updated
cpu_features
library for improved processor detection.
Improvements in Reliability
- Fixed some potential buffer overflows.
- Avoid source code lines longer than 512 characters. This was a warning raised by Lintian (very-long-line-length-in-source-file). Long lines in source code could be used to obfuscate the source code and to hide stuff like backdoors or security problems.
Improvements in Usability
- Added a new monitor to extract the decoded data bits of the navigation messages and send them elsewhere via UDP. Activated by setting
NavDataMonitor.enable_monitor=true
,NavDataMonitor.client_addresses=127.0.0.1
andNavDataMonitor.port=1237
in the configuration file. Format described in thenav_message.proto
file. A simple listener application written in C++ is included insrc/utils/nav-listener
as an example. - Extract successful rate of the CRC check in the decoding of navigation messages. This can be enabled by setting
TelemetryDecoder_XX.dump_crc_stats=true
and, optionally,TelemetryDecoder_XX.dump_crc_stats_filename=./crc_stats
in the configuration file. At the end of the processing (or exiting withq
+[Enter]
), the CRC check success rate will be reported in a file. - The
UHD_Signal_Source
learned to dump data in folders that do not exist, e.g., ifSignalSource.dump=true
,SignalSource.dump_filename=./non-existing/data.dat
, and thenon-existing
folder does not exist, it will be created if the running user has writing permissions. This also works for absolute paths. - Added a new configuration parameter
PVT.rtk_trace_level
that sets the logging verbosity level of the RTKLIB library. - Added a new output parameter
Flag_PLL_180_deg_phase_locked
in the monitor output that indicates if the PLL got locked at 180 degrees, so the symbol sign is reversed. - Fixed a bug in the satellite selection algorithm for configurations with a large number of channels. The maximum number of channels per signal is now limited to the number of available satellites per system minus one. The number of channels performing concurrent acquisition,
Channels.in_acquisition
, cannot be larger than the total number of channels. The program will stop if those requirements are not met in the configuration file. - Fixed program termination when using
File_Signal_Source
and extended integration times. - The
Fifo_Signal_Source
Signal Source implementation learned to handle theibyte
type. - Added a
CITATION.cff
file. - Updated version of the Contributor Covenant to version 2.1.
See the definitions of concepts and metrics at https://gnss-sdr.org/design-forces/
GNSS-SDR v0.0.15
This is a maintenance and bug fix release, with the addition of some minor features. Most relevant changes with respect to the former release are listed below:
Improvements in Availability:
- Added the reading of reduced clock and ephemeris data (CED) in the Galileo E1B INAV message introduced in Galileo OS SIS ICD Issue 2.0. If the reduced CED is available before the full ephemeris set, it is used for PVT computation until the full set has not yet been received. This can contribute to shortening the Time-To-First-Fix. Still experimental.
- Added the exploitation of the FEC2 Erasure Correction in the Galileo E1B INAV message introduced in Galileo OS SIS ICD Issue 2.0. This can contribute to shortening the Time-To-First-Fix. Since the added computational cost could break some real-time configurations, this feature is disabled by default. Itcan be activated from the configuration file by adding
TelemetryDecoder_1B.enable_reed_solomon=true
. - Reduction of the TTFF in GPS L1 and Galileo E1 by improving the frame synchronization mechanism.
Improvements in Maintainability:
- The Contributor License Agreement (CLA) signing for new contributors has been replaced by a Developer's Certificate of Origin (DCO),which implies that contributed commits in a pull request need to be signed as a manifestation that contributors have the right to submit their work under the open source license indicated in the contributed file(s) (instead of asking them to sign the CLA document).
- Improved handling of changes in GNU Radio 3.9 FFT API.
- Improved handling of the filesystem library.
- Added an abstract class
SignalSourceInterface
and a common base classSignalSourceBase
, which allow removing a lot of duplicated code in Signal Source blocks, and further abstract file-based interfaces behind them. - Do not apply clang-tidy fixes to protobuf-generated headers.
- Refactored private implementation of flow graph connection and disconnection for improved source code readability.
- Added a base class for GNSS ephemeris, saving some duplicated code and providing a common nomenclature for ephemeris' parameters. New generated XML files make use of the new parameters' names.
- Update GSL implementation to 0.38.1. See https://github.com/gsl-lite/gsl-lite/releases/tag/v0.38.1
- Update references to the latest GPS ICDs (IS-GPS-200M, IS-GPS-800H, IS-GPS-705H) published in May, 2021.
Improvements in Portability:
- Avoid collision of the
cpu_features
library when installing thevolk_gnsssdr
library on its own, and VOLK has already installed its version. Added a new building optionENABLE_OWN_CPUFEATURES
, defaulting toON
when buildinggnss-sdr
but defaulting toOFF
when building a stand-alone version ofvolk_gnsssdr
. When this building option is set toON
, it forces the building of the local version of thecpu_features
library, regardless of whether it is already installed or not. - CMake's
<policy_max>
version bumped to 3.21. The minimum CMake version is 2.8.12. - Fix building when using the Xcode generator, Xcode >= 12 and CMake >= 3.19.
- Fix building of FPGA blocks when linking against GNU Radio >= 3.9 and/or Boost >= 1.74.
- Fix linking of the
<filesystem>
library when using GCC 8.x and GNU Radio >= 3.8. - If the Matio library is not found, now it is configured and built by CMake instead of using autotools.
- Added support for Apple M1 AArch64 architecture processor and for FreeBSD on x86, improved AMD microarchitecture detection.
- CMake now selects the C++23 standard if the environment allows for it.
- Improved detection of Gnuplot and
gnss_sim
when cross-compiling. - NEON kernel implementations of the
volk_gnsssdr
library are now enabled in aarch64 architectures.
Improvements in Reliability
- Bug fix in the Galileo E1/E5 telemetry decoder that produced incorrect timing information if a satellite is lost and then readquired.
- Check satellites' health status. If a satellite is marked as not healthy in its navigation message, the corresponding observables are not used for navigation.
Improvements in Usability:
- Added a new
Fifo_Signal_Source
implementation that allows using a Unix FIFO as a signal source, thus allowing to multiplex signal streams outside ofgnss-sdr
, letting another program hold access to the receiver, or allowing signal sources that are not supported bygnss-sdr
but can dump the signal to a FIFO. - Avoid segmentation faults in the flow graph connection and/or starting due to some common inconsistencies in the configuration file.
- Provide hints to the user in case of failed flow graph connection due to inconsistencies in the configuration file.
- Fix segmentation fault if the RINEX output was disabled.
- Added a feature that optionally enables the remote monitoring of GPS and Galileo ephemeris using UDP and Protocol Buffers.
- Now building the software passing the
-DENABLE_FPGA=ON
to CMake does not make the receiver unusable when running on non-FPGA-enabled platforms. On FPGA-enabled platforms, now it is possible to run non-FPGA-enabled configurations. - Fix bug that made the Monitor block to always set to 0 the
carrier_phase_rads
parameter value. - The
Labsat_Signal_Source
implementation of theSignalSource
block now can read files in the LabSat 3 Wideband format (.LS3W
). When using this format, this source block can provide multiple RF chain outputs. - Replace
Receiver.sources_count
configuration parameter name byGNSS-SDR.num_sources
. The former parameter name is still read to ensure backward compatibility with configuration files using that nomenclature. - Fix bug in searching for gr-iio when CMake was re-run several times with different settings for the
-DENABLE_FMCOMMS2
or-DENABLE_PLUTOSDR
building options. - Fix building when using UHD >= v4.0.0.0.
- Fix building for
-DENABLE_FMCOMMS2=ON
and/or-DENABLE_PLUTOSDR=ON
when the built-in gr-iio module introduced in GNU Radio 3.10 is found. This in-tree GNU Radio module takes precedence over the gr-iio package provided at https://github.com/analogdevicesinc/gr-iio. If the GNU Radio module is found, the other one is ignored. - File
changelog.md
renamed to the more usualCHANGELOG.md
uppercase name. - New global configuration parameter
GNSS-SDR.observable_interval_ms
, set by default to 20 [ms], allows to control the internal rate at which computed observables sets are processed (50 observables sets per second by default). - Fix bug in the
Monitor.decimation_factor
parameter, which was not working properly for other values than 1.
See the definitions of concepts and metrics at https://gnss-sdr.org/design-forces/
GNSS-SDR v0.0.14
This is a maintenance and bug fix release. Most relevant changes with respect to
the former release are listed below:
Improvements in Availability:
- Fixed bug in acquisition detection when the configuration parameter
Acquisition_XX.threshold
was set butAcquisition_XX.pfa
was not, causing
false locks. - Fixed anti-jamming filters:
Pulse_Blanking_Filter
,Notch_Filter
and
Notch_Filter_Lite
.
Improvements in Efficiency:
- Faster
SignalConditioner
block when its implementation is set to
Pass_Through
.
Improvements in Interoperability:
- Added the Galileo E6 B/C signal structure based on E6-B/C Codes Technical
Note, Issue 1, January 2019, including Acquisition and Tracking blocks. The
Telemetry Decoder is still empty (only the CRC is checked, based on Galileo
High Accuracy Service E6-B Signal-In-Space Message Specification v1.2, April
2020).
Improvements in Maintainability:
- Added a common shared pointer definition
gnss_shared_ptr
, which allows to
handle theboost::shared_ptr
tostd::shared_ptr
transition in GNU Radio
3.9 API more nicely. - Support new FFT and firdes blocks' API in GNU Radio 3.9.
- Added detection of inconsistent function prototypes in
volk_gnsssdr
library
kernels at compile time. - Fixed defects detected by clang-tidy check
bugprone-reserved-identifier
, and
added to the checks list. This check corresponds to CERT C Coding Standard
rule DCL37-C as well as its C++ counterpart, DCL51-CPP. - Applied and added more clang-tidy checks related to readability:
readability-make-member-function-const
andreadability-qualified-auto
.
Improvements in Portability:
- Fixed
-DENABLE_OWN_GLOG=ON
building option when gflags is installed and it
is older than v2.1.2 (e.g., in CentOS 7). - Improved handling of old gflags versions, minimum version set to 2.1.2.
Replacedgoogle::
bygflags::
namespace when using functions of the gflags
library. - Replaced
git://
byhttps://
as the used protocol when downloading Gflags,
so it can work through firewalls requiring authentication. - Fixed static linking of the matio library when downloaded and built by CMake.
- Improved CPU feature detection by switching to Google's cpu_features
library: Thevolk_gnsssdr
library had its own CPU feature detection methods,
which were not totally reliable and difficult to implement across compilers and OSes.
This is now handled by thecpu_features
library, thus building upon that
expertise. Since that library has higher dependency version requirements than
GNSS-SDR, the old method is still used in old development environments. No
extra dependency is needed. This change is transparent to the user, since
everything is managed by the CMake scripts. - The
volk_gnsssdr
library can be built on Microsoft Windows and can execute
SIMD instructions on that OS. - Removed all instances of
_mm256_zeroupper()
in thevolk_gnsssdr
library,
since they are not required and lead to miscompilation with GCC 10.2 and
optimization level-O3
. - Fixed building with
-DENABLE_CUDA=ON
for blocks implemented with CUDA. - Fixed linking against the ORC library if it is present in the system.
- Fixed a bug introduced in v0.0.13 that prevented getting Galileo-only PVT
fixes in some environments. - Fixed duplication of protobuf build tree if it was locally built and then
installed with DESTDIR variable set.
Improvements in Usability:
- Fixed a bug when enabling pseudorange carrier smoothing in other bands than
L1. - If
SignalConditioner.implementation=Pass_Through
, then all the configuration
parameters for theDataTypeAdapter
,InputFilter
andResampler
blocks are
ignored. This was the default behavior in GNSS-SDR v0.0.12, but it changed in
v0.0.13. This change recovers the old behavior. - Fixed occasional segmentation fault when exiting with
q
+[Enter]
keys if
Acquisition_XX.blocking=false
. - Fixed the termination of the receiver with
q
+[Enter]
keys when using the
Osmosdr_Signal_Source
implementation of theSignalSource
block. - The
Labsat_Signal_Source
implementation of theSignalSource
block now can
be throttled with the new parametersSignalSource.enable_throttle_control
andSignalSource.throttle_frequency_sps
, thus allowing the emulation of
real-time operation. - Improved General Block diagram, both in content and in image resolution.
- The
Custom_UDP_Signal_Source
implementation now accepts
SignalSource.sample_type=cfloat
, in addition to the existing 4 and 8-bit
length sample types. - Fixed the
obsdiff
andrinex2assist
utilities when installed if they were
built with a locally downloaded version of GPSTk. - The generated HTML documentation now makes use of the Doxygen grouping
feature. - Improved rendering of equations in HTML documentation generated by Doxygen.
Make use of MathJax for equation rendering. Added new building option
ENABLE_EXTERNAL_MATHJAX
, set toON
by default. If set toOFF
, it allows
using a local installation of MathJax 2. - Improved dumps in Telemetry Decoding blocks. Now they include the raw
navigation message bits. IfTelemetryDecoder_XX.dump=true
, the resulting
.dat
binary file is also delivered in.mat
format, which is readable from
Matlab and Python.
See the definitions of concepts and metrics at https://gnss-sdr.org/design-forces/
GNSS-SDR v0.0.13
This is a maintenance release which includes bug fixes, compatibility with the
most recent compiler versions, some code optimization and the addition of minor
new features. Most relevant changes with respect to the former release are
listed below:
Improvements in Efficiency:
- Faster internal handling of
Gnss_Synchro
objects by reducing the amount of
copying via addingnoexcept
move constructor and move assignment operators,
so the move semantics are also used in STL containers. - All
std::endl
have been replaced by the'\n'
character, since there is no
need to always flush the stream. - Performed a stack reordering of class members that seems to offer
statistically better performance in some processor architectures and/or
compilers. - Add building option
ENABLE_STRIP
to generate stripped binaries (that is,
without debugging symbols), smaller in size and potentially providing better
performance than non-stripped counterparts. Only for GCC in Release build
mode. Set toOFF
by default.
Improvements in Maintainability:
- Improved usage of smart pointers to better express ownership of resources.
- Add definition of
std::make_unique
for buildings with C++11, and make use of
it along the source code. - Private members in headers have been sorted by type and size, minimizing
padding space in the stack and making the files more readable for humans. - Simpler, less error-prone design of the
GNSSBlockFactory
class public API
and internal implementation. - Simpler API for the
Pvt_Solution
class. - Improved system constant definition headers, numerical values are only written
once. - Improved const correctness.
- The software can now be built against the GNU Radio 3.9 API that uses standard
library's smart pointers instead of Boost's. Minimum GNU Radio required
version still remains at 3.7.3. - The software can now be built against Boost <= 1.73 (minimum version: 1.53).
- Fixed building with GCC 10 (gcc-10 and above flipped a default from
-fcommon
to-fno-common
, causing an error due to multiple defined lambda functions). - Fixed warnings risen by GCC 10 and Clang 10.
- Various improvements in the CMake scripts: better decision on the C++ standard
to use; simplifications for various API dependency and environment versions
requirements, with more intuitive naming 8000 for variables; fixed the
ENABLE_CLANG_TIDY
option; better GFORTRAN module; and broader adoption of
the modern per-target approach.
Improvements in Portability:
- The software can now be cross-compiled on Petalinux environments.
- Removed python six module as a dependency if using Python 3.x.
- Make use of
std::span
if the compiler supports it, and use gsl-lite as a
fallback. The latter has been updated to version 0.37.0. - Improved finding of libgfortran in openSUSE and Fedora distributions.
- Improved interface for FPGA off-loading.
- Allow a random name for the build type. If not recognized, it is set to
None
. This allows packaging in some distributions that pass an arbitrary
name as the build type (e.g., Gentoo) to avoid unexpected compiler flags. The
building optionENABLE_PACKAGING
must be set toON
when packaging. - Do not stop the receiver if SysV message queues cannot be created.
Improvements in Reliability:
- Fixed a bug in GLONASS GNAV CRC computation.
- Fixed a bug in GLONASS time year.
- Fixed a possible buffer overflow in the generation of RTCM messages.
- Fixed bugs which could cause a random crash on receiver stopping.
Improvements in Reproducibility:
- Improved reproducibility of the volk_gnsssdr library: Drop compile-time CPU
detection.
Improvements in Testability:
- Add building option
ENABLE_BENCHMARKS
, which activates the building of
benchmarks for some code snippets, making it easier to developers to benchmark
different implementations for the same purpose. Set toOFF
by default.
Improvements in Usability:
- Do not pollute the source directory if the software is built from an
out-of-source-tree directory. Downloaded external sources and test raw files
are now stored in a./thirdparty
folder under the building directory. In
case of an out-of-source-tree build, the generated binaries are stored in an
./install
folder, also under the building directory. The old behavior for
generated binaries is maintained if the building is done from any source tree
subfolder (for instance,gnss-sdr/build
): in that case, binaries are stored
in the source tree (undergnss-sdr/install
). - Defined new
GNSS-SDR.GPS_banned_prns
,GNSS-SDR.Galileo_banned_prns
,
GNSS-SDR.Glonass_banned_prns
andGNSS-SDR.Beidou_banned_prns
configuration
parameters. The user can specify lists of satellites that will not be
processed (e.g.,GNSS-SDR.Galileo_banned_prns=14,18
since Galileo E14 and
E18 satellites are not usable for PVT). Satellites on those lists will never
be assigned to a processing channel. - Added a Matlab script to quantize the input signal with a given number of bits
per sample. - Fixed the building option
-DENABLE_LOG=OFF
, which strips internal logging
from the binary and can help to reduce its size and ultimately to speed up the
receiver. In binaries with enabled logging, it still can be disabled by
passing the command line flag--minloglevel=3
tognss-sdr
. This can be
relevant in embedded devices with scarce storage capabilities. - Fixed a bug in the Signal Sources configuration that made the number of
samples parameter ignored when too large (that is, when set larger than
2^31-1). Now thesamples
parameter accepts values up to 2^64-1, that is,
18,446,744,073,709,551,615 samples. - Fixed a bug in the forwarding of NMEA messages to a serial port (configuration
of thePVT.nmea_dump_devname
parameter was ignored). - Updated version of the Contributor Covenant to version 2.0. Added badge in the
README.md file.
See the definitions of concepts and metrics at https://gnss-sdr.org/design-forces/
v0.0.12
This release has several improvements in different dimensions, addition of new features and bug fixes:
Improvements in Accuracy:
- Improved accuracy of the C/N0 estimator.
Improvements in Availability:
- Fixed computation of acquisition threshold when using the
Acquisition_XX.pfa
configuration parameter, including non-coherent accumulation
(Acquisition_XX.max_dwells
> 1).
Improvements in Efficiency:
- Faster implementation of the Viterbi decoder for Galileo navigation messages.
- The
-O3
flag is now passed to GCC inRelease
andRelWithDebInfo
build
types (instead of-O2
), thus enabling tree vectorization. Disabled if
building for Fedora or Gentoo.
Improvements in Flexibility:
- New Tracking parameters allow the configuration of the C/N0 and lock detector
smoothers, as well as the activation of the FLL in pull-in and steady state
stages. - Added new Tracking parameter
Tracking_XX.carrier_aiding
, allowing
enabling/disabling of carrier aiding to the code tracking loop. - New PVT parameter
PVT.enable_rx_clock_correction
allows to enable or disable
the continuous application of the Time solution correction (clock steering) to
the computation of Observables. By default is set tofalse
(that is,
disabled). - New PVT parameter
PVT.max_clock_offset_ms
: if
PVT.enable_rx_clock_correction
is set tofalse
, this parameter sets the
maximum allowed local clock offset with respect to the Time solution. If the
estimated offset exceeds this parameter, a clock correction is applied to the
computation of Observables. - Fixed L5 and E5a receiver chains when tracking the data component.
- Added new PVT configuration parameter
PVT.rinex_name
to specify a custom
name of the generated RINEX files. A commandline flag--RINEX_name
is also
available, and overrides the configuration.
Improvements in Interoperability:
- Fixed PVT solution in receivers processing L1 plus L2C and/or L5 signals.
- Fixed the initialization of the carrier phase accumulator. Carrier phase
measurements are now usable to compute integer ambiguity resolution. - Added carrier phase observable initialization to match the pseudorange length.
- Added RINEX files generation for triple-band configurations (L1 + L2C + L5 and
L1 + E1 + L2C + L5 + E5a). - Fixed bugs in the decoding of BeiDou navigation messages.
- Fixed bugs in the generation of RTCM messages.
- Fixed a bug in feeding Galileo channels' observations to RTKLIB, which was
causing wrong date of PVT fixes in Galileo-only receivers and not considering
Galileo observations in multi-constellation receivers when using signals after
the GPS rollover on April 6, 2019. - Improved management of devices with the AD9361 RF transceiver.
- Fixed bugs in FPGA off-loading.
Improvements in Maintainability:
- Rewriting of acquisition and tracking adapters, thus avoiding a lot of code
duplication. - New CMake option
-DENABLE_ARMA_NO_DEBUG
defines the macroARMA_NO_DEBUG
,
which disables all run-time checks, such as bounds checking, in the Armadillo
library. This will result in faster code. This option is disabled by default
during development, but automatically set toON
if the option
ENABLE_PACKAGING
is set toON
. - All shadowed variables detected by passing
-Wshadow
to the compiler have
been fixed (see https://rules.sonarsource.com/cpp/RSPEC-1117?search=shadow and
MISRA C++:2008, 2-10-2 - Identifiers declared in an inner scope shall not hide
an identifier declared in an outer scope). - Apply more clang-tidy checks related to readability:
readability-avoid-const-params-in-decls
,
readability-braces-around-statements
,readability-isolate-declaration
,
readability-redundant-control-flow
,readability-uppercase-literal-suffix
.
Fixed raised warnings. - Fixed a number of defects detected by
cpplint.py
. Filters applied:
+build/class
,+build/c++14
,+build/deprecated
,
+build/explicit_make_pair
,+build/include_what_you_use
,
+build/printf_format
,+build/storage_class
,+readability/constructors
,
+readability/namespace
,+readability/newline
,+readability/utf8
,
+runtime/casting
,+runtime/explicit
,+runtime/indentation_namespace
,
+runtime/init
,+runtime/invalid_increment
,
+runtime/member_string_references
,+runtime/memset
,+runtime/operator
,
+runtime/printf
,+runtime/printf_format
,+whitespace/blank_line
. clang-format
can now be applied to the whole code tree without breaking
compilation.- Added more check options to
.clang-tidy
file. - Default Python version is now >= 3.4. Python 2.7 still can be used in systems
where Python 3 is not available (e.g., CentOS 7, Debian 8, Ubuntu 10.04). - CMake now passes the
-DCMAKE_BUILD_TYPE
(or configuration in
multi-configuration generators like Xcode) to modules built along gnss-sdr
(e.g, the volk_gnsssdr library and googletest). Build types available:None
,
Release
(by default),Debug
,RelWithDebInfo
,MinSizeRel
,Coverage
,
NoOptWithASM
,O2WithASM
,O3WithASM
,ASAN
. - Fix runtime errors when compiling in
Debug
mode on macOS. - Updated links in comments along the source code and in CMake scripts.
- Update GSL implementation to 0.36.0. See
https://github.com/gsl-lite/gsl-lite/releases/tag/v0.36.0 - Create a CI job on GitHub to ensure that
clang-tidy
has been applied in most
of the source code (some optional blocks and tests are left apart). - Create a CI job on GitHub to ensure that
clang-format
has been applied. - Create a CI job on GitHub to ensure that
cpplint
filters have been applied. - Create a CI job on GitHub to ensure compliance with REUSE Specification (see
https://reuse.software) - Create a CI job on GitHub using
prettier
(https://prettier.io/) to check
markdown files formatting. - Create a CI job on GitHub to check the formatting of CMake scripts using
cmakelint
(see https://github.com/richq/cmake-lint).
Improvements in Openness:
- Make software compliant with REUSE Specification – Version 3.0 (see
https://reuse.software/spec/).
Improvements in Portability:
- The CMake scripts now find dependencies in Debian's riscv64 architecture.
- Enable AVX2 kernels of the volk_gnsssdr library when using the Clang compiler.
- Fixed building in some ARM-based devices. Now Clang and ARMClang can be used
for native building. - Added toolchain files for building gnss-sdr and the volk_gnsssdr library in
several ARM processor architectures, including those in Raspberry Pi 3 and 4. - The software can now be built using Xcode (passing
-GXcode
to CMake) without
previous manual installation of volk_gnsssdr. - The software can now be built using Xcode (passing
-GXcode
to CMake) without
gflags, glog, matio, PugiXML, Protocol Buffers or googletest previously
installed. - Now the volk_gnsssdr library can be built on Microsoft Windows.
- Now the volk_gnsssdr library makes use of C11
aligned_alloc
where available. - Improved CMake script for cross-compilation and for the detection of AVX, AVX2
and NEON (v7 and v8) instructions. - Fixed warnings raised by CMake 3.17.
- Fixed warnings raised by
cmake --warn-uninitialized ..
- Fixed the receiver's availability in systems in which the Sys V message queue
mechanism is not available.
Improvements in Reliability:
- Decoding of navigation messages no longer rely on implementation defined
behavior for shifting left a signed integer. - Removed usage of functions with insecure API (e.g.,
strcpy
,sprintf
). - New type alias
volk_gnsssdr::vector
allows both aligned memory allocation
and automatic deallocation. - Fixed a memory leak in the generation of Galileo PRN codes.
- Added clang-tidy checks
clang-analyzer-security.*
,
clang-analyzer-optin.portability.UnixAPI
clang-tidy checks. Fixed raised
warnings. - Fixed
cpplint.py
runtime/printf
andruntime/explicit
errors. - All constructors callable with one argument are marked with the keyword
explicit. See MISRA C++:2008, 12-1-3 - All constructors that are callable with
a single argument of fundamental type shall be declared explicit.
Improvements in Repeatability:
- Added the option to apply carrier smoothing of code pseudoranges with new
Observables parameterObservables.enable_carrier_smoothing
. - Fixed normalization of DLL discriminator in BPSK modulations when the spacing
between correlators was not 0.5.
Improvements in Testability:
- Add receiver runtime to
position_test
report. - Improvements in FPGA unit tests.
- Add new utility tool
obsdiff
to perform single and double differences
computations from observation RINEX files. Requires GPSTk and Armadillo >=
9.800.
Improvements in Usability:
- A new global parameter
GNSS-SDR.pre_2009_file
allows to process raw sample
files containing GPS L1 C/A signals dated before July 14, 2009. - Improved DLL-PLL binary dump MATLAB/Octave plot script. Old versions removed.
- Simplified RTKLIB error log.
- Added a Python 3 plotting script to show relative performance of generic
volk_gnsssdr 3F56 kernels wrt SIMD fastest versions. - Added reporting of velocity in the terminal.
- Added reporting of user clock drift estimation, in ppm, in the Pvt_Monitor and
in internal logging (Debug
mode). - Updated documentation generated by Doxygen, now the
pdfmanual
target works
when using ninja. - CMake now generates an improved summary of required/optional dependency
packages found and enabled/disabled features, including the building system
and GNSS-SDR, CMake and compiler versions. This info is also stored in a file
calledfeatures.log
in...