
Simulador de Sinal GPS Definido por Software
O GPS-SDR-SIM gera fluxos de dados de sinal de banda base GPS, que podem ser convertidos em RF usando plataformas de rádio definido por software (SDR), como ADALM-Pluto, bladeRF, HackRF, e USRP.
$ gcc gpssim.c -lm -O3 -o gps-sdr-sim
Para usar arquivos de movimento de usuário com mais de 30000 amostras (a 10Hz), a variável USER_MOTION_SIZE pode ser definida para o tempo máximo do arquivo de movimento de usuário em segundos. É aconselhável fazer isso usando make para que o gps-sdr-bin possa atualizar o tamanho quando necessário. Ex.:
$ make USER_MOTION_SIZE=4000
Esta variável também pode ser definida ao compilar diretamente com GCC:
$ gcc gpssim.c -lm -O3 -o gps-sdr-sim -DUSER_MOTION_SIZE=4000
Uma trajetória definida pelo usuário pode ser especificada em um arquivo CSV, que contém as posições do usuário em coordenadas centradas na Terra e fixas (ECEF), ou em um fluxo NMEA GGA. A taxa de amostragem do movimento do usuário deve ser de 10Hz. O usuário também pode atribuir uma localização estática diretamente pela linha de comando.
O usuário especifica a constelação de satélites GPS através de um arquivo de efemérides de transmissão GPS. O arquivo diário de efemérides de transmissão GPS (brdc) é uma mesclagem dos arquivos de navegação individuais dos sites em um único arquivo. O arquivo diário pode ser baixado de: https://cddis.nasa.gov/archive/gnss/data/daily/. O acesso a este site requer registro, que é gratuito.
Esses arquivos são então usados para gerar o pseudorange e o Doppler simulados para os satélites GPS visíveis. Esses dados de alcance simulados são então usados para gerar as amostras I/Q digitalizadas para o sinal GPS.
A interface de linha de comando do bladeRF e ADALM-Pluto requer pares I/Q armazenados como inteiros com sinal de 16 bits, enquanto o hackrf_transfer e gps-sdr-sim-uhd.py suportam bytes com sinal.
HackRF, bladeRF e ADALM-Pluto podem aceitar a taxa de amostragem padrão de 2.6MHz, enquanto o USRP2 requer um decimador inteiro par de 100 MHz, ou seja, 2.5MHz.
O horário de início da simulação pode ser especificado se o conjunto correspondente de efemérides estiver disponível. Caso contrário, o primeiro horário de efeméride no arquivo de navegação RINEX é selecionado.
O tempo máximo de duração da simulação é definido por USER_MOTION_SIZE para evitar que o arquivo de saída fique muito grande.
O tamanho do arquivo de saída pode ser reduzido usando a opção '-b 1' para armazenar quatro amostras I/Q de 1 bit em um único byte. Você pode usar o bladeplayer para bladeRF para reproduzir o arquivo compactado.
Usage: gps-sdr-sim [options]
Options:
-e <gps_nav> RINEX navigation file for GPS ephemerides (required)
-u <user_motion> User motion file in ECEF x, y, z format (dynamic mode)
-x <user_motion> User motion file in lat, lon, height format (dynamic mode)
-g <nmea_gga> NMEA GGA stream (dynamic mode)
-c <location> ECEF X,Y,Z in meters (static mode) e.g. 3967283.15,1022538.18,4872414.48
-l <location> Lat,Lon,Hgt (static mode) e.g. 30.286502,120.032669,100
-L <wnslf,dn,dtslf> User leap future event in GPS week number, day number, next leap second e.g. 2347,3,19
-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] (dynamic mode max: 300 static mode max: 86400)
-o <output> I/Q sampling data file (default: gpssim.bin ; use - for stdout)
-s <frequency> Sampling frequency [Hz] (default: 2600000)
-b <iq_bits> I/Q data format [1/8/16] (default: 16)
-i Disable ionospheric delay for spacecraft scenario
-p [fixed_gain] Disable path loss and hold power level constant
-v Show details about simulated channels
O movimento do usuário pode ser especificado no modo dinâmico ou estático:
> 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
A porta TX de uma plataforma SDR específica é conectada ao receptor GPS em teste através de um bloqueio DC e um atenuador fixo de 50-60dB.
O arquivo de sinal GPS simulado, chamado 'gpssim.bin', pode ser carregado no bladeRF para reprodução conforme mostrado abaixo:
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
Você também pode executar esses comandos através da opção de script bladeRF-cli como abaixo:
> bladeRF-cli -s bladerf.script
Os dados de saída devem ser amostras I/Q com sinal de 8 bits.
> gps-sdr-sim -e brdc0010.22n -b 8
Você pode usar a ferramenta hackrf_transfer no software host do 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
Você também pode usar a ferramenta tx_samples_from_file incluída nos exemplos do 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
Espera-se que o dispositivo ADALM-Pluto tenha sua interface de rede ativa e operacional e seja acessível via 'pluto.local' por padrão.
Configurações padrão:
> plutoplayer -t gpssim.bin
Definir atenuação TX:
> plutoplayer -t gpssim.bin -a -30.0
Padrão -20.0dB. Faixa aplicável de 0.0dB a -80.0dB em passos de 0.25dB.
Definir largura de banda RF:
> plutoplayer -t gpssim.bin -b 3.0
Padrão 3.0MHz. Faixa aplicável de 1.0MHz a 5.0MHz.
Copyright © 2015-2025 Takuji Ebinuma
Distribuído sob a Licença MIT.