基于BladeRF的GPS虚拟欺骗
作者:齐花Guyc(CAUC)
一、准备硬件和环境
-
螺旋天线
-
Blade RF 2.0 Micro xA4
-
-
PC安装Blade RF驱动 和 bladeRFCLI
-
GPS-SDR-SIM用于生成虚假 GPS 信号
网盘中还有2025年4月28日的广播星历 年积日为118
连接设备
二、仿真GPS信号
网盘中给的GPS-SDR-SIM是已经编译好了的,可以直接在文件夹中用终端打开。
直接输入命令
gps-sdr-sim.exe
稍微解读一下:
-e <gps_nav> 指定 GPS 星历数据的 RINEX 导航文件,用于模拟真实 GPS 信号
-u <user_motion> 指定动态模式下的用户运动轨迹文件(ECEF格式)
-x <user_motion> 指定动态模式下的用户运动轨迹文件(经纬高格式)
-g <nmea_gga> 指定动态模式下的 NMEA GGA 流
-c <location> 指定静态模式下的位置(ECEF,单位:米)
-l <location> 指定静态模式下的位置(经纬高格式)
-L <wnslf,dn,dtslf> 指定未来的 GPS 闰秒事件(GPS 周数、天数、闰秒值)
-t <date,time> 指定仿真开始时间(格式:YYYY/MM/DD,hh:mm:ss)
-T <date,time> 将星历的 TOC(时钟参考时间)和 TOE(轨道参考时间)覆盖为指定时间
-d <duration> 指定仿真持续时间(单位:秒)
-o <output> 指定输出的 I/Q 数据文件(默认:gpssim.bin)
-s <frequency> 指定采样频率(单位:Hz,默认:2600000)
-b <iq_bits> 指定 I/Q 数据位深(1/8/16,默认:16)
-i 禁用电离层延迟
-p [fixed_gain] 禁用路径损耗,固定信号功率
-v 显示仿真通道的详细信息
打开谷歌地图,进行坐标点的选取。
上海东方明珠的纬度和经度是31.239783239702604, 121.49980011202929
纬度坐标的数值介于 -90 和 90 之间;经度坐标的数值介于 -180 和 180 之间
开始仿真
-e brdc1180.25n
-l 选择静态模式,经纬高赋值 121.49971080037747,31.239750513187605,100
-o 输出 I/Q 数据文件 gps_sim_shanghai.bin
-b I/Q 数据位深 16bit
gps-sdr-sim -e brdc1180.25n -l 121.49971080037747,31.239750513187605,100 -o gps_sim_shanghai.bin -b 16
此时文件夹会多出.bin文件
三、传输BladeRF播发信号
注意:先将BladeRF连接PC后再打开bladeRF CLI
否则会出现以下情况:显示未连接。
连接成功后,再次打开bladeRF CLI。
可以先print打印基本信息
解读一下:
//接收和发射通道带宽
//RX1 和 RX2 是 bladeRF 的两个接收通道,TX1 和 TX2 是两个发射通道
//当前带宽设置为 18 MHz,范围为 200 kHz 至 56 MHz
TX1 Bandwidth: 18000000 Hz (Range: [200000, 56000000])
//接收和发射通道频率
//当前 TX 通道的频率设置为 2.4 GHz
TX1 Frequency: 2400000000 Hz (Range: [47000000, 6000000000])
//表示 TX1 通道的总增益
Gain TX1 overall: 71 dB (Range: [-4, 71])
//表示数字衰减量
Gain TX1 dsa: 50 dB (Range: [-89, 0])
//发射信号采样率
TX sample rate: 30720000 0/1 (Range: [520834, 61444000])
注意:需要将中频文件移动到bladeRF文件夹路径中,否则读取不了文件。
键入命令
tx config file=gps_sim_shanghai.bin format=bin channel=1 repeat=0
set frequency tx2 1575.42M
set samplerate tx2 2.6M
set bandwidth tx2 2.5M
tx start
四、结果
博主手机型号是小米14,查了一下官网参数:
GNSS支持北2的B1I、北3的双频B1C/B2a 、GPS双频L1CA/L5、Galileo E1 E5a 、GLONASS G1、准天顶QZSS L1CA/L5
支持基站辅助GNSS、蜂窝和WiFi网络定位、传感器辅助定位
下面是仿真信号的卫星序列 PRN为 08 10 13 15 16 18 23 26 27
打开手机的GPS测试软件
PRN为 08 10 13 15 16 18 23 26 27
方位角和高度角也解算正确
这是手机仅GPS下的卫星分布
这是另一款软件的结果
但奇怪的是一直没有成功解算出最终的定位结果,不知道是手机的问题还是软件问题,有待考究。
2025.04.29
有长期从事导航的大佬给出猜测:
1.手机的原因:现在手机大多采取差分定位;
2.FPGA十年老鸟:手机先调成飞行模式,然后重启,在接收信号。不然会优先网上下载星历,导致和模拟器接收的信号冲突,也可能不出定位。