Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

FRS/GMRS トランシーバー受信機

この例では、MATLAB® および Communications Toolbox™ を使用してトランシーバー受信機を作成する方法について説明します。この例が従う特定の無線規格は、CTCSS (Continuous Tone-Coded Squelch System) に対する FRS/GMRS (Family Radio Service/General Mobile Radio Service) です。Communications Toolbox Support Package for RTL-SDR Radio を使用することで、シミュレートした信号、取得した信号、または商用のトランシーバーから受信した信号を使用できます。

この例は、FRS/GMRS の動作に対して米国規格を使用するように設計されています。これらの規格の技術的な仕様については、以下のリファレンのリストを参照してください。他の国での動作は、機能する場合と機能しない場合があります。

必要なソフトウェアとハードウェア

取得した信号を使用してこの例を実行するには、次のソフトウェアが必要です。

信号をリアルタイムに受信するには、次のハードウェアも必要になります。

  • RTL-SDR 無線機

  • トランシーバー

さらに次のソフトウェアも必要になります。

Communications Toolbox でサポートされる SDR プラットフォームのすべてのリストについては、ソフトウェア無線 (SDR) のソフトウェア無線のための MATLAB & Simulink ハードウェア サポートの節を参照してください。

背景

トランシーバーは、加入契約なしに短距離で通信する方法を提供します。携帯電話の普及によって人気は下がっていますが、トランシーバーは受信電波の不足や 1 分あたりの料金が高いので携帯電話は使いたくない場合に今でも役立っています。

最新のトランシーバーは、FRS/GMRS 規格で動作します。両方の規格では、UHF (極超短波) 帯域にある 462 または 467 MHz で周波数変調器 (FM) を使用します。

例の実行

例を開いて実行するには、[Open Script] ボタンをクリックします。次の情報を入力する必要があります。

  1. 受信期間の秒数

  2. 信号ソース (シミュレートされた信号、取得された信号または RTL-SDR 無線機)

  3. チャネル番号 (1 ~ 14)

  4. CTCSS コード (1 ~ 38、0 の場合 CTCSS フィルター処理なし)

  5. 受信信号の検出しきい値

この例では、受信したオーディオをコンピューターのスピーカーで再生します。

受信機の構造

次のブロック線図は、受信機コードの構造をまとめています。処理には 4 つの主要な部分があります。信号ソース、チャネル セレクター、FM 復調、および CTCSS 処理。

信号ソース

この例では、3 つの信号ソースを使用できます。

  1. "シミュレートされた信号": 240e3 サンプル/秒でシミュレートされた FRS/GMRS 信号

  2. "取得した信号": ファイルに書き込まれ、240e3 サンプル/秒で Baseband File Reader オブジェクトから取得される無線信号

  3. ''RTL-SDR 無線機'': 240e3 サンプル/秒の RTL-SDR 無線機。

信号ソースとして ''RTL-SDR 無線機'' を選択すると、このアプリケーションは RTL-SDR 無線機をコンピューターで検索し、それらのいずれかを信号ソースとして選択するように求めます。

チャネル セレクター

受信機は DC 成分を除去し、可変ゲインを受信信号に適用して、近似的に認識された振幅信号を取得し、干渉を緩和します。次に受信機は、ローパス チャネル分離フィルターを適用して、隣接チャネルからの信号を減らします。隣接チャネルの間の隙間は 25 kHz で、ベースバンド帯域幅は最大でも 12.5 kHz です。したがって、10 kHz にするカットオフ周波数を選択します。

次に、チャネル セレクターは、フィルター処理された信号の平均電力を計算します。これがしきい値 (既定値が 10% に設定されています) より大きい場合、チャネル セレクターは、受信した信号が正しいチャネルから生成されたものであると判断し、信号が通過することを許容します。帯域外信号の場合、チャネル分離フィルターは信号を減衰させますが、まだ FM 変調されており、変調信号は FM 復調の後にも存在します。このような信号を完全に除去するために、チャネル セレクターはすべてゼロを出力します。

FM 復調器

この例では、サンプル レートおよび最大周波数偏差がそれぞれ 240 kHz と 2.5 kHz に設定された FM Demodulator Baseband System object™ を使用します。

CTCSS

まず、間引きフィルターによってサンプリング レートが 240 kHz から 8 kHz へ変換されます。このレートは、ホスト コンピューターの出力オーディオ デバイスのネイティブ サンプリング レートの 1 つです。次に、CTCSS 復号化器は、Goertzel アルゴリズムを使用して CTCSS トーン周波数ごとの出力を計算して、最大出力でコードを出力します。Goertzel アルゴリズムは、事前定義された周波数 (つまり、FRS/GMRS で使用されるトーン コード周波数) での周波数成分を計算する効率的な方法を提供します。

スクリプトは、あらかじめ選択されているコードと、推定受信コードを比較します。2 つのコードが一致した場合、信号はオーディオ デバイスに渡されます。事前選択されたコードがゼロの場合、このブロックは、スケルチ システムが使用されていないことを示し、コードが使用されているかどうかにかかわらず、決定ブロックがチャネルでの信号をオーディオ デバイスに渡すことを示します。

