Hubbry Logo
GNSS software-defined receiverGNSS software-defined receiverMain
Open search
GNSS software-defined receiver
Community hub
GNSS software-defined receiver
logo
7 pages, 0 posts
0 subscribers
Be the first to start a discussion here.
Be the first to start a discussion here.
GNSS software-defined receiver
GNSS software-defined receiver
from Wikipedia

A software GNSS receiver is a Global Navigation Satellite System (GNSS) receiver that has been designed and implemented using software-defined radio stations.

A GNSS receiver, in general, is an electronic device that receives and digitally processes the signals from a navigation satellite constellation in order to provide position, velocity and time (of the receiver).

GNSS receivers have been traditionally implemented in hardware: a hardware GNSS receiver is conceived as a dedicated chip that has been designed and built (from the very beginning) with the only purpose of being a GNSS receiver.

In a software GNSS receiver, all digital processing is performed by a general purpose microprocessor. In this approach, a small amount of inexpensive hardware is still needed, known as the frontend, that digitizes the signal from the satellites. The microprocessor can then work on this raw digital stream to implement the GNSS functionality.

Hardware vs. software GNSS receivers

[edit]

When comparing hardware vs software GNSS receivers, a number of pros and cons can be found for each approach:

  • Hardware GNSS receivers are in general more efficient from the point of view of both computational load and power consumption since they have been designed in a highly specialized way with the only purpose of implementing the GNSS processing.
  • Software GNSS receivers allow a huge flexibility: many features of the receiver can be modified just through software. This provides the receiver with adaptive capabilities, depending on the user's needs and working conditions. In addition, the receiver can be easily upgraded via software.[1]
  • Under some assumptions, Software GNSS receivers can be more profitable for some applications, as long as sufficient computational power is available (and can be shared among multiple applications). For example, the microprocessor of a smartphone can be used to provide GNSS navigation with the only need of including a frontend (instead of a full, more expensive, hardware receiver).

