百科.dev
全部条目AI 编程趋势榜开源项目技术资讯提交条目
登录
< 返回工具列表
G

gps-sdr-sim

> 编程语言
开源

软件定义的 GPS 信号模拟器

3.5K stars0 点赞0 次浏览
访问官网GitHub

工具介绍

软件定义的 GPS 信号模拟器

GPS-SDR-SIM

GPS-SDR-SIM generates GPS baseband signal data streams, which can be converted to RF using software-defined radio (SDR) platforms, such as ADALM-Pluto, bladeRF, HackRF, and USRP.

Windows build instructions

  1. Start Visual Studio.
  2. Create an empty project for a console application.
  3. On the Solution Explorer at right, add "gpssim.c" and "getopt.c" to the Souce Files folder.
  4. Select "Release" in Solution Configurations drop-down list.
  5. Build the solution.

Building with GCC

$ gcc gpssim.c -lm -O3 -o gps-sdr-sim

Using bigger user motion files

In order to use user motion files with more than 30000 samples (at 10Hz), the USER_MOTION_SIZE variable can be set to the maximum time of the user motion file in seconds. It is advisable to do this using make so gps-sdr-bin can update the size when needed. e.g:

$ make USER_MOTION_SIZE=4000

This variable can also be set when compiling directly with GCC:

$ gcc gpssim.c -lm -O3 -o gps-sdr-sim -DUSER_MOTION_SIZE=4000

Generating the GPS signal file

A user-defined trajectory can be specified in either a CSV file, which contains the Earth-centered Earth-fixed (ECEF) user positions, or an NMEA GGA stream. The sampling rate of the user motion has to be 10Hz. The user is also able to assign a static location directly through the command line.

The user specifies the GPS satellite constellation through a GPS broadcast ephemeris file. The daily GPS broadcast ephemeris file (brdc) is a merge of the individual site navigation files into one. The archive for the daily file can be downloaded from: https://cddis.nasa.gov/archive/gnss/data/daily/. Access to this site requires registration, which is free.

These files are then used to generate the simulated pseudorange and Doppler for the GPS satellites in view. This simulated range data is then used to generate the digitized I/Q samples for the GPS signal.

The bladeRF and ADALM-Pluto command line interface requires I/Q pairs stored as signed 16-bit integers, while the hackrf_transfer and gps-sdr-sim-uhd.py support signed bytes.

HackRF, bladeRF and ADALM-Pluto can accept the default sample rate of 2.6MHz, while the USRP2 requires an even integral decimator of 100 MHz, i.e. 2.5MHz.

The simulation start time can be specified if the corresponding set of ephemerides is available. Otherwise the first time of ephemeris in the RINEX navigation file is selected.

The maximum simulation duration time is defined by USER_MOTION_SIZE to prevent the output file from getting too large.

The output file size can be reduced by using "-b 1" option to store four 1-bit I/Q samples into a single byte. You can use bladeplayer for bladeRF to playback the compressed file.

…

The user motion can be specified in either dynamic or static mode:

> 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

Transmitting the samples

The TX port of a particular SDR platform is connected to the GPS receiver under test through a DC block and a fixed 50-60dB attenuator.

BladeRF:

The simulated GPS signal file, named "gpssim.bin", can be loaded into the bladeRF for playback as shown below:

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

You can also execute these commands via the bladeRF-cli script option as below:

> bladeRF-cli -s bladerf.script

HackRF:

The output data have to be 8-bit signed I/Q samples.

> gps-sdr-sim -e brdc0010.22n -b 8

You can use hackrf_transfer tool in the HackRF host software.

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

UHD supported devices (tested with USRP2 only):

> gps-sdr-sim-uhd.py -t gpssim.bin -s 2500000 -x 0

You can also use tx_samples_from_file tool included in the UHD examples:

> tx_samples_from_file --file gpssim.bin --type short --rate 2500000 --freq 1575420000 --gain 0

LimeSDR (in case of 1 Msps 1-bit file, to get full BaseBand dynamic and low RF power):

> limeplayer -s 1000000 -b 1 -d 2047 -g 0.1 < ../circle.1b.1M.bin

ADALM-Pluto (PlutoSDR):

The ADALM-Pluto device is expected to have its network interface up and running and is accessible via "pluto.local" by default.

Default settings:

> plutoplayer -t gpssim.bin

Set TX attenuation:

> plutoplayer -t gpssim.bin -a -30.0

Default -20.0dB. Applicable range 0.0dB to -80.0dB in 0.25dB steps.

Set RF bandwidth:

> plutoplayer -t gpssim.bin -b 3.0

Default 3.0MHz. Applicable range 1.0MHz to 5.0MHz.

License

Copyright © 2015-2025 Takuji Ebinuma
Distributed under the MIT License.

Issues· 173 开放

查看全部 Issues在 GitHub 打开

暂无开放 Issues,或尚未同步最近议题。

> 标签

C

暂无评论,来聊聊你的看法吧

> 工具信息

发布日期2026年8月1日
最后更新2026年9月17日
分类编程语言
定价开源

> 相关工具

T
TypeScript
JavaScript 的超集,为前端与全栈提供静态类型
P
Python
通用编程语言,广泛用于 Web、数据与 AI
G
Go
Google 推出的简洁高效系统语言