GNSS-SDR v0.0.12 released
This release has several improvements in different dimensions, addition of new features and bug fixes:
Improvements in Accuracy:
- Improved accuracy of the \(C/N_0\) estimator.
Improvements in Availability:
- Fixed computation of acquisition threshold when using the
Acquisition_XX.pfaconfiguration parameter, including non-coherent accumulation (Acquisition_XX.max_dwells> 1).
Improvements in Efficiency:
- Faster implementation of the Viterbi decoder for Galileo navigation messages.
- The
-O3flag is now passed to GCC inReleaseandRelWithDebInfobuild 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/N_0\) 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_correctionallows 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: ifPVT.enable_rx_clock_correctionis 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_nameto specify a custom name of the generated RINEX files. A commandline flag--RINEX_nameis 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_DEBUGdefines 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 toONif the optionENABLE_PACKAGINGis set toON. - All shadowed variables detected by passing
-Wshadowto the compiler have been fixed (see rules.sonarsource.com 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-formatcan now be applied to the whole code tree without breaking compilation.- Added more check options to
.clang-tidyfile. - 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
Debugmode on macOS. - Updated links in comments along the source code and in CMake scripts.
- Update GSL implementation to 0.36.0.
- Create a CI job on GitHub to ensure that
clang-tidyhas 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-formathas been applied. - Create a CI job on GitHub to ensure that
cpplintfilters have been applied. - Create a CI job on GitHub to ensure compliance with REUSE Specification
- Create a CI job on GitHub using prettier to check markdown files formatting.
- Create a CI job on GitHub to check the formatting of CMake scripts using cmakelint.
Improvements in Openness:
- Make software compliant with REUSE Specification – Version 3.0.
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
-GXcodeto CMake) without previous manual installation of volk_gnsssdr. - The software can now be built using Xcode (passing
-GXcodeto 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_allocwhere 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::vectorallows 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.UnixAPIclang-tidy checks. Fixed raised warnings. - Fixed
cpplint.pyruntime/printfandruntime/expliciterrors. - 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 parameter
Observables.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_testreport. - Improvements in FPGA unit tests.
- Add new utility tool
obsdiffto 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_fileallows 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 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 (
Debugmode). - Updated documentation generated by Doxygen, now the
pdfmanualtarget 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
called
features.login the building directory. - Markdown files have been wrapped to 80 characters line length to make it easier to read them from the terminal.
As usual, compressed tarballs are available from GitHub and Sourceforge.
In order to make GNSS-SDR more easily referenced, and to promote reproducible research, each software release gets a Digital Object Identifier provided by Zenodo. The DOI for GNSS-SDR v0.0.12 is 10.5281/zenodo.3709089.