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
标签:ADALM-Pluto, bladeRF, ECEF坐标, GNSS, GPS模拟器, HackRF, L1频段, NMEA, SDR, USRP, 位置欺骗, 信号生成, 卫星导航, 基带信号, 多普勒频移, 客户端加密, 导航仿真, 射频, 开源硬件, 无线通信, 星历数据, 软件定义无线电, 逆向工具