
Software-Defined GPS Signal Simulator
GPS-SDR-SIM génère des flux de données de signal en bande de base GPS, qui peuvent être convertis en RF à l'aide de plateformes radio définies par logiciel (SDR), telles que ADALM-Pluto, bladeRF, HackRF, et USRP.
$ gcc gpssim.c -lm -O3 -o gps-sdr-sim
Afin d'utiliser des fichiers de mouvement utilisateur contenant plus de 30000 échantillons (à 10 Hz), la variable USER_MOTION_SIZE peut être définie au temps maximum du fichier de mouvement utilisateur en secondes. Il est conseillé de le faire via make afin que gps-sdr-bin puisse mettre à jour la taille si nécessaire. Exemple :
$ make USER_MOTION_SIZE=4000
Cette variable peut également être définie lors de la compilation directe avec GCC :
$ gcc gpssim.c -lm -O3 -o gps-sdr-sim -DUSER_MOTION_SIZE=4000
Une trajectoire définie par l'utilisateur peut être spécifiée soit dans un fichier CSV contenant les positions utilisateur en coordonnées géocentriques fixes (ECEF), soit dans un flux NMEA GGA. La fréquence d'échantillonnage du mouvement utilisateur doit être de 10 Hz. L'utilisateur peut également attribuer un emplacement statique directement via la ligne de commande.
L'utilisateur spécifie la constellation des satellites GPS via un fichier d'éphémérides de diffusion GPS. Le fichier d'éphémérides de diffusion quotidien (brdc) est une fusion des fichiers de navigation individuels des stations. L'archive pour le fichier quotidien peut être téléchargée depuis : https://cddis.nasa.gov/archive/gnss/data/daily/. L'accès à ce site nécessite une inscription gratuite.
Ces fichiers sont ensuite utilisés pour générer le pseudo-distance et l'effet Doppler simulés pour les satellites GPS en vue. Ces données de distance simulées sont ensuite utilisées pour générer les échantillons I/Q numérisés du signal GPS.
L'interface en ligne de commande bladeRF et ADALM-Pluto nécessite des paires I/Q stockées sous forme d'entiers signés 16 bits, tandis que hackrf_transfer et gps-sdr-sim-uhd.py prennent en charge les octets signés.
HackRF, bladeRF et ADALM-Pluto peuvent accepter le taux d'échantillonnage par défaut de 2,6 MHz, tandis que l'USRP2 nécessite un décimateur entier pair de 100 MHz, soit 2,5 MHz.
L'heure de début de la simulation peut être spécifiée si l'ensemble correspondant d'éphémérides est disponible. Sinon, la première heure d'éphéméride dans le fichier de navigation RINEX est sélectionnée.
La durée maximale de simulation est définie par USER_MOTION_SIZE pour éviter que le fichier de sortie ne devienne trop volumineux.
La taille du fichier de sortie peut être réduite en utilisant l'option « -b 1 » pour stocker quatre échantillons I/Q 1-bit dans un seul octet. Vous pouvez utiliser bladeplayer pour bladeRF afin de lire le fichier compressé.
Usage: gps-sdr-sim [options]
Options:
-e <gps_nav> Fichier de navigation RINEX pour les éphémérides GPS (requis)
-u <user_motion> Fichier de mouvement utilisateur au format ECEF x, y, z (mode dynamique)
-x <user_motion> Fichier de mouvement utilisateur au format lat, lon, hauteur (mode dynamique)
-g <nmea_gga> Flux NMEA GGA (mode dynamique)
-c <location> Coordonnées ECEF X,Y,Z en mètres (mode statique) p.ex. 3967283.15,1022538.18,4872414.48
-l <location> Lat, Lon, Hgt (mode statique) p.ex. 30.286502,120.032669,100
-L <wnslf,dn,dtslf> Événement de saut de seconde futur pour l'utilisateur en numéro de semaine GPS, numéro de jour, prochaine seconde intercalaire p.ex. 2347,3,19
-t <date,time> Heure de début du scénario AAAA/MM/JJ,hh:mm:ss
-T <date,time> Remplace TOC et TOE par l'heure de début du scénario
-d <duration> Durée [s] (max dynamique : 300, max statique : 86400)
-o <output> Fichier de données d'échantillonnage I/Q (par défaut : gpssim.bin; utilisez - pour stdout)
-s <frequency> Fréquence d'échantillonnage [Hz] (par défaut : 2600000)
-b <iq_bits> Format des données I/Q [1/8/16] (par défaut : 16)
-i Désactiver le délai ionosphérique pour le scénario spatial
-p [fixed_gain] Désactiver l'affaiblissement de propagation et maintenir le niveau de puissance constant
-v Afficher les détails sur les canaux simulés
Le mouvement utilisateur peut être spécifié en mode dynamique ou statique :
> 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
Le port TX d'une plateforme SDR particulière est connecté au récepteur GPS testé via un bloc DC et un atténuateur fixe de 50 à 60 dB.
Le fichier de signal GPS simulé, nommé « gpssim.bin », peut être chargé dans le bladeRF pour lecture comme ci-dessous :
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
Vous pouvez également exécuter ces commandes via l'option script de bladeRF-cli comme ci-dessous :
> bladeRF-cli -s bladerf.script
Les données de sortie doivent être des échantillons I/Q signés 8 bits.
> gps-sdr-sim -e brdc0010.22n -b 8
Vous pouvez utiliser l'outil hackrf_transfer du logiciel hôte 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
Vous pouvez également utiliser l'outil tx_samples_from_file inclus dans les exemples 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
Le périphérique ADALM-Pluto est censé avoir son interface réseau active et accessible via « pluto.local » par défaut.
Paramètres par défaut :
> plutoplayer -t gpssim.bin
Définir l'atténuation TX :
> plutoplayer -t gpssim.bin -a -30.0
Par défaut -20,0 dB. Plage applicable de 0,0 dB à -80,0 dB par pas de 0,25 dB.
Définir la largeur de bande RF :
> plutoplayer -t gpssim.bin -b 3.0
Par défaut 3,0 MHz. Plage applicable de 1,0 MHz à 5,0 MHz.
Copyright © 2015-2025 Takuji Ebinuma
Distribué sous la Licence MIT.