GSoC: Tests and Acquisition Block for a Galileo Receiver

Hi all,

as the mid-term evaluations happen this week, I want to
make a small summary of my progress in the development of the blocks of
Galileo for the GNSS-SDR software.

In the Community Bonding Period of
GSoC, I concentrated on reading and understanding the Galileo Signal In
Space Interface Control Document [1], namely: how to transmit the
navigation message, which modulations are used (Binary Offset Carrier
over CDMA), what frequency bands (E1, E5, …), how to encode the
message (primary and secondary spreading codes), … as well as how to
perform test under the Google C++ Testing Framework [2], a library that
takes care of all the testing infrastructure, letting the developer
focus in the content of the test.

During the initial phase of GSoC I
have done unit and integration tests for most blocks in GNSS-SDR. Thus,
a recommended workflow has been established for creating a new signal
processing block in GNSS-SDR:

  1. Write the test for the signal
    processing block (including test for instantiation, connect and run the
    block, and validation of results)
  2. Write the test for the block
    factory of the signal processing block (The block factory is a class
    that hides the complexity of instantiating GNSS block in a simple but
    effective way)
  3. Write the actual block, consisting of an adapter and a
    GNU Radio block (GNSS-SDR adapter blocks are classes that configure and
    group GNU Radio blocks).

A total of 33 tests spread over 6 testcases
found in the SVN repository of GNSS-SDR [3].

In recent weeks I have
concentrated on making the acquisition block of Galileo. The goal was to
reuse as much as possible the existing code for GPS. After various
attempts the optimal solution has been to separate the signal processing
algorithm (independent of the system used) from the generation of the
local codes belonging to each system (Galileo or GPS). Thus, through 2
adapters [4] and one library [5], calculations are performed for each
system, while the data processing algorithm is performed in a single
Gnuradio block [6].

The acquisition block can be configured via the
configuration file of GNSS-SDR. The options are:

  • Acquire by E1B or E1C
    signal
  • Select the SINBOC(1.1) or the CBOC modulation.

Finally, I
tested the acquisition block implementation. To do this, I created
synthetic signal using a Galileo signal generator programmed in Matlab.
I tested all modes of acquisition with successful results. The results
of these tests can be seen in [7].

Following the schedule set, next
week I’ll start working on the block tracking. Also will capture real
signal using a USRP and GnuradioCompanion software to test the
acquisition block with real data.

I will notify the community about any
new progress.

Best regards

Luis Esteve

[1]
http://ec.europa.eu/enterprise/policies/satnav/galileo/files/galileo-os-sis-icd-issue1-revision1_en.pdf
[1]

[2] http://code.google.com/p/googletest [2]/
[3]
http://gnss-sdr.svn.sourceforge.net/viewvc/gnss-sdr/trunk/src/tests/gnss_block/
[3]
[4]
http://gnss-sdr.svn.sourceforge.net/viewvc/gnss-sdr/trunk/src/algorithms/acquisition/adapters/
[4]
[5]
http://gnss-sdr.svn.sourceforge.net/viewvc/gnss-sdr/trunk/src/algorithms/libs/
[5]
[6]
http://gnss-sdr.svn.sourceforge.net/viewvc/gnss-sdr/trunk/src/algorithms/acquisition/gnuradio_blocks/
[7]
https://www.dropbox.com/s/bsglyugdqllsn5z/GSoCAcquisitionResults.pdf

Links:

[1]
http://ec.europa.eu/enterprise/policies/satnav/galileo/files/galileo-os-sis-icd-issue1-revision1_en.pdf
[2]


[3]
http://gnss-sdr.svn.sourceforge.net/viewvc/gnss-sdr/trunk/src/tests/gnss_block/
[4]
http://gnss-sdr.svn.sourceforge.net/viewvc/gnss-sdr/trunk/src/algorithms/acquisition/adapters/
[5]
http://gnss-sdr.svn.sourceforge.net/viewvc/gnss-sdr/trunk/src/algorithms/libs/