最後に、カットオフ周波数が 260 Hz のハイパス フィルターは、最大周波数が 250 Hz の CTCSS トーンを除去します。audioDeviceWriter System object™ を使用して、コンピューターのスピーカーを通して受信信号を再生します。音が何も聞こえない場合は、オーディオ デバイス ライター オブジェクト audioPlayer の DeviceName プロパティを使用して別のデバイスを選択します。

コード例

受信機は、ユーザーの入力を求めて、変数を初期化します。次にループで、信号ソース、チャネル セレクター、FM 復調器、および CTCSS プロセッサを呼び出します。また、このループは、フレーム時間を使用して無線時間を追跡し、さらに信号のソースによって報告された失われたサンプルを追跡します。

信号ソースのレイテンシ出力は、サンプルが実際にいつ受信されたかを示し、実行中の受信機がリアルタイムにどれだけ近いかを判断するために使用できます。レイテンシ値 1 と、失われたサンプル値 0 は、システムがリアルタイムで実行されていることを示します。1 より大きいレイテンシの値は、受信機がリアルタイムにサンプルを処理できなかったことを示します。レイテンシは、フレーム数で報告されます。これは 1 から 128 までの値をとります。レイテンシが 128 より大きい場合、サンプルが失われます。

% Request user input from the command-line for application parameters
userInput = helperFRSReceiverUserInput;

% Calculate FRS receiver parameters based on the user input
[frsRxParams,sigSrc] = helperFRSReceiverConfig(userInput);

% Create channel selector components
dcBlocker = dsp.DCBlocker('Algorithm', 'Subtract mean');
agc = comm.AGC;
channelFilter = frsRxParams.ChannelFilter;

% Create FM demodulator
fmDemod = comm.FMDemodulator(...
  'SampleRate', frsRxParams.FrontEndSampleRate, ...
  'FrequencyDeviation', frsRxParams.FrequencyDeviation);

% Create CTCSS and audio output components
decimator = dsp.FIRDecimator(...
  frsRxParams.DecimationFactor, ...
  frsRxParams.DecimationNumerator);
decoder = helperFRSCTCSSDecoder( ...
  'MinimumBlockLength', frsRxParams.CTCSSDecodeBlockLength, ...
  'SampleRate', frsRxParams.AudioSampleRate);
audioFilter = frsRxParams.AudioFilter;
audioPlayer = audioDeviceWriter(frsRxParams.AudioSampleRate);

% Initialize radio time
radioTime = 0;

% Main loop
while radioTime < userInput.Duration
  % Receive baseband samples (Signal Source)
  if frsRxParams.isSourceRadio
    [rcv,~,lost,late] = sigSrc();
  else
    rcv = sigSrc();
    lost = 0;
    late = 1;
  end

  % Channel selector
  rcv = dcBlocker(rcv);
  outAGC = agc(rcv);
  outChanFilt = channelFilter(outAGC);
  rxAmp = mean(abs(outChanFilt));
  if rxAmp > frsRxParams.DetectionThreshold
    x = outChanFilt;
  else
    x = complex(single(zeros(frsRxParams.FrontEndSamplesPerFrame, 1)));
  end

  % FM demodulator
  y = fmDemod(x);

  % CTCSS decoder and audio output
  outRC = decimator(y);
  rcvdCode = decoder(outRC);
  if (rcvdCode == frsRxParams.CTCSSCode) || (frsRxParams.CTCSSCode == 0)
    rcvdSig = outRC;
  else
    rcvdSig = single(zeros(frsRxParams.AudioFrameLength, 1));
  end
  audioSig = audioFilter(rcvdSig);
  audioPlayer(audioSig);

  % Update radio time. If there were lost samples, add those too.
  radioTime = radioTime + frsRxParams.FrontEndFrameTime + ...
    double(lost)/frsRxParams.FrontEndSampleRate;
end

% Release the resources
release(fmDemod)
release(audioPlayer)
release(sigSrc)

その他の調査

CTCSS 復号化は、Goertzel アルゴリズムを使用して入力信号の DFT (離散フーリエ変換) を計算し、トーン周波数での出力を計算します。トーン周波数は互いによく似ているので (3 ~ 4 Hz しか違いません)、DFT のブロックの長さは、周波数解析に対して十分な分解能を提供する大きさでなければなりません。しかし、ブロックの長さを長くすると復号化が遅延する原因になります。たとえば、復号化器は 8 kHz サンプリング レートで動作するので、ブロックの長さが 16384 のときは 2 秒の遅延が発生します。これにより、検出能力とレイテンシの処理のトレードオフが生じます。最適なブロックの長さは、送信機および受信機の品質、送信機と受信機の距離、およびその他の要因によって異なる場合があります。関数 helperFRSReceiverConfig に移動し、CTCSSDecodeBlockLength フィールドの値を変更して、初期化関数のブロックの長さを変更することをお勧めします。これにより、トレードオフを観察して、送信機と受信機の両方の最適値を検出することができます。

物理レイヤーの実装の詳細については、次の関数や System object に関する情報を参照してください。

参考文献