BeiDou Tracking Block for GNSS-SDR


Today, GNSS software receivers have achieved a level of considerable technological maturity and use, particularly in signal analysis and receiver engineering, and appear poised for much wider adoption in commercial equipment and applications. For that reason, GNSS-SDR project becomes a reality for the new paradigm in Software Defined Radio (SDR) GNSS receivers.

The GNSS-SDR open-source project is a GNSS SDR receiver intended to be a testbed for GNSS receiver designers and researchers, supporting them in the complex task of developing and testing new algorithms for the demanding multiband, multisystem GNSS receivers.

In GNSS-SDR the receiver is no longer understood as a black box, everything is configurable including signal sources, signal processing algorithms, interoperability with other systems and output formats, allowing also to log any kind of intermediate signal or parameter. Thanks to its modular nature, new algorithms can be easily accommodated with little changes. This process is described in deeper detail in the official website (

Currently, the open source GNSS-SDR is completely operational with GPS L1-C/A, GPS L2C (M), Galileo E1, Galileo E5a and hybrid GPS-Galileo signals. To go towards an effective multi-constellation software defined receiver, GNSS-SDR extension to the Chinese Navigation Satellite System (BeiDou) was proposed. Hence, the aim of this project is to implement the signal generator and signal tracking block of GNSS-SDR, implemented in C++ for the GPS and Galileo Signals, for BeiDou open service signals (B1l).

This work also opens the way to the interoperability between GPS-Galileo-BeiDou, in order to guarantee coverage (in terms of in view satellites) and increasing accuracy in positioning. In fact the BeiDou constellation is going to become a complete GNSS system. At the end of 2012 there were five Geostationary Earth Orbit (GEO) satellites, four Medium Earth Orbit (MEO) and five Inclined Geosynchronous Satellite Orbit (IGSO), but for the end of 2020 it is expected a fully operational constellation with five GEO, twenty-seven MEO and three IGSO. Such scenario explains why the extension to BeiDou is necessary.


As mentioned before, the main goals of this project were about the development of the BeiDou B1I Signal Generator and the Tracking Block following the work done by the last GSoC2015 developer.

This project started with the BeiDou Acquisition Block implemented and integrated and a Signal Generator for BeiDou Signal developed in MATLAB. So, for that reason, first steps to get insights about GNSS-SDR were the extension and development of the Signal Generator for BeiDou B1I signal integrated in the project code.


The Signal Generator available in the project was able to generate GPS and Galileo Signals. Thereby, an extension for BeiDou Signals has to be implemented. So the Signal Generator had to be able to generate a BeiDou B1 In-phase signal where the ranging code and NAV message were modulated in carrier and a secondary code of Neumann-Hoffman (NH) code was modulated on ranging code. Additionally, the Initial Doppler frequency, the delay of the ranging code and the PRN number could be set in order to implement some tests.

Captura de pantalla 2016-08-18 a las 18.38.17

Secondary code and its timing

Taking into account the BeiDou MATLAB Generator and the GPS and Galileo C++ implementations, the BeiDou Signal Generator in C++ was developed with successfully results.

Therefore, a BeiDou B1I Signal Generator it is possible to integrate in the test code without the necessity of carry out a real signal capture.

signal_generator for beidou signal fixed

The most critical functions developed for this purpose was:

void beidou_b1i_code_gen_complex_sampled(std::complex<float>* _dest, unsigned int _prn, signed int _fs, unsigned int _chip_shift);

This function is able to generate any desired PRN code for the BeiDou constellation. Moreover, the NH code was added later for the completely match with a real signal.

added NH code to beidou signal generation

In order to test the new functionalities of the Signal Generator, a test was developed.

BeiDou Signal Generator GSoC2016 Test

For unit and integration testing GNSS-SDR uses the Google C++ Testing Framework, a library that takes care of all the testing infrastructure, letting the developer focus in the content of the test.

Therefore, the was developed in order to test the Signal Generator and check the correct implementation along the BeiDou acquisition block .

The test was set with the following parameters:

  • Sampling Frequency: 16 MHz
  • Intermediate Frequency: 0 Hz
  • Doppler Frequency: 1650 Hz
  • Code Delay: 3767 samples
  • PRN: 20
  • Integration time: 1ms

Finally, the results obtained are shown in two images. First one, it shows the Code Delay Samples and the Doppler Frequency returned by the test.

Captura de pantalla 2016-07-25 a las 16.19.28

Debug results for Acquisition Test

The second one, shows a 3D plot, implemented with a MATLAB script (plot_acq_grid_beidou.m ) for the acquisition results.


Acquisition results for BeiDou B1I Signal

A battery of tests were carried it out in order to check the proper functionality of the new implemententions but for brevity in this report, only one is shown.


The acquisition block, mentioned earlier, provides the initial estimates of the carrier Doppler and the code offset. After the acquisition, the control will be handed over to the tracking loops to track the variations of carrier phase and code offset due to the line of sight movement between the satellites and the receiver.

The main objective of signal tracking is to wipe off the code and the carrier. The carrier tracking loop synchronizes the carrier frequency and phase with that of the incoming signal. Therefore, the BeiDou Tracking Block implements two discriminators for the Carrier Tracking and the Code Tracking.

In view of BeiDou signal situation, with an extra tier of modulation on top of data bits, a Costas Phase Locked Loop (PLL) was implemented for the Carrier Tracking and a Narrow Correlator (NC) discriminator as Code Tracking loop (or Delay Locked Loop) with early, prompt and late correlator spacing of 0.5 chips (this last value is totally configurable).


As before, a test was developed in order to test the proper behaviour of the new Tracking Block.

BeiDou Tracking Block GSoC2016 Test

Therefore, the was developed in order to test the BeiDou Tracking Block and check the correct implementation .

The test was set with the following parameters:

  • Sampling Frequency: 16 MHz
  • Intermediate Frequency: 0 Hz
  • Doppler Frequency: 1650 Hz
  • Code Delay: 3767 samples
  • PRN: 20
  • Number of Samples: 16e6 * 9
  • Space between chips: 0.5
  • PLL BW: 20 Hz
  • DLL BW: 4 Hz

In that case, the test was developed using a signal sample of 15 seconds obtained from the Signal Generator for BeiDou B1I Signal.

Just to check, one more time, the correct behaviour of the Signal Generator, a second test was developed ( ). For simplicity the results obtained with this test will not show in this report.

Finally, the results obtained were not the expected.


Tracking results for BeiDou B1I Signal

As the results shows,  the Tracking Block is not working properly. Based in the different approaches carried out along the project, some error source would be the Signal Source File. In order to figure this hypothesis out a real capture should be made it. Unfortunately, this way was discarded due to the summer dates and the lack of equipment.


 This report shows part of the work done and the results obtained. A BeiDou B1 In-phase Signal Generator was developed, integrated and tested with great success.

On the other hand, the Tracking Block was implemented, integrated and tested but the results obtained were not conclusive. Nonetheless, the tests were added to the project and the work is quite close to great results.

Even so, much work is still needed. After the Acquisition and Tracking blocks validation the Telemetry Decoded should be implemented for the BeiDou B1I Signal. However, some of the definitions and files were declared during this project.


GITHUB branch with the final commits and files developed along the GSoC2016:





Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de

Estás comentando usando tu cuenta de Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )


Conectando a %s