Skip to content

Instantly share code, notes, and snippets.

@pedromiguelcp
Last active September 2, 2025 14:12
Show Gist options
  • Select an option

  • Save pedromiguelcp/0429efab963c9680f5ba5c0d48b5ae29 to your computer and use it in GitHub Desktop.

Select an option

Save pedromiguelcp/0429efab963c9680f5ba5c0d48b5ae29 to your computer and use it in GitHub Desktop.
GSoC25: Vector Tracking Architecture for GNSS-SDR

GSoC Logo Google Summer of Code 2025 Final Report

GSoC Proposal: GNSS-SDR Vector Tracking Loop Implementation
Contributor: Pedro Pereira
Organization: GNSS-SDR
Mentor: Miguel Lopez


📝 Description

The goal of this GSoC project was to implement a Vector Tracking Loop (VTL) architecture within GNSS-SDR, an open-source software-defined GNSS receiver. Traditional scalar tracking processes each satellite signal independently, whereas VTL combines all tracking channels and the navigation solution into a single algorithm using an Extended Kalman Filter (EKF).

This integration creates an internal aiding scheme in which all channels assist one another in tracking their respective signal, improving signal tracking performance, sensitivity, and robustness, particularly in challenging conditions such as urban environments or temporary signal outages. The VTL implementation in this project supports multi-constellation and multi-frequency configurations and is designed to be modular and configurable.

This work enhances the capabilities of the GNSS-SDR project by offering a fully integrated, real-time VTL alternative architecture for researchers and developers, helping bridge the gap between theoretical models and practical, open-source GNSS receiver design.


✅ Work Done

The core of the project is the implementation of a VTL architecture within GNSS-SDR. This included the design of an EKF operating at the PVT level, which estimates the receiver absolute position, velocity, clock bias, and clock drift. The measurement model uses the pseudorange and pseudorange rate observations from all satellite signals to produce the navigation solution. To improve estimation robustness, satellites are weighted in the EKF using a combination of GDOP contribution and SNR, adjusting the measurement noise matrix (R) accordingly.

To complete the loop closure, VTL feedback is applied to the tracking channels through a hybrid system that combines the traditional Delay-Locked Loop (DLL) control with the VTL feedback. This helps maintain robust tracking performance in both high-dynamic scenarios, where the DLL assists in maintaining lock, and challenging environments with multipath interference, where VTL feedback enhances resilience.

The current implementation supports GPS L1 C/A, GPS L5I, Galileo E1B, and Galileo E5a signals. It is fully configurable via GNSS-SDR .conf file, with parameters that allow users to customize operation mode, system noise profiles, measurement noise, and initialization values.

VTL-architecture

Pull Requests

The following pull requests include work on the VTL implementation, as well as contributions aimed at improving the GNSS-SDR project through bug fixes and feature suggestions.

Merged:

Unmerged / In Progress:


🧑‍💻 How to Use

To use the VTL implementation, the receiver configuration file should be updated with the following parameters under the PVT section:

;########## VECTOR TRACKING EXAMPLE CONFIG ##########
PVT.enable_pvt_vtl=true                ; Enable VTL processing
PVT.enable_pvt_output_vtl=true         ; Use VTL-based position output
PVT.enable_VDLL_vtl=true               ; Enable vectorized DLL
PVT.enable_VPLL_vtl=false              ; Enable vectorized PLL (optional)
PVT.vtl_kinematic=false                ; Use static or kinematic model
; Initial state uncertainty (standard deviation)
PVT.vtl_init_pos_ecef_sd_m=10.0        ; Position [m]
PVT.vtl_init_vel_ecef_sd_ms=5.0        ; Velocity [m/s]
PVT.vtl_init_clk_b_sd_m=100            ; Clock bias [m]
PVT.vtl_init_clk_d_sd_ms=100           ; Clock drift [m/s]
; Process noise (system dynamics)
PVT.vtl_sys_acc_noise_sd_ms2=0.316     ; Receiver acceleration [m/s²]
PVT.vtl_sys_clk_b_noise_sd_m=0.0       ; Additional clock bias [m]
PVT.vtl_sys_clk_d_noise_sd_ms=0.0      ; Additional clock drift [m/s]
; Measurement noise
PVT.vtl_meas_prange_sd_m=7.75          ; Pseudorange [m]
PVT.vtl_meas_prange_rate_sd_ms=0.45    ; Pseudorange rate [m/s]
; Logging
PVT.vtl_dump=true                      ; Enable VTL debug output
PVT.vtl_dump_filename=./vtl_dump.dat   ; Output file path

📊 Results

The configuration above was used during benchmarking. The vtl_kinematic parameter was set to false for static scenarios and true for dynamic scenarios. The results compare the Single Point Positioning (SPP) + kalman denoising filter with the VTL implementation.

Static Metrics

The following table presents positioning metrics in two static environments: a rural and an urban scenario.

In the urban scenario, we observe degraded performance in the SPP solution for several accuracy metrics (e.g., MRSE and CEP), as expected due to multipath and reduced visibility. However, the VTL architecture consistently improves accuracy across both environments, demonstrating better robustness in degraded conditions.

Additionally, execution times between SPP and VTL remain very similar, confirming that the VTL implementation is efficient and suitable for real-time use.

static metrics

Dynamic Metrics

To evaluate the performance of the VTL implementation under dynamic conditions, the TEX-CUP GNSS dataset was used, an open dataset collected by a team from the University of Texas at Austin Radionavigation Laboratory. This dataset is widely used in the literature for benchmarking GNSS receiver algorithms, particularly in urban environments.

spp_vs_vtl_texcup_2d_error spp_vs_vtl_texcup_height_error

Preliminary results show that the VTL improves tracking stability and positioning accuracy compared to traditional scalar tracking (2D RMSE: SPP=4.23m; VTL=2.66m). While the current implementation outperforms the SPP baseline, there remains room for further improvement, particularly through enhanced filter tuning, signal integration, or coupling strategies.


🔮 Future Work

Although the main goals of the project were achieved, the VTL implementation is still under review and will continue to be improved before being merged. Once integrated, the implementation can be extended to support additional signals and constellations beyond GPS L1/L5 and Galileo E1/E5, enabling broader applicability.

Another promising direction is sensor fusion, combining GNSS with inertial or other measurements using tightly or deeply coupled schemes. This would further improve robustness in both positioning and tracking, especially in degraded environments.


🙏 Acknowledgements

I’d like to thank the GNSS-SDR organization and especially my mentor Miguel for the guidance and support throughout this project. Being part of an open-source community like this was a valuable experience, allowing me to work closely with experts in the field, improve my coding skills, and contribute to the project.

@kalmancito

Copy link
Copy Markdown

Pedro, it has been an absolute pleasure mentoring you this summer! Your dedication, curiosity, and drive have been truly inspiring. You tackled a challenging project with focus and creativity, and the results speak for themselves—you’ve made a meaningful impact on GNSS-SDR that will benefit the community for years to come.

I’m really impressed by how quickly you learned, your persistence in overcoming obstacles, and the care you took to deliver a high-quality implementation. Beyond the technical work, your proactive attitude and collaboration made the whole process enjoyable and rewarding.

You should be very proud of what you accomplished. I do not doubt that you’ll continue to achieve great things in open-source and beyond, and I can’t wait to see where your skills and passion take you next!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment