环境

系统: macOS 10.14.5

硬件: HackRF One、TCXO外部时钟

外部时钟

由于HackRF自带的振荡器频率不够准确,信号不被接收,所需要外置高精度时钟

编译gps-sdr-sim

$ git clone https://github.com/osqzss/gps-sdr-sim.git
$ cd gps-sdr-sim
$ gcc gpssim.c -lm -O3 -o gps-sdr-sim

# 程序默认限制在5分钟(DUSER_MOTION_SIZE=3000),如需增加时间,可在编译时带上参数,同时生成的文件也将变大
$ gcc gpssim.c -lm -O3 -o gps-sdr-sim -DUSER_MOTION_SIZE=4000

生成仿真数据

$ ./gps-sdr-sim -e brdc3540.14n -l 39.915210,116.403900,100 -b 8

# 如需欺骗时间(YYYY/MM/DD,hh:mm:ss)
$ ./gps-sdr-sim -e brdc3540.14n -l 39.915210,116.403900,100 -T 2000/01/01,00:00:00 -b 8

# 如需按轨迹欺骗
$ ./gps-sdr-sim -e brdc3540.14n -u circle.csv -b 8

RINEX星历

brdc3540.14n 为星历数据

ftp://cddis.gsfc.nasa.gov/pub/gps/data/daily/

文件命名规则:brdc3540.14n(ssssdddf.yyt)[8 + 3文件名]

名称 标记 位数 描述
brdc ssss 0 ~ 4位 4字符测站名
354 ddd 5 ~ 7位 观测历元的年纪日
如:001表示1月1日
0 f 8位 一天内的文字序号(时段号)为0 ~ 9,A ~ Z
若为0,则表示文件包含当天内所有的观测数据
14 yy 1 ~ 2位 2位年号
80 ~ 99:1980 ~ 1999
00 ~ 79:2000 ~ 2079
n t 3位 文件类型
o(O):GPS观测值
n(N):卫星导航电文
m(M):气象数据
g(G):GLONASS卫星导航电文
h(H):同步卫星GPS载荷导航电文
c(C):钟文件

发射仿真数据

$ hackrf_transfer -t gpssim.bin -f 1575420000 -s 2600000 -a 1 -x 0 -R

-t gpssim.bin 为生成的仿真数据

-f 1575420000 即民用GPS L1波段频率

-s 2600000 采样速率2.6Mbps

-a 1 开启天线增益

-x 指定TX VGA(IF)为0(为了限制影响范围,最大为47)

-R 开启重复发射数据功能

手机将会在1分钟左右欺骗成功,建议手机关闭基站辅助定位

生成运动轨迹数据

先用Google Earth制作路径并导出kml文件

使用SatGen生成标准NMEA轨迹文件,SatGen只有Windows版,Mac没找到合适的软件。

$ ./gps-sdr-sim -e brdc3540.14n -g 轨迹文件 -b 8