Monday, May 12, 2008

GIOVE-B

How to acquire GIOVE-B?
- Take out your favorite GNSS data grabber from the drawer.
- Collect some signal when GIOVE-B is up in the sky (a simple patch antenna does the job).
- Perform a fine frequency search around the Doppler value estimated with the Norad orbital model (square the signal, you need more than 1 bit quantization).
- Set the code generation registers with the ones used by GIOVE-A.
- Initialize one register with all ones, and brute force crack the initialization value for the other one!
- Perform acquisition.

Result:
# G1 code generator
regOne = [1 0 0 1 1 0 1 0 1 1 0 0 0];
regOneInit = [1 1 1 1 1 1 1 1 1 1 1 1 1];
# G2 code generator
regTwo = [1 1 0 0 0 1 1 1 1 0 0 0 0];
regTwoInit = [1 0 0 1 1 1 1 1 1 1 1 0 0];

Fig 1: Normalised cross correlation
Fig 2: Normalised cross correlation (zoom around peak)

P.S.: Alternatively, you can go to http://waas.stanford.edu/GalileoCode/GIOVEB_L1.html
The people there have been, again, the first to officially crack the code. Congratulations!

P.P.S: If you are able to track it, you'll see it is still transmitting (mostly) dummy messages. These were received today at NSL (Nottingham Scientifc Ltd):
28e0491049115a20491000000010c0: 0000
290001355a200134c054000002f1c0: 0000
292000006500c912d8bc0000003a80: 0000
2940008cda1ffffff394000003bd00: 0000
2963fffe742c007ca5540000008900: 0000
298155555555555555540000037c40: 0000
29a15555555555555554000001a780: 0000
29c15555555555555554000000e000: 0000
29e155555555555555540000023bc0: 0000
2a0155555555555555540000022f40: 0000
2a215555555555555554000000f480: 0000
2a415555555555555554000001b300: 0000
2a61555555555555555400000368c0: 0000
2a8155555555555555540000033c00: 0000
2aa15555555555555554000001e7c0: 0000
2ac15555555555555554000000a040: 0000
2ae155555555555555540000027b80: 0000
2b01555555555555555400000009c0: 0000
2b215555555555555554000002d200: 0000
2b4000959c00915955540000015880: 0000
2b6000c48cc8d0cd1554000001e800: 0000
2b8000d59c00d15955540000008900: 0000
2ba15555555555555554000003c140: 0000
2bc1555555555555555400000286c0: 0000
2be020000124456880940000007900: 0000

2 comments:

Anonymous said...

Complimenti Michele
Non mi è chiaro però come tu abbia costruito lo spreading code partendo dai due polinomi generatori me lo puoi spiegare meglio??
Hai un contatto mail a cui io possa scriverti eventualmente
Grazie

Michele Bavaro said...

Yes,
write me at
michele punto bavaro chiocciolina gmail punto com

I can send you my matlab/octave code to generate data and pilot code :)

Ciao!
Michele

p.s. I just write in English to keep my blog "international" :P