このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
FM ブロードキャスト受信機
この例では、MATLAB® および Communications Toolbox™ を使用して FM モノラルまたはステレオ受信機を作成する方法について説明します。取得した信号を使用することも、RTL-SDR 無線機、ADALM-PLUTO 無線機、または USRP™ 無線機を使用してリアルタイムに信号を受信することもできます。
必要なソフトウェアとハードウェア
ファイルから記録したデータを使用してこの例を実行するには、Communications Toolbox™ が必要です。
信号をリアルタイムで受信するには、さらに、以下の SDR デバイスのいずれかと、対応するソフトウェア アドオンが必要です。
RTL-SDR 無線機と Communications Toolbox Support Package for RTL-SDR Radio アドオン
ADALM-PLUTO 無線機と Communications Toolbox Support Package for Analog Devices® ADALM-PLUTO Radio アドオン
USRP 無線機と Communications Toolbox Support Package for USRP® Radio アドオン
詳細については、"Software-Defined Radio (SDR) 情報ページ" を参照してください。
背景
FM 放送は、周波数変調 (FM) を使用して、ラジオ放送チャネルで忠実度の高い音声送信を提供します。プリエンファシスおよびディエンファシス フィルターが、高い音声周波数でのノイズの影響を軽減するために使用されます。ステレオ符号化によって、同じ FM チャネル [ 1 ] で、左右両方のオーディオ チャネルの同時送信が可能になります。
例の実行
この例を実行するには、次の情報を入力する必要があります。
受信期間の秒数
信号ソース (取得されたデータ、RTL-SDR 無線機、ADALM-PLUTO 無線機、または USRP 無線機)
FM チャネル周波数
この例では、受信したオーディオをコンピューターのスピーカーで再生します。
メモ: この例では、既定の PlutoSDR 調整の範囲外である中心周波数を利用します。制約のある調整の範囲外で ADALM-PLUTO 無線機を使用するには、MATLAB® コマンド ラインで、入力引数として 'AD9364'
を使用し、configurePlutoRadio
を実行します。
受信機の構造
FM Broadcast Demodulator Baseband System object™ は、228 kHz の入力サンプリング レートを 45.6 kHz に変換します。これは、ホスト コンピューターのオーディオ デバイスのサンプリング レートです。米国の FM 放送の規格に従って、ディエンファシス ローパス フィルターの時定数が 75 マイクロ秒に設定されています。この例では、受信されたモノラル信号を処理します。復調器は、ステレオ信号も処理できます。
ステレオ復号化を実行するために、FM Broadcast Demodulator Baseband オブジェクトではピーク フィルターを使用して 19 kHz パイロット トーンを選択します。これは、38 kHz の搬送波を作成する基になります。得られた搬送波信号を使用して、FM Broadcast Demodulator Baseband ブロックは、中心が 38 kHz の L-R 信号をベースバンドにダウンコンバートします。その後に、L-R および L+R 信号が 75 マイクロ秒ディエンファシス フィルターを通過します。FM Broadcast Demodulator Baseband ブロックが L と R 信号を分離し、それらを 45.6 kHz 音声信号に変換します。
コード例
受信機は、ユーザーの入力を求めて、変数を初期化します。次にループで、信号ソースと FM ブロードキャスト受信機を呼び出します。また、このループは、フレーム時間を使用して無線時間を追跡し、さらに信号のソースによって報告された失われたサンプルを追跡します。
信号ソースのレイテンシ出力は、サンプルが実際にいつ受信されたかを示し、実行中の受信機がリアルタイムにどれだけ近いかを判断するために使用できます。レイテンシ値 1 と、失われたサンプル値 0 は、システムがリアルタイムで実行されていることを示します。1 より大きいレイテンシの値は、受信機がリアルタイムにサンプルを処理できなかったことを示します。レイテンシは、フレーム数で報告されます。これは 1 から 128 までの値をとります。レイテンシが 128 より大きい場合、サンプルが失われます。
%For the option to change default settings, set |cmdlineInput| to 1. cmdlineInput = 0; if cmdlineInput % Request user input from the command-line for application parameters userInput = helperFMUserInput; else load('defaultinputsFM.mat'); end % Calculate FM system parameters based on the user input [fmRxParams,sigSrc] = helperFMConfig(userInput); % Create FM broadcast receiver object and configure based on user input fmBroadcastDemod = comm.FMBroadcastDemodulator(... 'SampleRate', fmRxParams.FrontEndSampleRate, ... 'FrequencyDeviation', fmRxParams.FrequencyDeviation, ... 'FilterTimeConstant', fmRxParams.FilterTimeConstant, ... 'AudioSampleRate', fmRxParams.AudioSampleRate, ... 'Stereo', false); % Create audio player player = audioDeviceWriter('SampleRate',fmRxParams.AudioSampleRate); % Initialize radio time radioTime = 0; % Main loop while radioTime < userInput.Duration % Receive baseband samples (Signal Source) if fmRxParams.isSourceRadio if fmRxParams.isSourcePlutoSDR rcv = sigSrc(); lost = 0; late = 1; elseif fmRxParams.isSourceUsrpRadio rcv= sigSrc(); lost = 0; else [rcv,~,lost,late] = sigSrc(); end else rcv = sigSrc(); lost = 0; late = 1; end % Demodulate FM broadcast signals and play the decoded audio audioSig = fmBroadcastDemod(rcv); player(audioSig); % Update radio time. If there were lost samples, add those too. radioTime = radioTime + fmRxParams.FrontEndFrameTime + ... double(lost)/fmRxParams.FrontEndSampleRate; end % Release the audio and the signal source release(sigSrc) release(fmBroadcastDemod) release(player)
その他の調査
例をさらに調べるために、RTL-SDR 無線機、ADALM-PLUTO 無線機、または USRP 無線機の中心周波数を変えて、他のラジオ局を聴取することもできます。
FM 復調器オブジェクトの Stereo プロパティを true に設定することで、信号がステレオ形式で処理され、音質を比較できます。
システム パラメーターの詳細については、次の関数についての情報を参照してください。
FMReceiverExampleApp ユーザー インターフェイスを使用して、FM 信号をさらに調査することができます。このアプリでは、信号ソースを選択して、RTL-SDR 無線機、ADALM-PLUTO 無線機、または USRP 無線機の中心周波数を変更できます。アプリを起動するには、MATLAB コマンド ウィンドウで FMReceiverExampleApp と入力します。このユーザー インターフェイスは、次の図に示されています。