Software-Defined GPS Signal Simulator
Go to file
Harald Welte aca19119fd Add support for transmission via UHD devices
this is currently only tested with an USRP2, but should
work similarly with other UHD devices.
2015-08-21 00:39:28 +02:00
player bladeRF player 2015-08-01 17:06:17 +09:00
rtk RTK example 2015-07-02 11:03:24 +09:00
satgen Rename folder 2015-08-01 16:55:23 +09:00
.gitignore Test 2015-07-01 18:03:02 +09:00
bladerf.script Add bladerf.script, and update README.md 2015-07-20 15:12:00 +08:00
brdc3540.14n Created 2015-06-15 10:33:53 +09:00
circle.csv Created 2015-06-15 10:33:53 +09:00
getopt.c Initial commit 2015-06-27 10:18:01 +09:00
getopt.h Initial commit 2015-06-27 10:18:01 +09:00
gps-sdr-sim-uhd.py Add support for transmission via UHD devices 2015-08-21 00:39:28 +02:00
gpssim.c Experimental carrier phase initialization for faster fix 2015-08-07 10:33:11 +09:00
LICENSE Update LICENSE 2015-06-15 10:03:53 +09:00
Makefile Remove the checksum test. 2015-07-09 08:18:57 +09:00
README.md Add support for transmission via UHD devices 2015-08-21 00:39:28 +02:00
rocket.csv Generated by MatRockSim 2015-06-24 10:27:14 +09:00
satellite.csv Low earth orbiting satellite 2015-07-13 14:58:46 +09:00
u-center.png Created 2015-06-15 10:33:53 +09:00
ublox.jpg Created 2015-06-15 10:33:53 +09:00

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 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. Open the Property Pages dialog box and expand the Configuration Properties.
  6. Expand the C/C++ node and select the Language property page.
  7. Enable the OpenMP Support (/openmp).
  8. Build the solution.

Building with GCC

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

Generating the GPS signal file

A user-defined trajectory can be specified in a CSV file, which contains the Earth-centered Earth-fixed (ECEF) user positions at 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 ephemers file (brdc) is a merge of the indiviual site navigation files into one. The archive for the daily file is:

ftp://cddis.gsfc.nasa.gov/gnss/data/daily/

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 command line interface requires I/Q pairs stored as signed 16-bit integers, while the hackrf_transfer and gps-sdr-sim-uhd.py supports signed bytes.

HackRF + bladeRF require 2.6 MHz sample rate, while the USRP2 requires 2.5 MHz (an even integral decimator of 100 MHz).

Usage: gps-sdr-sim [options]
Options:
  -e <gps_nav>     RINEX navigation file for GPS ephemerides (required)
  -u <user_motion> User motion file (dynamic mode)
  -l <location>    Lat,Lon,Hgt (static mode) e.g. 30.286502,120.032669,100
  -o <output>      I/Q sampling data file (default: gpssim.bin)
  -s <frequency>   Sampling frequency [Hz] (default: 2600000)
  -b <iq_bits>     I/Q data format [8/16] (default: 8)

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

> gps-sdr-sim -e brdc3540.14n -u circle.csv -b 16
> gps-sdr-sim -e brdc3540.14n -l 30.286502,120.032669,100 -b 16

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.

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

For the HackRF:

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

For UHD supported devices (tested with USRP2 only):

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

License

Copyright © 2015 Takuji Ebinuma
Distributed under the MIT License.