
ソフトウェア定義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変数をユーザーモーションファイルの最大時間(秒)に設定できます。makeを使用してこれを行うことをお勧めします。これにより、gps-sdr-binが必要に応じてサイズを更新できます。例:
$ make USER_MOTION_SIZE=4000
この変数は、GCCで直接コンパイルする場合にも設定できます:
$ gcc gpssim.c -lm -O3 -o gps-sdr-sim -DUSER_MOTION_SIZE=4000
ユーザー定義の軌道は、地球中心地球固定(ECEF)ユーザー位置を含むCSVファイル、またはNMEA GGAストリームのいずれかで指定できます。ユーザーモーションのサンプリングレートは10Hzでなければなりません。ユーザーはコマンドラインから直接静的な位置を指定することもできます。
ユーザーはGPS放送暦ファイルを介してGPS衛星コンステレーションを指定します。毎日のGPS放送暦ファイル(brdc)は、個々のサイトの航法ファイルを1つにマージしたものです。毎日のファイルのアーカイブは、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サンプルを1バイトに格納することで削減できます。圧縮ファイルを再生するには、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の下で配布されています。