osqzss/gps-sdr-sim

GitHub: osqzss/gps-sdr-sim

一款开源的软件定义GPS信号模拟器,可基于星历数据生成GPS L1基带I/Q信号并通过SDR硬件发射。

Stars: 3332 | Forks: 937

# GPS-SDR-SIM GPS-SDR-SIM 生成 GPS 基带信号数据流,这些数据流可以通过软件定义无线电 (SDR) 平台(例如 [ADALM-Pluto](https://wiki.analog.com/university/tools/pluto)、[bladeRF](http://nuand.com/)、[HackRF](https://github.com/mossmann/hackrf/wiki) 和 [USRP](http://www.ettus.com/))转换为射频 (RF) 信号。 ### Windows 构建说明 1. 启动 Visual Studio。 2. 创建一个控制台应用程序的空项目。 3. 在右侧的解决方案资源管理器中,将 "gpssim.c" 和 "getopt.c" 添加到源文件文件夹中。 4. 在解决方案配置下拉列表中选择 "Release"。 5. 构建解决方案。 ### 使用 GCC 构建 ``` $ 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 ``` ### 生成 GPS 信号文件 用户定义的轨迹可以在 CSV 文件(包含地心地固坐标系 (ECEF) 用户位置)或 NMEA GGA 流中指定。 用户运动的采样率必须为 10Hz。 用户也可以直接通过命令行指定静态位置。 用户通过 GPS 广播星历文件指定 GPS 卫星星座。每日 GPS 广播星历文件 (brdc) 是将单个站点的导航文件合并为一个文件。每日文件的归档可以从以下地址下载:https://cddis.nasa.gov/archive/gnss/data/daily/。访问该站点需要注册,注册是免费的。 然后使用这些文件为视野内的 GPS 卫星生成模拟伪距和多普勒频移。此模拟距离数据随后用于生成 GPS 信号的数字化 I/Q 采样。 bladeRF 和 ADALM-Pluto 命令行界面需要存储为有符号 16 位整数的 I/Q 对,而 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](https://github.com/osqzss/gps-sdr-sim/tree/master/player) 在 bladeRF 上回放压缩文件。 ``` Usage: gps-sdr-sim [options] Options: -e RINEX navigation file for GPS ephemerides (required) -u User motion file in ECEF x, y, z format (dynamic mode) -x User motion file in lat, lon, height format (dynamic mode) -g NMEA GGA stream (dynamic mode) -c ECEF X,Y,Z in meters (static mode) e.g. 3967283.15,1022538.18,4872414.48 -l Lat,Lon,Hgt (static mode) e.g. 30.286502,120.032669,100 -L User leap future event in GPS week number, day number, next leap second e.g. 2347,3,19 -t Scenario start time YYYY/MM/DD,hh:mm:ss -T Overwrite TOC and TOE to scenario start time -d Duration [sec] (dynamic mode max: 300 static mode max: 86400) -o I/Q sampling data file (default: gpssim.bin ; use - for stdout) -s Sampling frequency [Hz] (default: 2600000) -b I/Q data format [1/8/16] (default: 16) -i Disable ionospheric delay for spacecraft scenario -p [fixed_gain] Disable path loss and hold power level constant -v Show details about simulated channels ``` 用户运动可以在动态或静态模式下指定: ``` > 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 接收机。 #### BladeRF: 名为 "gpssim.bin" 的模拟 GPS 信号文件可以加载到 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 ``` #### HackRF: 输出数据必须是 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 ``` #### 支持 UHD 的设备(仅使用 USRP2 测试): ``` > 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 ``` #### LimeSDR(如果是 1 Msps 1 位文件,以获得完整的基带动态范围和低射频功率): ``` > limeplayer -s 1000000 -b 1 -d 2047 -g 0.1 < ../circle.1b.1M.bin ``` #### ADALM-Pluto (PlutoSDR): 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 许可证](http://www.opensource.org/licenses/mit-license.php) 分发。
标签:ADALM-Pluto, bladeRF, ECEF坐标, GNSS, GPS模拟器, HackRF, L1频段, NMEA, SDR, USRP, 位置欺骗, 信号生成, 卫星导航, 基带信号, 多普勒频移, 客户端加密, 导航仿真, 射频, 开源硬件, 无线通信, 星历数据, 软件定义无线电, 逆向工具