
소프트웨어 정의 GPS 신호 시뮬레이터
GPS-SDR-SIM은 GPS 기저대역 신호 데이터 스트림을 생성하며, 이는 ADALM-Pluto, bladeRF, HackRF, USRP 같은 소프트웨어 정의 라디오(SDR) 플랫폼을 사용하여 RF로 변환할 수 있습니다.
$ gcc gpssim.c -lm -O3 -o gps-sdr-sim
30000개 이상의 샘플(10Hz 기준)을 포함하는 사용자 모션 파일을 사용하려면, USER_MOTION_SIZE 변수를 사용자 모션 파일의 최대 시간(초)으로 설정할 수 있습니다. 필요한 경우 gps-sdr-bin이 크기를 업데이트할 수 있도록 make를 사용하여 설정하는 것이 좋습니다. 예:
$ make USER_MOTION_SIZE=4000
이 변수는 GCC로 직접 컴파일할 때도 설정할 수 있습니다:
$ gcc gpssim.c -lm -O3 -o gps-sdr-sim -DUSER_MOTION_SIZE=4000
사용자 정의 궤적은 CSV 파일(지구 중심 지구 고정(ECEF) 사용자 위치 포함) 또는 NMEA GGA 스트림으로 지정할 수 있습니다. 사용자 모션의 샘플링 속도는 10Hz여야 합니다. 또한 명령줄을 통해 정적 위치를 직접 할당할 수 있습니다.
사용자는 GPS 방송 천력 파일을 통해 GPS 위성 별자리를 지정합니다. 일일 GPS 방송 천력 파일(brdc)은 개별 사이트 항법 파일을 하나로 합친 것입니다. 일일 파일 아카이브는 https://cddis.nasa.gov/archive/gnss/data/daily/ 에서 다운로드할 수 있습니다. 이 사이트에 접근하려면 등록이 필요하며 무료입니다.
이 파일들은 가시 GPS 위성에 대한 시뮬레이션된 의사거리와 도플러를 생성하는 데 사용됩니다. 이 시뮬레이션된 거리 데이터는 GPS 신호에 대한 디지털화된 I/Q 샘플을 생성하는 데 사용됩니다.
bladeRF 및 ADALM-Pluto 명령줄 인터페이스는 부호 있는 16비트 정수로 저장된 I/Q 쌍을 필요로 하는 반면, hackrf_transfer 및 gps-sdr-sim-uhd.py는 부호 있는 바이트를 지원합니다.
HackRF, bladeRF 및 ADALM-Pluto는 기본 샘플 속도 2.6MHz를 수용할 수 있으며, USRP2는 100MHz의 짝수 정수 디시메이터(예: 2.5MHz)가 필요합니다.
시뮬레이션 시작 시간은 해당 천력이 제공되는 경우 지정할 수 있습니다. 그렇지 않으면 RINEX 항법 파일에서 첫 번째 천력 시간이 선택됩니다.
최대 시뮬레이션 지속 시간은 출력 파일이 너무 커지는 것을 방지하기 위해 USER_MOTION_SIZE에 의해 정의됩니다.
출력 파일 크기는 "-b 1" 옵션을 사용하여 4개의 1비트 I/Q 샘플을 단일 바이트에 저장하여 줄일 수 있습니다. 압축된 파일을 재생하려면 bladeRF용 bladeplayer를 사용할 수 있습니다.
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
사용자 모션은 동적 모드 또는 정적 모드로 지정할 수 있습니다:
> 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
특정 SDR 플랫폼의 TX 포트는 DC 블록과 고정 50-60dB 감쇠기를 통해 테스트 중인 GPS 수신기에 연결됩니다.
시뮬레이션된 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 호스트 소프트웨어에서 hackrf_transfer 도구를 사용할 수 있습니다.
> 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
UHD 예제에 포함된 tx_samples_from_file 도구를 사용할 수도 있습니다:
> 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.0dB. 적용 범위 0.0dB ~ -80.0dB, 0.25dB 단계.
RF 대역폭 설정:
> plutoplayer -t gpssim.bin -b 3.0
기본값 3.0MHz. 적용 범위 1.0MHz ~ 5.0MHz.
Copyright © 2015-2025 Takuji Ebinuma
MIT License에 따라 배포됩니다.