1. Introduction
The availability of Global Navigation Satellite System (GNSS) software-defined receiver (SDR) platforms have fostered research and innovation in the field of satellite navigation by enabling researchers to experiment with new algorithms, signal processing techniques and applications. GNSS SDRs also offer greater flexibility and customization as compared to traditional GNSS receivers [
2,
5] by allowing developers to tailor GNSS solutions to specific requirements and integrate them into a wide range of devices and systems. GNSS SDRs also serve as a valuable tool for investigation, reproduction, validation and cross-verification of GNSS signals and by providing open platforms to explore and share raw recorded GNSS in-phase/quadrature (I/Q) datasets [
3,
4,
7,
8]. These features enable GNSS SDRs to offer flexibility, adaptability, customization and interoperability for innovation and research over hardware receivers. Advances in computing technology has also enabled a few GNSS SDRs to perform real-time signal processing [
5], which is essential for applications such as transportation [
9,
10], aviation [
11], surveying [
12], and smart cities [
13]. They can also adapt to different signal conditions and interference environments, leading to more robust and reliable GNSS performance. The rapid development capabilities offered by SDRs also support the proliferation of smarter hardware GNSS receivers in growing mass-consumer markets, such as smartphones, wearables, automotive navigation systems [
14,
15,
16], where SDRs cannot themselves compete due to cost, power, or weight restrictions.
The concept of GNSS emerged in the 1970s with the development of the U.S. Global Positioning System (GPS) and the Russian Global Navigation Satellite System (GLONASS). These systems initially used dedicated hardware receivers to process satellite signals for navigation and positioning. The 1990s saw the development of SDRs through the seminal work on real-time GNSS SDR that was first introduced by Akos in [
17,
18,
19], which inspired a lot of research on algorithm development. A GNSS SDR can be described as a software running on a general-purpose computer translating received GNSS signal samples into a position, velocity, and time (PVT) estimate [
2]. Since then, the concept has been reused by many research teams who introduced their designs focusing on signal processing algorithms, receiver architectures and performance evaluation.
The data exchange between the various SDRs requires a certain level of standardization. This led up to the development of the ION SDR standard [
28]. Broadly speaking, three main categories of GNSS-SDRs have emerged with all of them defined by the use of general purpose processors to process radio frequency (RF) data from an analog front-end in essentially raw form, allowing some configuration flexibility and supporting the ION SDR standard [
2]:
Real-time receivers based on low-level programming languages (C or C++) (such as GRID [
20,
21], GNSS-SDR [
5], Namur [
22], TUTGNSS [
23] and MuSNAT [
24]).
Post-processing receivers written in a high-level programming language (Python/ MATLAB) for teaching and research purposes (such as FGI-GSRx [
1], Borre-SDR [
25,
26], PyChips [
27,
28], softGNSS [
29] and MATRIX [
30,
31,
32]).
Snapshot receivers (such as UAB Snapshot GNSS Receiver [
33,
34]) optimized for very short batches of signal samples.
The availability of open-source GNSS platforms such as RTKLIB [
35,
36] and SDRs such as GNSS-SDRs [
5] and FGI-GSRx [
1] has democratized access to GNSS receiver development and experimentation. These platforms have fostered collaboration, knowledge-sharing, and innovation within the GNSS community, leading to the development of new algorithms and applications. Current trends in GNSS SDRs include integration of multiple GNSS constellations (e.g., GPS, GLONASS, Galileo, BeiDou), multi-frequency GNSS processing, enhanced security and authentication mechanisms and the integration of GNSS with other sensor modalities for seamless navigation and localization. The ongoing development of GNSS SDRs often requires the processing of long and diverse datasets (such as datasets collected in urban areas or under adverse weather conditions), multipath mitigation and/or interference rejection. This aids in towards testing the performance of a set of receiver key parameter indicators (KPIs) and enables GNSS receivers to incorporate enough variations within the dataset so that it can be trusted for robust testing.
GNSS SDRs can also be used as an effective tool for detecting and mitigating malicious attacks aimed at disrupting or manipulating GNSS-based positioning and navigation systems commonly known as spoofing and jamming. This may include analyzing the received GNSS signals in detail, including their characteristics such as power levels, integrity metrics and detecting anomalies indicative of spoofing attacks, such as the presence of counterfeit signals or discrepancies in signal properties. Techniques such as signal cross-correlation, and cryptographic authentication such as Galileo’s Open Service Navigation Message Authentication (OSNMA) [
37,
38,
39] can be employed to ensure that the received signal is genuine. OSNMA testing on a SDR also requires processing of longer datasets along with the need for faster processing. The Finnish Geospatial Research Institute (FGI) developed an open-source Python engine, FGI-OSNMA, for OSNMA based navigation message authentication [
42] of Galileo E1B signal [
40,
41,
43]. In a recent development, FGI-OSNMA is incorporated with the FGI-GSRx software receiver to enable OSNMA-based position authentication capability [
44]. This integration will facilitate further research on the actual use of OSNMA in the context of obtaining an authentic position solution, especially in the absence of any signal or message level authentication mechanism with other existing GNSS systems.
To summarize, the constant evolution of GNSS, such as, inclusion of modernized signals and new services offered by the GNSS constellations, requires regular updates for GNSS SDRs. This will ensure continued functionality, security, and effectiveness in meeting users’ needs and expectations. Therefore, in this paper we are presenting an improved and updated version of FGI-GSRx henceforth named as FGI-GSRx-v2.0.0. The major improvement in v2.0.0 is carried out by incorporating key design strategies, while focusing on one vital aspect, i.e., faster execution. These features are specifically aimed to facilitate processing of long datasets. This paper also presents the assessment of old and new versions of FGI-GSRx by considering some of the design aspects and KPIs, specific to the assessment of performance of software-defined GNSS receivers [
45].
The rest of the paper is structured as follows:
Section 2 presents an insight into the receiver architecture of FGI-GSRx-v1.0.0 and its limitations.
Section 3 presents the FGI-GSRx-v2.0.0 design and architecture and a proposed parallel tracking mode. Assessment and data processing methodology is explained in
Section 4. This is followed by performance analysis of both versions of FGI-GSRx on a dataset in
Section 5.
Section 6 offers some concluding remarks on the current work while presenting some highlights on the future work.
2. FGI-GSRx Software-Define Receiver
FGI’s multi-GNSS software receiver was released as open-source in February 2022 [
1] along with the book
GNSS Software Receivers [
47]. It is a MATLAB-based GNSS receiver that operates only as a post-processing receiver for raw I/Q GNSS data samples. The development of the FGI-GSRx was initiated from the work of Borre et al. [
25] in 2012, in which a GNSS software-defined receiver was developed for tracking two IOV satellites (GIOVE A and GIOVE B) from the European Galileo. This was followed by the inclusion of Galileo in 2013 [
48], the Chinese satellite navigation system BeiDou in early 2014 [
49], the Indian regional satellite navigation system NavIC in late 2014 [
50], and the Russian satellite navigation system GLONASS in 2015 [
51]. The evolution of FGI-GSRx from a GPS-only receiver to a more extensive receiver supporting GNSS signals from multiple constellations (GPS, Galieo, BeiDou, GLONASS and NavIC) offers diversity and makes it an excellent resource for researchers. The software receiver is already being used in the ‘GNSS Technologies’ course offered in several Finnish Universities.
2.1. Existing Sequential Receiver Architecture
The processing chain of FGI-GSRx-v1.0.0 consists of GNSS signal acquisition, code and carrier tracking, decoding of the navigation message, pseudorange estimation, and PVT estimation as shown in
Figure 1. The receiver’s salient features are listed in
Table 1. As can be seen in
Figure 1, the receiver allocates channels to all the acquired satellites, and then it continues to track each satellite sequentially one at a time for each time epoch until it finishes executing the last data sample. There is no dependency among the channels in this traditional tracking approach, and therefore, it would have been optimum to utilize some form of parallelism to run all the tracking channels in parallel. This parallel tracking execution strategy is considered as one of the key KPIs for faster execution of the receiver when implementing the next version of FGI-GSRx, i.e., v2.0.0. This will be further illustrated in
Section 3.
2.2. Limitations of FGI-GSRx-v1.0.0
The current open-source version of FGI-GSRx-v1.0.0 is being used in GNSS receiver development research and in benchmarking SDR solutions in the GNSS industry. Its architecture provides a great opportunity to build and test new algorithms without the need to make extensive changes to the original code. The receiver was designed to facilitate a great deal of flexibility in terms of different key parameters at different stages of receiver signal processing chain from acquisition to navigation. For that reason, the receiver’s memory allocation and the computing resource management was not optimal. As an example, many of the signal tracking variables were saved for the whole data length, thus consuming memory and computing resources when the data sizes grow significantly. This is especially considered a bottleneck when processing long datasets are needed to analyze in some certain test cases, for example, to analyze the performance of OSNMA service of Galileo.
Figure 1.
FGI-GSRx sequential architecture. The green parts indicates option to use pre-stored output from acquisition and tracking.
Figure 1.
FGI-GSRx sequential architecture. The green parts indicates option to use pre-stored output from acquisition and tracking.
Figure 2.
FGI-GSRx-v2.0.0 architecture. The green parts indicates option to use pre-stored output from acquisition and tracking.
Figure 2.
FGI-GSRx-v2.0.0 architecture. The green parts indicates option to use pre-stored output from acquisition and tracking.
Figure 3.
FGI-GSRx-v2.0.0 parallel tracking mode work flow.
Figure 3.
FGI-GSRx-v2.0.0 parallel tracking mode work flow.
Figure 4.
FGI-GSRx-v2.0.0 two-stage acquisition.
Figure 4.
FGI-GSRx-v2.0.0 two-stage acquisition.
Figure 5.
Sky plots for GPS and Galileo satellites at the beginning of data collection.
Figure 5.
Sky plots for GPS and Galileo satellites at the beginning of data collection.
Figure 6.
Processor usage utilization for the entire simulation interval for sequential processing mode.
Figure 6.
Processor usage utilization for the entire simulation interval for sequential processing mode.
Figure 7.
Galileo only: CPU usage for signal tracking of v2.0.0 parallel processing mode and v2.0.0 with MATLAB parallel computing block.
Figure 7.
Galileo only: CPU usage for signal tracking of v2.0.0 parallel processing mode and v2.0.0 with MATLAB parallel computing block.
Figure 8.
GPS only: CPU usage for signal tracking of v2.0.0 parallel processing mode and v2.0.0 with MATLAB parallel computing block.
Figure 8.
GPS only: CPU usage for signal tracking of v2.0.0 parallel processing mode and v2.0.0 with MATLAB parallel computing block.
Figure 9.
GPS and Galileo: CPU usage for tracking loop of v2.0.0 parallel processing mode and v2.0.0 with MATLAB parallel computing block.
Figure 9.
GPS and Galileo: CPU usage for tracking loop of v2.0.0 parallel processing mode and v2.0.0 with MATLAB parallel computing block.
Figure 10.
Position deviation plots generated by FGI-GSRx.
Figure 10.
Position deviation plots generated by FGI-GSRx.
Table 1.
Main features of FGI-GSRx
Table 1.
Main features of FGI-GSRx
Feature |
Solution |
Remark |
Operating system |
Windows10, LINUX |
Supports any operating system that can host MATLAB or OCTAVE. |
Programming environment |
MATLAB |
MATLAB 2019 or later versions and OCTAVE. |
Input source |
Raw I/Q data |
Digitized raw I/Q samples after analog to digital conversion |
Processing mode |
Post-processing |
Can process raw I/Q data or load previously processed and saved acquisition or tracking MATLAB data files. |
Supported GNSS |
GPS L1, Galileo E1B, BeiDou B1, GLONASS L1, NavIC L5 |
Listed signals are for open-source only. In house version of FGI-GSRx can process additional signals. |
Acquisition |
FFT-based signal acquisition |
The receiver searches for all the listed satellites defined by the user in the configuration file. |
Tracking |
Three stage tracking |
i) Pull in ii) Coarse tracking iii) Fine tracking. |
Navigation |
Least Square Estimation (LSE) -based position computation |
Possibility to select satellites based on Carrier-to-Noise density ratio () and elevation cut-off mask. |
Table 2.
KPI compliance FGI-GSRx.
Table 2.
KPI compliance FGI-GSRx.
KPI |
Remarks |
Portability |
It refers to the usability of the same software in different environments. Both versions can be executed on any platform supporting MATLAB e.g., LINUX and Windows). |
Openness |
This refers to the degree to which something is accessible to view, modify and use. The source codes of both versions of FGI-GSRx are publicly available and can be modified as per user requirement [1]. |
Interoperability |
This refers to the possibility to exchange information with other free and proprietary software, devices, sensors or systems. For example, the ongoing work in [44] is a good example of integration of FGI-GSRx with FGI-OSNMA. |
Reproductibility |
It describes the capacity of a whole process to be replicated either by own team or some external research group. Both versions of FGI-GSRx support this KPI and have been tested thoroughly by in-house research team while v1.0.0 has also been tested by researchers [3,8,48,49]. |
Usability |
This KPI is concerned with the availability of a (versioned) user manual, tutorials, detailed procedures. In this context, both versions are supported by datasets, release notes and user manuals which are available for download from the online repository [57]. |
Efficiency |
It refers to optimizing the speed and memory requirements or power consumption by the processor running the SDR. FGI-GSRx-v2.0.0 offers better efficiency as compared to v1.0.0. More insight into this functionality is presented in Section 5.2 and Section 5.3. |
Accuracy |
Both versions offers similar code functionalities at the navigation level. However, the minor difference in positioning accuracy can be contributed to the fewer satellites processed by v1.0.0 than v2.0.0 for the given dataset in Section 5.1 and Section 5.4. |
Table 3.
Processing unit specifications.
Table 3.
Processing unit specifications.
Processing unit |
Processor |
i7-12700Hx20 |
RAM |
32 GB |
Operating System |
64 bit Ubuntu 20.04.6 LTS |
Table 4.
Reference data specifications.
Table 4.
Reference data specifications.
Reference dataset |
Date |
31.10.2023 |
Time |
≈12:23 (UTC) |
Duration |
460 s |
Size |
≈11.4 GB |
Location |
FGI rooftop, Espoo |
Receiver dynamics |
Static |
Antenna |
Septentrio’s PolaNt Choke Ring |
GNSS front-end |
NSL Stereo dual band |
Table 5.
Signal settings for data processing.
Table 5.
Signal settings for data processing.
Signal configurations |
Center frequency |
1569 MHz |
Bandwidth |
4.2 MHz |
Sampling frequency |
26 MHz |
Quantization |
8 bits |
I/Q |
Complex |
GNSS constellations |
GPS |
Galileo |
Acquisition |
Visible Satellites |
PRN 5, 7, 8, 9, 13, 14, 18, 20, 22, 27, 30 |
PRN 4, 9, 21, 31, 34, 36 |
Replica modulation |
BPSK |
CBOC |
Max. search freq. |
7000 Hz |
6000 Hz |
Coherent Integration |
5 ms |
4 ms |
Non-coherent Integration number |
5 |
3 |
Threshold |
9 |
9 |
Tracking |
DLL |
Discriminator |
NNEML |
NNEML |
Correlator Spacing |
0.1 |
0.1 |
Damping ratio |
0.7 |
0.7 |
Noise bandwidth |
1 |
1 |
FLL |
Discriminator |
atan |
atan2 |
Wide bandwidth (Hz) |
100 |
75 |
Narrow bandwidth (Hz) |
50 |
45 |
Very-narrow bandwidth (Hz) |
10 |
5 |
Damping ratio |
1.8 |
1.5 |
Loop gain |
0.7 |
0.7 |
PLL |
Wide bandwidth |
15 |
15 |
Narrow bandwidth |
15 |
15 |
Very-narrow bandwidth |
10 |
10 |
Damping ratio |
0.5 |
0.7 |
Loop gain |
0.2 |
0.2 |
Table 6.
Comparison of of Run Time for multiple functions in different versions of serial processing mode of FGI-GSRx.
Table 6.
Comparison of of Run Time for multiple functions in different versions of serial processing mode of FGI-GSRx.
Function Name |
Function Description |
Run Time (v1.0.0)
(hh:mm:ss) |
Run Time (v2.0.0)
(hh:mm:ss) |
Improvement
(%) |
’gsrx’ |
Main function to execute the whole
process chain of FGI-GSRx.
|
14:00:10 |
08:24:14 |
40 |
’doTracking’ |
Main tracking function to do code
and carrier tracking.
|
13:56:20 |
08:19:00 |
40 |
’GNSSTracking’ |
Performs state-based tracking for the
received signal.
|
06:25:10 |
03:16:21 |
49 |
’GNSSCorrelation’ |
Performs code and carrier correlation. |
07:26:33 |
04:46:12 |
36 |
’carrierMixing’ |
Performs carrier and code mixing. |
04:09:03 |
01:53:03 |
55 |
’CN0fromSNR’ |
Function for estimating CN0 values
using SNR.
|
01:31:05 |
01:07:56 |
25 |
’phaseFreqFilter’ |
Loop filter to do carrier tracking. |
01:06:12 |
00:44:41 |
32 |
’getDataForCorrelation’ |
Read data for processing. |
00:51:16 |
00:29:25 |
43 |
Table 7.
Simulation run time comparison analysis of FGI-GSRx-v2.0.0 with respect to FGI-GSRx-v1.0.0
Table 7.
Simulation run time comparison analysis of FGI-GSRx-v2.0.0 with respect to FGI-GSRx-v1.0.0
Function |
FGI-GSRx-v1.0.0 |
FGI-GSRx-v2.0.0 Sequential |
FGI-GSRx-v2.0.0 Parallel |
|
Processing Time (hh:mm:ss)
|
Processing Time (hh:mm:ss)
|
Improvement (%)
|
Processing Time (hh:mm:ss)
|
Improvement (%)
|
Acquisition |
00:02:09 |
00:02:14 |
-1.8 |
00:02:14 |
-1.9 |
Tracking |
13:56:20 |
08:19:00 |
40.31 |
05:42:44 |
59.2 |
Navigation |
00:01:40 |
00:02:00 |
-16.6 |
00:02:00 |
-16.6 |
Total Run Time |
14:00:10 |
08:24:14 |
39.98 |
05:47:53 |
59.13 |
Table 8.
CPU usage comparison analysis of v2.0.0 parallel tracking mode with MATLAB PCT.
Table 8.
CPU usage comparison analysis of v2.0.0 parallel tracking mode with MATLAB PCT.
Constellation |
No. of Satellites |
FGI-GSRx-v2.0.0 Parallel |
FGI-GSRx-v2.0.0 with MATLAB PCT |
|
|
Processing Time (hh:mm:ss)
|
CPU Average (%)
|
Processing Time (hh:mm:ss)
|
CPU Average (%)
|
Improvement w.r.t v2.0.0 Parallel (%)
|
Galileo only |
6 |
00:37:56 |
69 |
00:37:48 |
38 |
0.35 |
GPS only |
11 |
04:07:25 |
90 |
02:51:24 |
58 |
30 |
GPS + Galileo |
17 |
05:42:44 |
89 |
03:14:36 |
60 |
43 |
Table 9.
Position solution accuracy computed by FGI-GSRx.
Table 9.
Position solution accuracy computed by FGI-GSRx.
|
FGI-GSRx-v1.0.0 |
FGI-GSRx-v2.0.0 |
Available Satellites for Position Solution |
GPS |
10
Ephemeris for GPS PRN 27 is not found.
|
11 |
Galileo |
5
Ephemeris for Galileo PRN 21 is not found. |
6 |
Horizontal Position |
Error50 |
1.74 |
1.62 |
Error95 |
3.06 |
2.65 |
Max |
4.39 |
3.83 |
Std. Dev. |
0.76 |
0.62 |
RMS |
2.09 |
1.95 |
Mean |
1.76 |
1.62 |
Vertical Position |
Error50 |
1.04 |
1.11 |
Error95 |
3.19 |
3.19 |
Max |
4.7 |
4.65 |
Std. Dev. |
0.98 |
0.99 |
RMS |
1.37 |
1.39 |
Mean |
1.25 |
1.32 |
DOP |
Pdop |
1.20 |
1.13 |
3DRMS |
2.49 |
2.40 |
No. of Positioning Epochs |
451 |
451 |