[Hackrf-dev] Some efforts and tools on GPS simulation and RF signal replay

Jiao Xianjun putaoshu at gmail.com
Sun Nov 2 07:02:05 EST 2014


Some efforts were put on replaying GPS signal
<http://sdr-x.github.io/Some%20efforts%20and%20tools%20on%20GPS%20signal%20replay%20%28GPS%E9%87%8D%E6%94%BE%E6%A8%A1%E6%8B%9F%29/>,
but it is only partially successful, not fully successful. Some
tools/scripts, as side products, are useful. Learn many things from here:
http://www.aholme.co.uk/GPS/Main.htm

*WARNING:DO NOT SEND ANY REAL GPS SIGNAL. USE CHAMBER AND CLOSE-LOOP CABLE!
MAKE SURE ALL YOUR OPERATIONS ARE LEGAL!*

Get codes, program and sample GPS signals here:
https://github.com/JiaoXianjun/GNSS-GPS-SDR

To build the C program "gps_test" in "c" directory (front part of software
GPS receiver) after you get the whole repo:

cd c
make

To let this make smooth, make sure you have fftw library installed
correctly (sudo apt-get install ...). There should be /usr/lib/libfftw.a.
1. offline GPS simulation method 1.1 use C program "gps_test" to receive
GPS signal generated by Matlab script gps_sig_gen.m

*a*. generate GPS signal file by running gps_sig_gen.m in Matlab

    gps_sig_gen.m

to get file gps_sig_tmp.bin

*b*. use "gps_test" program to do some initial demodulation and check C/A
codes:

    gps_test gps_sig_tmp.bin 2.046e6 8.184e6 5000

Above program gps_test performs initial GPS signal capture by multi-bins
correlation in frequency domain.

gps_sig_tmp.bin: input GPS signal generated by gps_sig_gen.m (MATLAB).

2.046e6: carrier frequency

8.184e6: sampling rate

5000: maximum frequency offset for frequency searching

You will find that C/A codes results are aligned with GPS signal we
generate by Matlab script.
1.2 use C program "gps_test" to receive GPS signal captured by others
instead of my our Matlab script gps_sig_gen.m

    gps_test gps.samples.1bit.I.fs5456.if4092.bin 4.092e6 5.456e6 5000

gps.samples.1bit.I.fs5456.if4092.bin: captured by others and can be
downloaded here: http://www.jks.com/gps/gps.html

You will find C/A codes results are equal to those shown here:
http://www.jks.com/gps/gps.html
2. over the air GPS test method 2.1 playback
gps.samples.1bit.I.fs5456.if4092.bin( http://www.jks.com/gps/gps.html )

*a*. run gps_bin1bit_log2bin.m in Matlab to generate playback file for
HACKRF (they capture GPS signal with 1bit quantization. we convert it to
8bit format which is needed by HACKRF):
gps.samples.8bit.IQ.fs5456.baseband.bin

*b*. run gps_Nottingham.grc to playback
gps.samples.8bit.IQ.fs5456.baseband.bin over the air. And
meanwhile/immediately,

*c*. use rtl-sdr to capture signal:

    rtl_sdr -g 60 -f 1575.42e6 -s 2.8e6 -n 19.2e6 rtl_2.8Msps_1575.42MHz.bin

*d*. run proc_rtl_bin_for_gps('rtl_2.8Msps_1575.42MHz.bin') in Matlab to
convert 8bit file to 1bit file which is needed by gps_test
program:rtl_2.8Msps_1575.42MHz_1bit.bin

*e*. see C/A codes initial capture result by running gps_test program:

    gps_test rtl_2.8Msps_1575.42MHz_1bit.bin 0.62e6 2.8e6 100000

You will find C/A codes results are equal to those shown here:
http://www.jks.com/gps/gps.html
2.2 playback gps_sig_tmp_for_hackrf_tx.bin (generated by gps_sig_gen.m) to
air by gps.grc.

*a*. run gps.grc to playback gps_sig_tmp_for_hackrf_tx.bin over the air.
And meanwhile/immediately,

*b*. capture air GPS signal by:

    rtl_sdr -g 60 -f 1574.8e6 -s 2.8e6 -n 19.2e6 rtl_2.8Msps_1574.8MHz.bin

*c*. convert captured 8bit file to 1bit bin file which is needed by
gps_test: rtl_2.8Msps_1574.8MHz_1bit.bin

    proc_rtl_bin_for_gps('rtl_2.8Msps_1574.8MHz.bin'); (MATLAB)

*d*. RUN:

    gps_test rtl_2.8Msps_1574.8MHz_1bit.bin 0.62e6 2.8e6 100000

to see GPS signal capture result: C/A codes are supposed to align with our
expectation (Matlab script).

*e*. you can also capture air GPS signal with different intermediate
frequency by:

    rtl_sdr -g 60 -f 1575.42e6 -s 2.8e6 -n 19.2e6 rtl_2.8Msps_1575.42MHz.bin

*f*. convert captured 8bit file to 1bit bin file which is needed by
gps_test: rtl_2.8Msps_1575.42MHz_1bit.bin

    proc_rtl_bin_for_gps('rtl_2.8Msps_1575.42MHz.bin'); (MATLAB)

*g*. RUN:

    gps_test rtl_2.8Msps_1575.42MHz_1bit.bin 0.62e6 2.8e6 100000

to see GPS signal capture result: C/A codes are supposed to align with our
expectation (Matlab script).
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://pairlist9.pair.net/pipermail/hackrf-dev/attachments/20141102/20389fa4/attachment.html>


More information about the HackRF-dev mailing list