SDRでGNSS信号を送る
LimeSDR XTRX / Mini 2.0 でGPS・QZSSのL1 C/Aを生成 — 受信機に「ちょうどいい」信号強度を設計する
送信リンクバジェット — SDR出力から受信機入力まで
数値は教材用の目安(最大出力は周波数・設定・個体で変わる)。ケーブル・コネクタ損失として一律1dBを含む。実衛星の受信レベルは約−130dBm(dBと信号強度参照)。
周波数精度 — そのボードの信号を受信機は見つけられるか
基準クロックの誤差(ppm)はそのまま搬送波周波数のズレになる: Δf = 1575.42MHz × ppm。受信機の捕捉サーチはドップラー±5kHz程度を想定しているので、これを大きく超えるとサーチ範囲拡大や周波数補正が必要になる(捕捉の2次元サーチ参照)。
ワークフロー — gps-sdr-simでL1 C/Aを作って再生する
定番の流れ: ① IGS等から航法データ(RINEXファイル brdc)を入手 → ② gps-sdr-sim -e brdcXXX.24n -l 35.68,139.77,50 -s 2600000 のように任意の位置・時刻を指定してI/Qファイルを生成 → ③ LimeSuite(limeplayer)やSoapySDRでSDRから再生。受信機には「東京駅にいる」ように見える信号が届きます。
QZSS(みちびき)はL1 C/AがGPS互換(PRN 193〜)なので、対応シミュレータでは同じ枠組みでQZSS衛星も生成できます。生成信号のサンプルレートは2.6Msps程度でC/A帯域(±1MHz)をカバーできます — LimeSDR Mini 2.0/XTRXなら余裕です。
用途は受信機の動作確認・タイムスタンプのテスト・耐妨害の研究など。他人の受信機を欺く行為(スプーフィング)は犯罪です。自分の装置に、閉じた経路で。
なぜ130dBも減衰させるのか — 「強すぎる信号」の何が悪いか
SDRの出力0dBmは、実衛星の−130dBmの10¹³倍(10兆倍)です。ケーブル直結でそのまま入れると: ①受信機のLNAやAGCが飽和して逆にまともに動かない、②漏れ電波ですら周囲の本物のGNSS受信を妨害する(カーナビ・スマホ・基地局の時刻同期まで!)、③最悪フロントエンドを壊す。だからTXゲインを絞った上で、固定減衰器(20dB/30dB品を直列に)で−120〜−135dBmまで落とすのが正しい作法です。
受信機側の見え方はC/N₀で確認します: 実衛星相当なら40dB-Hz台。50dB-Hz後半に張り付いていたら強すぎ。dBと信号強度のリンクバジェットと同じ考え方が、そのまま実験設計になります。
実務のコツ — ハマりどころ
DCブロック必須: GNSS受信機のアンテナ端子はアクティブアンテナ用に3〜5Vのバイアス電圧を出しています。SDRのTX端子に直結するとこの電圧が流れ込むので、DCブロック(数百円のコンデンサ内蔵コネクタ)を必ず挟むこと。
スマホのテストはシールドボックス: スマホは内蔵アンテナなのでケーブル直結ができません。合法にテストするなら電波暗箱(シールドボックス)内で微弱に放射します。
時刻に注意: 過去日時の信号を掴んだ受信機は時計が過去に飛びます。GNSS時刻同期している機器(PC、基地局系)を同じ受信系につながないこと。
受信で先に遊ぶのも手: 送信環境を作る前に、RTL-SDR+GNSS-SDRで本物のL1を受信・解読してみると、受信の流れの理解が一気に深まります。