
Software-Defined GPS Signal Simulator
GPS-SDR-SIM 生成 GPS 基带信号数据流,这些数据流可以使用软件定义无线电(SDR)平台转换为射频信号,例如 ADALM-Pluto、bladeRF、HackRF 和 USRP。
$ gcc gpssim.c -lm -O3 -o gps-sdr-sim
为了使用包含超过 30000 个样本(10Hz)的用户运动文件,可以将 USER_MOTION_SIZE 变量设置为用户运动文件的最大时间(秒)。建议使用 make 进行此操作,这样 gps-sdr-bin 可以在需要时更新大小。例如:
$ make USER_MOTION_SIZE=4000
在直接使用 GCC 编译时也可以设置此变量:
$ gcc gpssim.c -lm -O3 -o gps-sdr-sim -DUSER_MOTION_SIZE=4000
用户定义的轨迹可以在 CSV 文件(包含地心地固(ECEF)用户位置)或 NMEA GGA 流中指定。用户运动的采样率必须为 10Hz。用户也可以通过命令行直接指定静态位置。
用户通过 GPS 广播星历文件指定 GPS 卫星星座。每日的 GPS 广播星历文件(brdc)是各个站点导航文件的合并。每日文件的归档可以从以下地址下载:https://cddis.nasa.gov/archive/gnss/data/daily/。访问此网站需要注册,注册是免费的。
这些文件随后用于生成视距内 GPS 卫星的模拟伪距和多普勒。这个模拟的距离数据随后用于生成 GPS 信号的数字化 I/Q 采样。
bladeRF 和 ADALM-Pluto 命令行界面要求 I/Q 对存储为有符号 16 位整数,而 hackrf_transfer 和 gps-sdr-sim-uhd.py 支持有符号字节。
HackRF、bladeRF 和 ADALM-Pluto 可以接受默认的 2.6MHz 采样率,而 USRP2 要求 100 MHz 的偶数积分抽取器,即 2.5MHz。
如果存在相应的星历集合,则可以指定模拟开始时间。否则,将选择 RINEX 导航文件中的第一个星历时间。
最大模拟持续时间由 USER_MOTION_SIZE 定义,以防止输出文件过大。
可以使用 "-b 1" 选项减少输出文件大小,将四个 1 位 I/Q 样本存储到一个字节中。 您可以使用 bladeplayer 在 bladeRF 上回放压缩文件。
Usage: gps-sdr-sim [options]
Options:
-e <gps_nav> RINEX 导航文件,用于 GPS 星历(必需)
-u <user_motion> 用户运动文件,ECEF x、y、z 格式(动态模式)
-x <user_motion> 用户运动文件,纬度、经度、高度格式(动态模式)
-g <nmea_gga> NMEA GGA 流(动态模式)
-c <location> ECEF X、Y、Z(米)(静态模式)例如 3967283.15,1022538.18,4872414.48
-l <location> 纬度、经度、高度(静态模式)例如 30.286502,120.032669,100
-L <wnslf,dn,dtslf> 用户闰秒未来事件,GPS 周数、天数、下一个闰秒 例如 2347,3,19
-t <date,time> 场景开始时间 YYYY/MM/DD,hh:mm:ss
-T <date,time> 将 TOC 和 TOE 覆盖为场景开始时间
-d <duration> 持续时间 [秒](动态模式最大:300 静态模式最大:86400)
-o <output> I/Q 采样数据文件(默认:gpssim.bin;使用 - 表示 stdout)
-s <frequency> 采样频率 [Hz](默认:2600000)
-b <iq_bits> I/Q 数据格式 [1/8/16](默认:16)
-i 禁用航天器场景的电离层延迟
-p [fixed_gain] 禁用路径损耗并将功率电平保持恒定
-v 显示模拟通道的详细信息
用户运动可以在动态或静态模式下指定:
> gps-sdr-sim -e brdc3540.14n -u circle.csv
> gps-sdr-sim -e brdc3540.14n -x circle_llh.csv
> gps-sdr-sim -e brdc3540.14n -g triumphv3.txt
> gps-sdr-sim -e brdc3540.14n -l 30.286502,120.032669,100
特定 SDR 平台的 TX 端口通过直流阻断器和固定 50-60dB 衰减器连接到被测 GPS 接收机。
模拟的 GPS 信号文件(名为 "gpssim.bin")可以加载到 bladeRF 中进行回放,如下所示:
set frequency 1575.42M
set samplerate 2.6M
set bandwidth 2.5M
set txvga1 -25
cal lms
cal dc tx
tx config file=gpssim.bin format=bin
tx start
您也可以通过 bladeRF-cli 脚本选项执行这些命令,如下所示:
> bladeRF-cli -s bladerf.script
输出数据必须为 8 位有符号 I/Q 采样。
> gps-sdr-sim -e brdc0010.22n -b 8
您可以使用 HackRF 主机软件中的 hackrf_transfer 工具。
> hackrf_transfer -t gpssim.bin -f 1575420000 -s 2600000 -a 1 -x 0
> gps-sdr-sim-uhd.py -t gpssim.bin -s 2500000 -x 0
您也可以使用 UHD 示例中附带的 tx_samples_from_file 工具:
> tx_samples_from_file --file gpssim.bin --type short --rate 2500000 --freq 1575420000 --gain 0
> limeplayer -s 1000000 -b 1 -d 2047 -g 0.1 < ../circle.1b.1M.bin
ADALM-Pluto 设备应具有正常运行的网络接口,并且默认可通过 "pluto.local" 访问。
默认设置:
> plutoplayer -t gpssim.bin
设置 TX 衰减:
> plutoplayer -t gpssim.bin -a -30.0
默认 -20.0dB。适用范围 0.0dB 至 -80.0dB,步进 0.25dB。
设置 RF 带宽:
> plutoplayer -t gpssim.bin -b 3.0
默认 3.0MHz。适用范围 1.0MHz 至 5.0MHz。
版权所有 © 2015-2025 Takuji Ebinuma
根据 MIT 许可证 发布。