Sunday, January 1, 2012

Processing Galileo

The first prototype of SdrNav20 is working these days to receive the Galileo signal in space.

Figure 1: First SdrNav20 assembled prototype.

Using a simple patch antenna, the first acquisition done using a 8MHz bandwidth reports the expected spectrum purity and signal properties.
Figure 2: Power spectrum of signal acquired on SdrNav20 channel 1. A bandwidth of 8MHz is wide enough for BOC(1,1), but not CBOC(6,1,1/11). A bandwidth limitation is anyway introduced by the antenna SAW filter as well.
Figure 3: Time series and histogram of the acquired signal. The gain of the satellite tuner was set to 60dB (RF) and 8dB (IF), which could not excite the second MSB of the MAX19505 ADC.

The acquisition of Galileo PFM shows the typical BOC(1,1) correlation shape.:
Figure 4: BOC(1,1) correlation shape, averaged on 100 codes (400ms).
A short file (for anybody to try his/her own acquisition) can be found here.

EDIT 27/12/2012: Acquiring with SdrNav20 Galileo-FM2 (Galileo-PFM seemed momentarily disabled)
Figure 5: Galileo-FM2 E1 correlation shape, averaged on 100 codes (400ms).
The messages on E1B looked good, but still dummy:


A sample file is here.

Adding to the above, SdrNav20 demonstrates acquisition of L2C and L5 (or Galileo E5a):
Figure 6: Power spectrum of L2C signal captured with SdrNav20
Figure 7: Signal acquisition of GPS L2C signal (only of enabled PRNs)
Figure 8: Power spectrum of L5 signal captured with SdrNav20

Figure 9: Signal acquisition of GPS L5 signal (only of enabled PRNs
Figure 10: Signal acquisition of Galileo-PFM on E5a
A couple of files for L2C and L5 are stored respectively here and here. Please mind that L2C acquisition (without assistance) can be a long process given the length of the codes :)


P.S.: The file name is self-explicative: fs is sampling frequency, fif is intermediate frequency, bw is bandwidth, interleaved I&Q has 'int8_t' type samples (pretty much as the GN3Sv2 used to output).


GalileoFans said...

Thank you for you fantastic work! Could you please explain a bit clear about the sample file for E1B? They seems only -1 and 1 data. They could not be used for acquisition nor tracking. There seems no correlation with the decoded message you posted ( provided in this website). So could you please explain a bit clear what the sample file could be used for? Thank you very much for you answer and excellent work!

Michele said...


-1s and +1s can well be used for acquisition and tracking!

The messages I posted do come up when you decode the Galileo navigation data bits!


Eien said...

Hi Michele, thanks for this work.

I have a doubt about the patch antenna. As I see in it's datasheet it is an active one. How do you supply voltaje to it? Via the SMA conector as well?

Thanks for your help!

Michele said...


Eien said...

And, doens't that interfier with the incomming signal?

I am trying to implement a galileo receiver with a USRPN210 and MATLAB, but I am not able to receive anything with the antenna (neither connected to a spactrum analyser).

This is the antenna used:

Michele said...

No it doesn't. That is what a bias tee is meant to do (wikipedia?).

I don't know enough about your test setup but if you don't power an active antenna you have no chance of receiving anything.

On the spectrum analyser, 27dB on thermal noise is likely to be close to the noise floor of the instrument.. don'expect to see to much on L1 (if you have no jammers around).


yao peng said...

Hi, Michele,thanks for your great work. Can you explain more about the decoded bits? Does each line in the message represent 128-bit navigation data in one I/NAV page? If so, the first 6 bits should be the message type(0~10), but i can not understand the leading bits (a9) here as a valid message type. Anything wrong with my understanding? Thanks! Yao Peng

Michele said...

Hi Yao Peng,

Are confusing I/NAV with F/NAV maybe?

On the ICD, chapter, pag. 34, it seems that I/NAV is a 120bit message (padded to 128 bit above) where the first bit is EVEN/ODD, the second the page type, etc...
The sequence A9 00 A9 3F 93 ... has the EVEN/ODD bits at 1 0 1 0 1 ... and the page type at 0 0 0 0 0 ... which seems to be consistent with the ICD.


yao peng said...

Hi Michele,
Oh I see. Many thanks for your explaination.
I tried to decode the info bits and got a Week Number = 286, which should be in year 2004? Maybe the content of the message is just for test purpose.
Can you share with me the symbols before decoding? That is, 250symbols per second including the sync pattern. I want to apply my decoding function to it.

Michele said...

There you go (trimmed to 4096 characters, Blogger limit):



Xiaojia said...

Hi Michele,

Thanks for sharing these plots. This is very helpful.

I am also trying to capture GPS L5 band signal. Since there are only two satellites transmitting it, do I need to do this in a certain time based on my location? In other words, for a certain location, is L5 sat. visible all the time?

Thanks for your help!

Michele said...

Nope! You will have to use an orbit prediction tool to do that. I use orbitron. GPS satellites have an orbit which is periodical of (roughly) 12hours.


Xiaojia said...

Hi Michele,

I am also wondering did you do tracking of L5 signal? Are you able to see the bit train of L5 signal either in phase part or in quadrature part?

I am studying L5 signal. I can see sat. PRN #25 in acquisition, but for now I could not successfully do tracking. I am trying to figure out why.

Thanks for sharing your work!

Zahidul Bhuiyan said...

Hi! Michele,

Thank you for the information that you are sharing in your blog. I am also trying to decode the Galileo E1 navigation message, but not yet totally successful. That is why, I am wondering, if I follow the right procedure for decoding, as mentioned here:

1. Get the page sync pattern of [0 1 0 1 1 0 0 0 0 0] every 250 symbols. (I got it right)
2. Get rid of the 10 symbols out of 250 symbols, giving a total of 240 symbols.
3. Get the next 240 symbols by following the steps 1 and 2 as mentioned above in order to form a page of 480 symbols.
4. Apply deinterleaving with columnLength = 30 and rowLength = 8.
5. Apply Viterbi decoding with constraint length=7 and polynomial generator =[171 133] represented in octal (I use the matlab functions trel=poly2trellis(7,[171 133]) and then vitdec(deinterleavedSymbols,trel,35,’trunc’,’hard’)). The parameter ‘35’ represents the trellis depth. I am sorry if you do not have any idea about these matlab functions.
Do you think that I should be able to get the decoded E1 bits after following the steps mentioned above? Should I always expect six 0 tail bits in every 120 bits sequence, as mentioned in ICD? Do you see any problem in the above mentioned procedure?

Thank you very much for your precious time.

Many Thanks!


pawel said...

Hello Michele,
could you reupload the files, because they have expired.