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:

a98e40000000002aaaaa4f4f2ffb8000
00955555555555555555555544790000
a98ec0000000002aaaaa5063173b8000
3f4a63d11ea372ec4d3b4f84dcbb0000
934ed3e1372ec4d3b4f83b4db6d54000
3f4a63f11ea372ec4d3b4f84dcbb0000
934ed3e1372ec4d3b4f803cb10954000
3f4a64111ea372ec4d3b4f84dcbb0000
934ed3e1372ec4d3b4f8225d9ad54000
00955555555555555555555544790000
a990c0000000002aaaaa4823ab3b8000
00955555555555555555555544790000
a99140000000002aaaaa6957e27b8000
3f4a64711ea372ec4d3b4f84dcbb0000
934ed3e1372ec4d3b4f80a454ed54000
3f4a64911ea372ec4d3b4f84dcbb0000
934ed3e1372ec4d3b4f803617e554000
3f4a64b11ea372ec4d3b4f84dcbb0000
934ed3e1372ec4d3b4f83be7d8154000
3f4a64d11ea372ec4d3b4f84dcbb0000
934ed3e1372ec4d3b4f813ff0c154000
3f4a64f11ea372ec4d3b4f84dcbb0000
934ed3e1372ec4d3b4f82b79aa554000
00955555555555555555555544790000
a99440000000002aaaaa6d48287b8000
00955555555555555555555544790000
a994c0000000002aaaaa726410bb8000
00955555555555555555555544790000
a99540000000002aaaaa531059fb8000
d3978d7c6c2e85281e379780ce9f8000

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 :)

Cheers!
Michele

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).

15 comments:

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...

Hi,

-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!

Cheers,
Michele

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...

Yep.

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: http://es.farnell.com/multicomp/oe-cmb-rd-c5c6/antena-gps-gsm-combo-sma-fme/dp/1735194

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).

Cheers,
Michele

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 4.3.2.3, 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.

Cheers,
Michele

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):

0101100000101100000000000011110111111101011111111111111100001011111011100100000000000000000011000001111001111111111011110011001111001000000000001011110111111011110010111111110100000000110000001101000000001000001101001010000100111111111111111101110111
0101100000001100000000000000000000011000110111111111111111111111110010001011111111111111111111101101111000000000000000000000010100001100000000000000000000010000110111111111111111111111101011000011111111111111111111000100111100000000000000000000110111
0101100000101110000000000011110100101001011101111111111100001101110111100110000000000000000101011001111000111111111011110010100011001011000000001011110101110111110001111111110100000101010000001111000000001000000101111110000110111111111111110000110011
0101100000010111011010101000011101010111111100000111111111000101110101000001000011110110100110010111100000001001000010100100001010101011101010101100111110001000000011100011101011101010111111000101101110101100111101010100010110110101010111101100100001
0101100000110111110001000011101111100101011101010111111000101101110111110111101010110100111101000011111101100100010100101101100000110111010101100111110110000100000001011101011101011011001010001001100101100111100110000101101001000010111101100011010010
0101100000010111000010101000011101010111111100011111111111000101110101000001010011110110100110010111100000011001000010100100001010101011001010101100111110001000000011000011101011101010111111000101001110101100111101010100010110100101010111101100100001
0101100000110111110001000011101011001101011101010111111000101111011111110111101010110100111000000011111101100100010100101101010000110111010101100111111111011100000001011101011101010011100110001001100101100111100000100001101001000010111101101000111110
0101100000010111011010101000011101010111111100110111111111000101110101000000010011110110100110010111100001101001000010100100001010101011011010101100111110001000000010000011101011101010111111000100011110101100111101010100010110100101010111101100100001
0101100000110111110001000011101100100101011101010111111000101010010111110111101010110100111101110011111101100100010100101011001000110111010101100111110111101100000001011101011101011010111010001001100101100111101100101101101001000010111101101001001010
0101100000001100000000000000000000011000110111111111111111111111110010001011111111111111111111101101111000000000000000000000010100001100000000000000000000010000110111111111111111111111101011000011111111111111111111000100111100000000000000000000110111
0101100000101111000000000011110101011001011010111111111100001010011111100010000000000000000101110001111010111111111011110100100011001001000000001011110101111111110101111111110100000110000000000001000000001000001010010110001110111111111111111111101011
0101100000001100000000000000000000011000110111111111111111111111110010001011111111111111111111101101111000000000000000000000010100001100000000000000000000010000110111111111111111111111101011000011111111111111111111000100111100000000000000000000110111
0101100000101111000000000011110000010101011001111111111100001101111111100011000000000000000001100101111000111111111011110000101111001000000000001011111111000111110100111111110100001110100100000111000000001000000100001010001000111111111111111110110111



Cheers,
Michele

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.

Cheers,
Michele

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!

Zahid

pawel said...

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