GALILEO-SDR-SIM generates Galileo baseband signal data streams, which can be converted to RF using software-defined radio (SDR) platforms.
- Galileo E1B/C signal generation
- Real time navigation message relay
- Real time location update
- USRP TX support
- File sink
- g++
- Cmake
- Curses
- UHD (usrp api and dev library)
- Boost
- pynput (optional, for real-time location update via keyboard)
sudo apt-get install -y libuhd-dev uhd-host gnss-sdr g++ libncurses-dev cmake pkg-config libboost-dev libglib2.0-dev build-essential
pip3 install pynput
For offline evaluation, you will also need GNSS-SDR - found here -> https://gnss-sdr.org/
GNSS-SDR installation with package manager on most Linux distros
sudo apt install gnss-sdr
For more installation options please check their website.
git clone https://github.com/harshadms/galileo-sdr-sim
cd galileo-sdr-sim
mkdir build && cd build
cmake ../
make
Usage, help and options
Usage: ./usrp_galileo [options]
Options:
-e <Ephemeris> RINEX navigation file for Galileo ephemerides (required)
-n <Navmsg Dir> Dir containing navigation messages
-o <File sink> File to store IQ samples (default: ./galileosim.ishort)
-u <user_motion> User motion file (dynamic mode)
-l <location> Lat,Lon,Hgt (static mode) e.g. 35.274,137.014,100
-t <date,time> Scenario start time YYYY/MM/DD,hh:mm:ss
-T <date,time> Overwrite TOC and TOE to scenario start time
-d <duration> Duration [sec] (default: 300)
-a <rf_gain> Absolute RF gain in [0 ... 60] (default: 30)
-U <use usrp> Disable USRP (-U 1) (default: true)
-b <bitstream> Disable Bit stream (-b 1) (default: true)
-v <verbose> Enable verbose output (default: false)
Executing the following command will generate a Galileo signal file for the location 42,71,100 starting from 2022/02/20,08:00:01. The generated samples will be stored in galileo.ishort as interleaved shorts (I1Q1, I2Q2, ... , InQn) @ 2.6e6 samples/sec
$ ./usrp_galileo -l 42,71,100 -t 2022/02/20,08:00:01 -n ../tv/20_FEB_2022_GST_08_00_01 -o /tmp/galileosim.bin -U 1 -b 1;
This project is still in development. For now, scenario start time is limited to the following because of navigation message availability:
- 11_DEC_2020_GST_08_00_01
- 12_DEC_2020_GST_08_00_01
- 13_DEC_2020_GST_09_00_01
- 15_DEC_2020_GST_08_00_01
- 15_DEC_2020_GST_10_00_01
- 16_DEC_2020_GST_08_00_01
- 17_JAN_2021_GST_08_00_01
- 12_JAN_2021_GST_10_00_01
- 13_JAN_2021_GST_10_00_01
- 25_JAN_2021_GST_08_00_01
- 23_FEB_2021_GST_09_00_31
- 28_FEB_2021_GST_08_00_01
- 20_FEB_2022_GST_08_00_01
Please specify the correct start time with -t
option and correct navigation message files by specifying -n
. All navigation messages are stored in ./tv/<date_time>
The generated E1B/C signal has been tested with GNSS-SDR and a battery of receivers from u-Blox and Septentrio. Here are some evaluation results.
eval methodology - [add gnss-sdr instructions and USRP instructions]
Here you will find all improvement plans and pending tasks. Please feel free to add suggestions and contribute :)
- I/NAV message generation (generate_frame.cpp has some PoC)
- RINEX reader integration
- Time & Frequency sync with GNSS-SDR monitor
- Enable multi-SDR support (libhackrf, LimeSuite etc)
- Fixed point arithmatic to avoid rounding errorss
More ambitious plans:
- Integrate GPS L1 C/A
- GPS-SDR-SIM has been an inspiration to start this project