
Программно-определяемый симулятор GPS-сигналов
GPS-SDR-SIM генерирует потоки данных базового сигнала GPS, которые можно преобразовать в радиочастоту с использованием программно-определяемых радио (SDR) платформ, таких как ADALM-Pluto, bladeRF, HackRF и USRP.
$ gcc gpssim.c -lm -O3 -o gps-sdr-sim
Чтобы использовать файлы движения пользователя с более чем 30000 отсчетов (с частотой 10 Гц), переменную 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
Пользовательская траектория может быть задана в файле CSV, содержащем координаты пользователя в системе ECEF (Earth-centered Earth-fixed), или в потоке NMEA GGA. Частота отсчетов движения пользователя должна быть 10 Гц. Также можно задать статическое местоположение непосредственно через командную строку.
Пользователь указывает созвездие спутников GPS через файл GPS-эфемерид (broadcast ephemeris). Ежедневный файл GPS-эфемерид (brdc) представляет собой объединение отдельных навигационных файлов станций. Архив ежедневных файлов можно загрузить с: https://cddis.nasa.gov/archive/gnss/data/daily/. Доступ к этому сайту требует регистрации, которая бесплатна.
Эти файлы используются для генерации смоделированной псевдодальности и доплеровского сдвига для видимых спутников GPS. Затем эти смоделированные данные дальности используются для генерации оцифрованных I/Q отсчетов сигнала GPS.
Интерфейс командной строки bladeRF и ADALM-Pluto требует I/Q пары в виде 16-битных целых чисел со знаком, в то время как hackrf_transfer и gps-sdr-sim-uhd.py поддерживают байты со знаком.
HackRF, bladeRF и ADALM-Pluto могут принимать частоту дискретизации по умолчанию 2.6 МГц, в то время как USRP2 требует целочисленного делителя 100 МГц, т.е. 2.5 МГц.
Время начала симуляции можно указать, если доступен соответствующий набор эфемерид. В противном случае выбирается первое время эфемерид в навигационном файле RINEX.
Максимальная длительность симуляции определяется параметром USER_MOTION_SIZE, чтобы предотвратить слишком большой размер выходного файла.
Размер выходного файла можно уменьшить, используя опцию "-b 1" для хранения четырех 1-битных I/Q отсчетов в одном байте. Вы можете использовать bladeplayer для bladeRF для воспроизведения сжатого файла.
Использование: gps-sdr-sim [опции]
Опции:
-e <gps_nav> Навигационный файл RINEX для GPS-эфемерид (обязательно)
-u <user_motion> Файл движения пользователя в формате ECEF x, y, z (динамический режим)
-x <user_motion> Файл движения пользователя в формате широта, долгота, высота (динамический режим)
-g <nmea_gga> Поток NMEA GGA (динамический режим)
-c <location> ECEF X,Y,Z в метрах (статический режим), например 3967283.15,1022538.18,4872414.48
-l <location> Широта,Долгота,Высота (статический режим), например 30.286502,120.032669,100
-L <wnslf,dn,dtslf> Будущее событие скачка времени Leap в номере недели GPS, номер дня, следующая високосная секунда, например 2347,3,19
-t <date,time> Время начала сценария ГГГГ/ММ/ДД,чч:мм:сс
-T <date,time> Перезаписать TOC и TOE на время начала сценария
-d <duration> Продолжительность [сек] (макс. для динамического: 300, макс. для статического: 86400)
-o <output> Файл данных I/Q отсчетов (по умолчанию: gpssim.bin; используйте - для stdout)
-s <frequency> Частота дискретизации [Гц] (по умолчанию: 2600000)
-b <iq_bits> Формат I/Q данных [1/8/16] (по умолчанию: 16)
-i Отключить ионосферную задержку для сценария космического аппарата
-p [fixed_gain] Отключить потери на трассе и поддерживать уровень мощности постоянным
-v Показать детали о моделируемых каналах
Движение пользователя может быть задано в динамическом или статическом режиме:
> 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
TX-порт конкретной SDR-платформы подключается к тестируемому GPS-приемнику через DC-блок и фиксированный аттенюатор на 50-60 дБ.
Файл смоделированного GPS-сигнала с именем "gpssim.bin" может быть загружен в 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
Выходные данные должны быть 8-битными I/Q отсчетами со знаком.
> gps-sdr-sim -e brdc0010.22n -b 8
Вы можете использовать инструмент hackrf_transfer из ПО для HackRF.
> hackrf_transfer -t gpssim.bin -f 1575420000 -s 2600000 -a 1 -x 0
> gps-sdr-sim-uhd.py -t gpssim.bin -s 2500000 -x 0
Вы также можете использовать инструмент tx_samples_from_file из примеров UHD:
> tx_samples_from_file --file gpssim.bin --type short --rate 2500000 --freq 1575420000 --gain 0
> limeplayer -s 1000000 -b 1 -d 2047 -g 0.1 < ../circle.1b.1M.bin
Ожидается, что сетевое устройство ADALM-Pluto работает и доступно по умолчанию через "pluto.local".
Настройки по умолчанию:
> plutoplayer -t gpssim.bin
Установка ослабления TX:
> plutoplayer -t gpssim.bin -a -30.0
По умолчанию -20.0 дБ. Допустимый диапазон от 0.0 дБ до -80.0 дБ шагом 0.25 дБ.
Установка полосы пропускания RF:
> plutoplayer -t gpssim.bin -b 3.0
По умолчанию 3.0 МГц. Допустимый диапазон от 1.0 МГц до 5.0 МГц.
Copyright © 2015-2025 Takuji Ebinuma
Распространяется под лицензией MIT.