Currently, most of the GNSS receiver market is still hardware. However, there already exist operational solutions based on the software approach able to run on low-cost microprocessors. Software GNSS receivers are expected to increase their market share or even take over in the near future, following the development of the computational capabilities of the microprocessors (Moore's law).

Comparison of GNSS SDR implementations

[edit]
  • Galileo Satellite Navigation LTD.- GSN:
    • Business Model - IP core license + royalties
    • Development
      • Programming language: C
      • User interface - NMEA
    • Hardware support:
      • Platforms
        • PC - windows
        • PC - Linux
        • CEVA - XC family
        • CEVA - TL3/4
        • Cadence (Tensilica) - BBE16/32
      • RF FE
        • MAXIM
        • NEC
    • GNSS/SBAS signals support:
    • Features:
      • Acquisition: yes
      • Tracking: yes
      • Generating pseudo-range observable: yes
      • Decoding navigation data: yes
      • Position estimation: yes
      • Maximum number of real-time channels demonstrated: 16/system
      • Multi-correlator: yes
      • Sample data recording: yes
  • SX3 (formerly SX-NSR)
    • General information:
    • Development:
      • Programming language: C++
      • User interface (none, CLI, GUI): CLI, GUI
      • Under active development (as-of date): yes (2016-Mar-17)
      • Creator/sponsor organization: IfEN GmbH, Germany
      • Latest release (version and date): v3.2.1, March 2016
      • First release (version and date): v1.0, March 2007
    • Hardware support:
      • Front-ends: NavPort, NavPort-4, SX3 frontend
      • Host computer special hardware supported: SIMD (SSE2, SSSE3), CUDA
      • Multicore supported: yes
    • GNSS/SBAS signals support:
    • Features:
      • Acquisition: yes (several algorithms)
      • Tracking: yes (several algorithms)
      • Generating pseudo-range observable: yes
      • Generating carrier-phase observable: yes
      • Decoding navigation data: yes
      • Spectrum analyzer: yes
      • Position estimation: yes
      • Maximum number of real-time channels demonstrated: 490 (GPS L1 C/A channels @20 MHz sample rate, 3 correlators per channel, INTEL Core i7-4970K processor (not over clocked) )
      • Application programming interface: yes
      • Dual antenna support: yes
      • Scintillation monitoring: yes
      • Multi-correlator: yes
      • Sample data recording: yes
      • Multipath mitigation: yes (several algorithms)
  • GNSS-SDRLIB
    • General information:
    • Development:
      • Programming language: C
      • User interface (none, CLI, GUI): CLI, GUI.
      • Number of developers: 1?
      • Under active development (as-of date): yes (2013-Sep-25)
      • Creator/sponsor organization: Tokyo University of Marine Science and Technology, Japan
      • Latest release (version and date):
      • First release (version and date):
    • Hardware support:
      • Front-ends: NSL STEREO v2 and SiGe GN3S Sampler v3
      • Host computer special hardware supported: SIMD (SSE2 and AVX)
      • Multicore supported?:
    • GNSS/SBAS signals support:
    • Features:
      • Acquisition: yes
      • Tracking: yes
      • Generating pseudo-range: yes
      • Decoding navigation data: yes
      • Spectrum analysis: yes
      • Position estimation: yes (through RTKLIB)
      • Maximum number of real-time channels demonstrated: ?
  • ARAMIS (formerly iPRx)
    • Versions:
      • Free academic version
      • Ionospheric Scintillation Monitor receiver
      • R&D version
    • General information:
    • Development:
      • Programming language: C++
      • User interface : GUI
      • Under active development (as-of date): yes (2014-Nov)
      • Creator/sponsor organization: iP-Solutions, Japan, JAXA, Japan
      • Latest release (version and date): February 2018
      • First release (version and date): April 2008
    • Hardware support:
      • Front-ends: Eagle, FEM, Simceiver
      • Multicore supported: yes
    • GNSS/SBAS signals support:
    • Features:
      • Acquisition: yes
      • Tracking: yes
      • Generating pseudo-range observable: yes
      • Generating carrier-phase observable: yes
      • Decoding navigation data: yes
      • Position estimation: yes
      • Maximum number of real-time channels : 60 (5 correlators per channel)
      • Application programming interface: yes
      • Dual antenna support: yes, for FEM front end
      • Multi-correlator: yes
      • Sample data recording: yes
  • SoftGNSS v3.0 (also known as SoftGPS)
    • General information:
    • Development:
      • Programming language: MATLAB
      • User interface (none, CLI, GUI): CLI and GUI
      • Number of developers: 4 (along the project)
      • Under active development (as-of date): public version - no, non-public versions - yes (2013-Sep-30)
    • Hardware support:
      • Front-ends: SiGe GN3S Sampler v1 (in the original SDR and driver release). Signal records originating from other Sampler versions or other front-ends require configuration changes and in some cases also minor code changes.
      • Host computer special hardware supported: no
      • Multicore supported?: no
    • GNSS/SBAS signals support (separate version for each band of each GNSS):
    • Features:
      • Acquisition: yes
      • Tracking: yes
      • Generating pseudo-range observable: yes
      • Generating carrier-phase observable: no
      • Decoding navigation data: yes
      • Position estimation: yes
  • GNSS-SDR, An open source GNSS Software Defined Receiver
    • General information:
    • Development:
      • Programming language: C++
      • User interface (none, CLI, GUI): CLI.
      • Number of developers: 26 (along the project)
      • Under active development (as-of date): yes (2021-Jan-08)
      • Creator/sponsor organization: Centre Tecnològic de Telecomunicacions de Catalunya
      • Latest release (version and date): 0.0.14 (as Jan 2021)
      • First release (version and date): 2011-Mar-11 first svn commit
    • Hardware support:
      • Front-ends: UHD-compatible (USRP family), OsmoSDR-compatible (RTL2832-based USB dongles, bladeRF, HackRF One), SiGe GN3S Sampler v2, AD-FMCOMMS2-EBZ
      • Host computer special hardware supported: SIMD (via VOLK and VOLK_GNSSSDR), CUDA
      • Multicore supported?: Yes
    • GNSS/SBAS signals support:
    • Features:
      • Acquisition: yes (several algorithms)
      • Tracking: yes (several algorithms)
      • Generating pseudo-range observable: yes
      • Generating carrier-phase observable: yes
      • Decoding navigation data: yes
      • Position estimation: yes
      • Maximum number of real-time channels demonstrated: > 100
      • Output formats: RINEX, KML, GPX, GeoJSON, NMEA, RTCM, intermediate results stored in binary .mat files readable from MATLAB and Octave, and from Python via h5py.
  • GRID, Generalized Radionavigation Interfusion Device
    • General information:
    • Development:
      • Programming language: C++
      • Platforms: Linux, Windows, MacOS
      • User interface (none, CLI, GUI): CLI.
      • Number of developers: 15 (along the project)
      • Under active development (as-of date): yes (2023-Apr-28)
      • Creator/sponsor organization: University of Texas at Austin
      • Latest release (version and date): 2022 annual release
      • First release (version and date): 2008-Jul-01
    • Hardware support:
      • Front-ends: Several and, practically speaking, any.
      • Host computer special hardware supported: Intel SIMD (SSE2 through AVX-512), ARM NEON (64-bit and 128-bit)
      • Multicore supported?: Yes
    • GNSS/SBAS signals support:
    • Features:
      • Acquisition: yes (several algorithms)
      • Tracking: yes (several algorithms)
      • Generating pseudo-range observable: yes
      • Generating carrier-phase observable: yes
      • Decoding navigation data: yes
      • Position estimation: yes
      • Multiple antennas: yes
      • Real-time Kinematic: yes, GRID can function as an RTK-base station or rover with integrated network support, RTK estimation when integrated with PpEngine (available through separate license)
      • Differential corrections: yes, CNAV and SBAS
      • Maximum number of real-time channels: Hardware-dependent, 30 on a Raspberry Pi 1, >100 on most desktop computers.
      • Output formats: RINEX, KML, MATLAB .mat files, CSV, proprietary GBX (GRID binary exchange) format.
      • Current applications: experimental FOTON receiver, several GNSS-RO commercial applications, commercial LEO satellite on-board navigation, RTK-based rocket navigation (launch-to-orbit), RTK-based vehicle navigation in urban environments, RTK-based drone, several fixed reference stations, signal abnormality monitoring

References

[edit]

Further reading

[edit]
[edit]
Revisions and contributorsEdit on WikipediaRead on Wikipedia
from Grokipedia
A GNSS software-defined receiver (SDR) is a system that implements the functions of a Global Navigation Satellite System (GNSS) receiver—such as acquisition, tracking, and data decoding—primarily through software executing on general-purpose processors, using digitized (RF) samples from a minimal hardware front-end that includes an (ADC). This approach contrasts with traditional hardware-centric receivers by shifting computational tasks from application-specific integrated circuits to flexible software algorithms, enabling the conversion of raw GNSS signal samples into position, velocity, and time (PVT) estimates. The concept of GNSS SDRs emerged in the mid-1990s, shortly after the full operational capability of the (GPS) in 1995, with pioneering work at institutions like University's Avionics Engineering Center around 1994, leading to the first real-time implementations by 1999 at . Early developments focused on , but advancements quickly expanded to support multiple constellations, including Galileo, , , and regional systems like IRNSS, driven by the need for research tools to test emerging signals and algorithms without custom hardware redesigns. Notable milestones include the release of the first comprehensive textbook on software GPS receivers in 2000 by James Bao-Yen Tsui and the introduction of commercial and open-source platforms, such as NordNav's Galileo SDR in and the ongoing GNSS-SDR project initiated by the Centre Tecnològic de Telecomunicacions de Catalunya (CTTC) in 2009. Key advantages of GNSS SDRs include high reconfigurability for multi-frequency and multi-constellation processing, cost-effectiveness for prototyping (often under $1,000 compared to commercial hardware exceeding $350,000), and enhanced sensitivity through extended coherent integrations, enabling applications in challenging environments like urban canyons or low-Earth orbit (LEO) . They are categorized into real-time processors (e.g., for embedded systems), snapshot receivers (for offline analysis), and research tools like the open-source GNSS-SDR, which leverages the GNU Radio framework for modular signal processing blocks and supports outputs in standard formats such as for . efforts, led by the Institute of Navigation (), culminated in the GNSS SDR approved in January 2020, which defines formats for intermediate-frequency (IF) sample data and XML-based metadata to facilitate and across platforms, with proposed updates incorporating for broader adoption.

Fundamentals

Definition and Core Concepts

A Global Navigation Satellite System (GNSS) is a satellite-based system that provides positioning, navigation, and timing services to users on or near the Earth's surface by broadcasting signals from a constellation of orbiting satellites, such as the (GPS) operated by the and Galileo developed by the . These signals contain ranging codes and navigation data that enable receivers to determine position, velocity, and precise time (PVT). A GNSS software-defined receiver (SDR) is a type of GNSS receiver in which the majority of functions—including acquisition, tracking, , and solution computation—are implemented in software running on general-purpose processors (such as CPUs and GPUs), or using reconfigurable hardware such as FPGAs, rather than in dedicated hardware circuits. This approach draws from the broader principles of (SDR), where traditional radio functions traditionally performed by analog hardware are instead handled digitally through programmable software, allowing for greater adaptability in processing (RF) signals. In the context of GNSS, the SDR digitizes raw satellite signals early in the processing chain, typically after downconversion to an (IF), and performs operations entirely in software. Core to the GNSS SDR architecture is the separation between the RF front-end hardware, which handles signal reception, amplification, filtering, and analog-to-digital conversion, and the software-based processing that extracts information from the digitized samples. This enables reconfigurability through software updates, permitting the receiver to adapt to evolving GNSS signals, such as new constellations, frequencies, or modulation schemes, without hardware modifications. IF sampling is a foundational technique, where the analog GNSS signals are sampled at rates sufficient to capture the signal bandwidth (e.g., several MHz for L-band signals), producing digital samples that the software processes to perform and synchronization. In contrast to traditional hardware GNSS receivers, which rely on application-specific integrated circuits () to execute fixed functions optimized for efficiency and low power but lacking flexibility, GNSS SDRs leverage general-purpose platforms to enable , algorithm experimentation, and support for multi-GNSS operations. This distinction allows SDRs to prioritize versatility over the power efficiency of , making them particularly valuable for , education, and specialized applications where signal environments may vary.

Historical Development

The concept of (SDR) emerged in the mid-1990s as a flexible approach to , initially proposed by Joseph Mitola in 1995, which laid the groundwork for its application to Global Navigation Satellite Systems (GNSS). Early adaptations to GNSS began in 1994 at Ohio University's Avionics Engineering Center, where researchers Michael Braasch and Dennis Akos developed simulations for GPS and , marking the initial exploration of software-based GNSS techniques. By 1996, Akos and Braasch published the first paper on a GPS SDR , demonstrating post-processing of GPS L1 C/A signals using general-purpose computers, though real-time implementation faced skepticism due to computational limitations at the time. Pioneering real-time GNSS SDR efforts accelerated in the late and early , driven by advancing capabilities aligned with and the growing need for reconfigurable receivers amid evolving satellite signals. In 1997, Akos completed his Ph.D. on real-time GPS SDR and initiated development at , achieving the first real-time processing of 60 seconds of GPS data in 55 seconds by 1999 using PCI-based hardware for data capture. This milestone was followed in 2000 by James Tsui's seminal textbook, Fundamentals of Receivers, which detailed software architectures for GPS on PCs, influencing subsequent prototypes. Around 2002, the University of the Bundeswehr Munich (UniBwM) launched GNSS SDR developments, starting with a /Simulink-based GPS L1 C/A receiver for post-processing, inspired by Akos's work. Key advancements in the mid-2000s expanded SDR capabilities to multi-frequency and multi-constellation support, addressing the limitations of hardware-defined receivers in handling new signals like those from Galileo. In 2004, Brent Ledvina and colleagues at presented the first real-time dual-frequency (L1 and L2C) GPS SDR, tracking up to 10 channels, while parallel efforts by Thomas Pany et al. at UniBwM introduced multi-GNSS processing. By 2006, NordNav Technologies developed the first Galileo SDR simulator, later acquired by Silicon Radio (CSR), enabling software-based testing of emerging European signals. Open-source initiatives gained traction in 2007 with Kai Borre's MATLAB-based GPS SDR toolbox, released under a , which democratized access and spurred academic research; this evolved into broader GNSS support in subsequent updates. The 2010s saw GNSS SDR mature through integration with graphics processing units (GPUs) for accelerated correlation and the push for resilient navigation amid increasing GNSS constellations (GPS, , Galileo, ). In 2010, researchers like Thomas Hobiger utilized GPUs to enhance processing speed for geodetic applications. Funding from agencies such as the (ESA) through programs like NAVISP supported SDR research for enhanced multi-constellation compatibility and interference mitigation, while U.S. efforts, including DARPA's investments in robust positioning technologies, indirectly advanced SDR for military resilience. Influential contributors like Akos, who transitioned from early prototypes to open-source tools, and Zaher Kassas, who advanced integrated SDR for autonomous systems, underscored the field's shift toward standardization, culminating in the 2020 adoption of the Institute of Navigation (ION) SDR Standard for metadata interoperability. This evolution was propelled by the post-2000s demand for flexible receivers capable of adapting to global GNSS expansion without hardware redesigns.

Architecture

Hardware Components

The hardware components of a GNSS software-defined receiver (SDR) primarily consist of a minimal (RF) front-end that digitizes incoming signals for subsequent software processing, integrated with versatile computing platforms to handle the computational load. The RF front-end captures, amplifies, and converts analog GNSS signals into digital samples, emphasizing flexibility over the fixed architectures of traditional receivers. The RF front-end typically begins with an antenna designed to receive signals in GNSS bands, such as the 1.575 GHz L1 band for GPS, followed by a (LNA) to boost the weak incoming signals (on the order of -130 dBm) while adding minimal noise, achieving noise figures around 1 dB and gains of 12-16 dB. A downconverter then shifts the RF signal to an (IF), often in the tens of MHz, before an (ADC) samples and quantizes it; for GPS L1 processing, sampling rates commonly range from 10 to 50 MHz to capture the signal bandwidth, with examples including 40 MSPS in dedicated front-ends. Commercial and open-source options, such as the Fraunhofer L125 triband USB front-end or wideband devices like HackRF, integrate these elements into compact modules connected via USB or Ethernet to the host computer. Computing platforms for GNSS SDRs leverage general-purpose hardware to perform in software, including personal computers (PCs) for offline analysis and real-time operation via USB-connected front-ends, as well as embedded systems like paired with low-cost SDR dongles for portable setups. Field-programmable gate arrays (FPGAs) serve as preprocessing accelerators in hybrid configurations, handling tasks like decimation and filtering to reduce data rates before transfer to a (CPU) or (GPU) for parallel computations, such as significantly faster acquisition on GPUs. For instance, system-on-chip (SoC) FPGAs enable prototyping with integrated cores, balancing performance and integration. Key specifications of these components include ADC quantization levels of 8-12 bits to preserve signal fidelity, typically providing dynamic ranges around 48-72 dB sufficient for most civil , though higher resolutions up to 14 bits offer >65 dB for demanding scenarios like anti-jamming. Power consumption varies by setup: portable embedded platforms like or SoC-FPGAs consume 2-5 W, suitable for battery-operated devices, while stationary PC-based systems with high-end GPUs may exceed 50 W, trading efficiency for processing throughput in research environments. These trade-offs highlight the adaptability of GNSS SDR hardware, where discrete components allow customization but increase size, whereas integrated front-ends prioritize compactness for real-time applications.

Software Framework

The software framework of a GNSS software-defined receiver (SDR) is designed to provide flexibility and modularity, enabling , customization, and adaptation to various signal environments without hardware modifications. This architecture typically organizes processing into distinct layers: a interface that ingests digitized (IF) samples from the front-end hardware, processing modules for signal acquisition, tracking, and , and output interfaces for generating such as pseudoranges and position solutions. Such layered designs facilitate independent development and testing of components, often leveraging open-source frameworks like for signal flow graphs or custom libraries in C++ and Python for optimized performance. For instance, the GNSS-SDR project employs a modular structure based on GNU Radio's block-based paradigm, where processing blocks inherit from interfaces like GNSSBlockInterface to support interchangeable algorithms. Programming paradigms in GNSS SDR frameworks emphasize object-oriented design to encapsulate functionalities such as signal correlators and digital filters, promoting reusability and . Real-time constraints, critical for operational receivers, are addressed through multithreading to parallelize tasks across multiple cores, ensuring low-latency processing of incoming samples; this is particularly evident in frameworks like the GRID receiver, which uses C++ with SIMD optimizations for multicore execution. While real-time operating systems (RTOS) can be integrated for embedded deployments, many implementations rely on standard OS scheduling with bounded buffers to handle deterministic flow, as seen in GNSS-SDR's use of Kahn Process Networks for thread-independent block execution. These paradigms enable from post-processing simulations to live tracking, with careful management of inter-thread communication to avoid bottlenecks. Data flow in these frameworks follows a pipelined sequence starting from digitized IF samples, which are buffered and routed to multi-channel processors—typically supporting 8 to 32 simultaneous satellite channels—to perform parallel correlation and phase locking. Samples propagate through the baseband modules via directed acyclic graphs, where each block consumes input buffers, applies transformations (e.g., mixing and integration), and produces outputs like code phase and Doppler estimates, culminating in pseudorange extraction by differencing transmit and receive times. This stream-oriented processing ensures efficient throughput, with metadata standards like the ION SDR Standard aiding interoperability across frameworks. In GNSS-SDR, for example, the flow integrates a navigation engine to combine channel outputs into position-velocity-time (PVT) solutions. Development tools for GNSS SDR frameworks prioritize languages suited to different phases: for algorithmic prototyping and simulation due to its matrix-oriented environment and visualization capabilities, transitioning to or C++ for deployment to achieve the computational efficiency required for real-time operation on resource-constrained platforms. Python variants, often with C++ bindings as in PyChips, offer flexibility for research and scripting. For safety-critical applications, such as , frameworks adhere to open standards like , which mandates rigorous software assurance levels (A through E) for design, verification, and traceability to ensure reliability in airborne GNSS systems. Compliance tools from vendors like support automated code generation and testing aligned with these standards.

Signal Processing

Acquisition and Tracking

In GNSS software-defined receivers (SDRs), the acquisition process initiates signal detection by performing coarse synchronization of the (PRN) code phase and carrier Doppler shift. This is typically achieved through a parallel code phase that correlates the incoming signal with all possible code phases of the satellite's PRN sequence, often spanning chips for the GPS coarse/acquisition () code. For Galileo signals, acquisition adapts to constellation-specific parameters, such as the 4092-chip primary code length for E1-B and E1-C signals using Composite Binary Offset Carrier (CBOC) modulation, or the more complex Alternate Binary Offset Carrier (AltBOC(15,10)) modulation for E5a and E5b bands, which requires generating replica signals accounting for data and pilot components to handle the multiplexed structure. To efficiently handle the large search space—encompassing thousands of code phase-Doppler bin combinations— (FFT)-based methods are employed, enabling for rapid computation of the correlation function across the entire code length. The received signal, downconverted to , is segmented into blocks, multiplied by a local carrier replica to compensate for Doppler, and correlated with the PRN code replica; peaks exceeding a detection threshold indicate the code phase and Doppler estimate, confirming satellite presence. Once acquisition identifies the approximate parameters, tracking loops maintain fine to extract the navigation message. The delay lock loop (DLL) tracks the phase by generating early, prompt, and late correlator outputs spaced by a discriminator spacing Δ\Delta, typically 0.5 chips for GPS C/A. For Galileo E5 signals, the DLL must accommodate the AltBOC modulation's higher chipping rate of 10.23 Mcps and subcarrier, often using very early-late techniques to mitigate ambiguities. The DLL error signal is derived from the difference in early-late correlations, such as the non-coherent early-minus-late power discriminator: DDLL(τ)=R(τΔ/2)2R(τ+Δ/2)2D_{DLL}(\tau) = |R(\tau - \Delta/2)|^2 - |R(\tau + \Delta/2)|^2, where τ\tau is the code delay error and RR is the function; this drives a loop filter to adjust the generator. For carrier recovery, the phase lock loop (PLL) or frequency lock loop (FLL) is used, with the PLL estimating phase error from in-phase (I) and quadrature (Q) prompt correlator outputs via discriminators like the four-quadrant arctangent: ϕ^=\atan2(Q,I)\hat{\phi} = \atan2(Q, I). In software implementations, these loops are realized digitally, with loop bandwidth BLB_L designed to balance noise rejection and dynamic response; for instance, the DLL thermal noise is given by σcode=TcTBLC/N012(2R(Δ)2)\sigma_{\text{code}} = \sqrt{\frac{T_c}{T} \cdot \frac{B_L}{C/N_0} \cdot \frac{1}{2 \cdot (2 - |R(\Delta)|^2)}}
Add your contribution
Related Hubs
User Avatar
No comments yet.