Main Content

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

RDS/RBDS および RadioText Plus (RT+) FM 受信機

この例では、RDS または RBDS 標準、およびオプションで RadioText Plus (RT+) 標準を使用する FM ラジオ放送局からプログラムや曲の情報を抽出する方法を示します。取得した信号を使用するか、RTL-SDR 無線機、ADALM-PLUTO 無線機、または USRP B200/B210 無線機を使用してリアルタイムで無線信号を受信できます。

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

ファイルから記録したデータを使用してこの例を実行するには、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) 情報ページ" を参照してください。

背景

RBDS と RDS は、追加情報で FM ラジオ信号を補足する方法を指定する非常によく似た標準です。RBDS は北米で使用されているのに対し、RDS はもともと欧州で使用され、国際標準に発展しました。RBDS と RDS は次の 3 層で構成されます。

  • 物理レイヤー (第 1 層)

  • データ リンク層 (第 2 層)

  • セッションとプレゼンテーション層 (第 3 層)

物理レイヤー (第 1 層)

RBDSPhyDecoder ヘルパーは、ファイルから取得した信号または無線機からのライブ信号を受信し、次のステップを実行します。

  • FM 復調: FM 信号が復調されると、RDS/RBDS 信号は 57 kHz +/- 2.4 kHz 帯域に存在します。RDS/RBDS 信号は比較的低いパワーで送信されるため、次の図のように FM スペクトルに表示されない場合もあることに注意してください。

FM 信号には、19 kHz のパイロット トーンが含まれます。これは、57 kHz で RDS/RBDS 信号、38 kHz でステレオ オーディオの同期復調の位相基準と周波数基準として使用できます。38 kHz および 57 kHz のパイロット トーンは 19 kHz のパイロット トーンの周波数を 2 倍および 3 倍することで生成できます [2]

RDS/RBDS 信号の同期復調の処理手順は次のとおりです。

  • バンドパス フィルター処理: PHY 受信機は、バンドパス フィルター処理を 19 kHz と 57 kHz で実行して、パイロット トーンと RDS/RBDS 信号をそれぞれ分離します。

  • 周波数の 3 倍増: 19 kHz パイロット トーンの複素表現を 3 乗に増加することで、周波数を 3 倍にして 57 kHz パイロット トーンを取得します。

  • AM 復調: RDS および RBDS シンボルが 1187.5 Hz レートで生成され、57 kHz 搬送波に AM 変調されます。57 kHz RDS/RBDS 信号は、周波数と位相が固定された 57 kHz 搬送波でコヒーレントに復調できます。通常、同期復調には、周波数を 3 倍にした 19 kHz パイロット トーンで十分です。次の図は、19 kHz と 57 kHz のパイロット トーン、57 kHz RDS/RBDS 信号、および AM 復調されたベースバンド RDS/RBDS 信号を示しています。

同時に、57 kHz RDS/RBDS 信号が 19 kHz パイロット トーンからの時変位相オフセットと、その周波数が 3 倍されたバージョンを示している複数の FM 放送局が存在します。PHY 受信機には、Costas ループが含まれ、このような時変位相オフセットを補正します。

  • Costas ループ: Costas ループは、57 kHz の正弦による復調と 57 kHz の余弦による復調の 2 つの直交 AM 復調を実行します。受信信号のサンプリング レートは、57 kHz サイクルあたり 4 つのサンプルを提供する 228 kHz として注意深く選択されます。したがって、57 kHz パイロット トーンの 1 つのサンプルの遅延の結果が、4 分の 1 波長位相オフセットとなり、正弦波から余弦波の生成が可能になります。正弦復調された信号は、同期復調出力に対応します。余弦復調された信号は、位相誤差の検出に使用されます。正弦波/余弦波がある 57 kHz RDS/RBDS 信号の積は、以下の節で指定されたフィルターを使用して、ローパス フィルター処理されます。[1] の第 1.7 節。2 つのフィルター出力の積が誤差信号になります。これが大きくなるほど、19 kHz パイロット トーンの遅延が大きくなり、余弦ベースの復調器のように動作します。

  • クロック抽出: 二相位相シンボル復号化を実行するため、1187.5 Hz の RDS/RBDS シンボル レートと一致するクロックが、19 kHz パイロット トーンから抽出されます。1187.5 Hz x 16 = 19 kHz を意味します。周波数オフセットを考慮するため、周波数分割は 19 kHz パイロット トーンからクロックを抽出するために使用されます。周波数分割操作は複数の正しい解を提供するため、ベースバンド RDS/RBDS 信号は、目的の出力の決定を支援する学習データとして機能します。

  • 二相シンボル復号化器: RDS および RBDS は、一般にマンチェスター符号化として知られている二相位相レベル (bi- ϕ -L) 符号化を使用します。各クロック サイクルで、RDS/RBDS シンボルは、2 つの逆の振幅値 (正の値の後に負の値、または負の値の後に正の値) を取ります。二相位相シンボル復号化器は、2 番目の振幅レベルを無効にして、各シンボルがクロック サイクル全体で同じ振幅レベルを保持できるようにします。新しいクロック幅の振幅レベルは、シンボルのビット表現に対応します。以下のプロットは、[1] の図 2 の波形 #1 ~ 6 に対応しています。

各シンボルのビット値を取得するため、波形が各クロック サイクルで統合され、結果がゼロ (スライサー) と比較されます。

  • 差動復号化: 最後に、送信機で差分符号化を元に戻すためにビットが差動復号化されます。

データ リンク層 (第 2 層)

第 2 層は、RBDSDataLinkDecoder ヘルパーを使用して実装されます。この層は、同期と誤り訂正を行います。

PHY レイヤーのビット出力は、4 つの 26 ビット ブロックで構成される 104 ビット グループで論理的に構成されます。各ブロックには、16 ビットの情報ワードと 10 パリティ ビットが含まれます ([1] の Figure 8 を参照)。異なる 10 ビット オフセット ワードは、各ブロックのパリティ ビットに剰余 2 が加算されます。

  • 同期: 最初に、104 ビットのスライディング ウィンドウを使用してブロック境界とグループ境界が徹底的に求められます。104 ビット ウィンドウごとに、各 26 ビット ブロックの最後の 10 ビットで 4 つのオフセット ワードが求められます。オフセット ワードは、RBDSErrorDetection ヘルパーによってビット エラーが検出されない場合に識別されます。オフセット ワードが識別されると、グループレベルの同期が達成され、徹底的なスライディング ウィンドウの処理が停止します。その後、次の 104 ビットは次のグループとして扱われます。

これ以降のグループがビットの誤りを含んでおり、期待される位置でオフセット ワードを識別できない場合、同期が失われる場合があります。この場合、第 2 層は最初の情報ワード (16 ビット) が常にすべてのビット グループで同じという事実を利用して、1 ビットの同期のずれの可能性を最初に調査します。最初の情報ワードが (左または右方向に) 1 ビット外れているのが見つかった場合、同期が保持され、グループ境界はそれに応じて調整されます。ビットの誤りが 25 グループ受信する間続き、同時にこのような左または右方向の 1 ビットのシフトを使用しても同期を再確立できない場合、同期が失われ、第 2 層は徹底的なスライディング ウィンドウベースの検索と同期に再度入ります。

  • 誤り訂正: RDS/RBDS の誤り訂正コードが、(341, 331) から (26, 16) 巡回符号に短縮されました。RBDSErrorCorrection ヘルパーは、[1] の付録 B に記載されているシフトレジスタ方式を使用します。

セッションとプレゼンテーション層 (第 3 層)

第 2 層でパリティ/オフセット ビットが削除されるため、第 3 層は 4 つの 16 ビット ブロックで構成される 64 ビットのグループを受信します。最大 32 の異なるグループ タイプが存在し、それぞれに 0 から 15 の数字と 'A' または 'B' の文字のラベル (0B、2A、3A など) が付けられます。各グループの書式は、固定にするか、このグループが Open Data Application (ODA、[3] のリストを参照) に割り当てられている場合は、抽象にすることができます。

第 3 層は、RBDSSessionDecoder ヘルパーを使用して実装されます。このオブジェクトは、0A、0B、2A、2B、3A、4A、10A の固定書式グループ タイプの復号化をサポートしています。

  • 0A と 0B は、一般的にスクロール テキスト方式で変更する 8 文字の文字列を伝えます。

  • 2A と 2B はより長い 64 文字または 32 文字の文字列を伝えます。

  • 3A は ODA を登録し、それら専用の抽象書式グループ タイプを指定します。

  • 4A はシステムの時間を伝えます。

  • 10A は、プログラム タイプ 'Sports' の 'Football' のように、プログラム タイプをさらに分類します。

ODA については、RDS/RBDS 受信機は RadioText Plus (RT+) の復号化をサポートします。この ODA は、グループ タイプ 2A または 2B の長い 32 文字または 64 文字の文字列を 2 つの具体的なコンテンツ タイプ (アーティストや曲など) に分類できます。

ODA の実装の登録: RadioText Plus (RT+)

RDS/RBDS 受信機は拡張可能です。ODA の実装は、RBDSSessionDecoder ヘルパーの関数 registerODA' を使用して指定できます。この関数は、16 進数の ODA ID (ODA ID については [3] に記載) を受け入れ、メインの ODA グループ タイプおよび 3A グループ タイプの ODA 固有部分を処理する関数へのハンドルを受け入れます。たとえば、セッション復号化器 RBDSSessionDecoder オブジェクトは、次のコードを使用して RadioText Plus (RT+) 用に拡張できます。

rtID = '4BD7'; % hexadecimal ID of RadioText Plus (RT+)
registerODA(sessionDecoder, rtID, @RadioTextPlusMainGroup,
@RadioTextPlus3A);

コード例の実行

補助関数 helperRBDSInit を使用して、RDS/RBDS システム パラメーターを設定します。コメント化されたコード行は、取得したデータやさまざまな SDR から例を実行するための代替の設定を示しています。補助関数 helperRBDSConfig を使用して、RDS/RBDS システムを構成します。

userInput = helperRBDSInit();
userInput.Duration = 10.8;
% userInput.SignalSource = 'File';
% userInput.SignalFilename = 'rbds_capture.bb';
% userInput.SignalSource = 'RTL-SDR';
% userInput.CenterFrequency = 98.5e6;
% userInput.SignalSource = 'ADALM-PLUTO';
% userInput.CenterFrequency = 98.5e6;
% userInput.SignalSource = 'USRP';
% userInput.CenterFrequency = 98.5e6;

[rbdsParam, sigSrc] = helperRBDSConfig(userInput);

RDS/RBDS パラメーターを使用して、FM ブロードキャスト受信機 System object™ を作成および構成します。

fmBroadcastDemod = comm.FMBroadcastDemodulator(...
    'SampleRate',228e3, ...
    'FrequencyDeviation',rbdsParam.FrequencyDeviation, ...
    'FilterTimeConstant',rbdsParam.FilterTimeConstant, ...
    'AudioSampleRate',rbdsParam.AudioSampleRate, ...
    'Stereo',true);

% Create audio player
player = audioDeviceWriter('SampleRate',rbdsParam.AudioSampleRate);

% Layer 2 object
datalinkDecoder = RBDSDataLinkDecoder();

% Layer 3 object
sessionDecoder  = RBDSSessionDecoder();
% register processing implementation for RadioText Plus (RT+) ODA:
rtID = '4BD7';
registerODA( ...
    sessionDecoder,rtID,@RadioTextPlusMainGroup,@RadioTextPlus3A);

% Create the data viewer object
viewer = helperRBDSViewer();

% Start the viewer and initialize radio time
start(viewer)
radioTime = 0;
% Main loop
while radioTime < rbdsParam.Duration
    % Receive baseband samples (Signal Source)
    rcv = sigSrc();

    % Demodulate FM broadcast signals and play the decoded audio
    audioSig = fmBroadcastDemod(rcv);
    player(audioSig);

    % Process physical layer (Layer 1)
    bitsPHY = RBDSPhyDecoder(rcv, rbdsParam);

    % Process data-link layer (Layer 2)
    [enabled,iw1,iw2,iw3,iw4] = datalinkDecoder(bitsPHY);

    % Process session and presentation layer (Layer 3)
    outStruct = sessionDecoder(enabled,iw1,iw2,iw3,iw4);

    % View results packet contents (Data Viewer)
    update(viewer, outStruct);

    % Update radio time
    radioTime = radioTime + rbdsParam.FrameDuration;
end

% Stop the viewer and release the signal source and audio writer
stop(viewer);

Figure RDS / RBDS and RadioText Plus (RT+) Viewer contains an object of type uicontainer.

release(sigSrc);
release(player);

結果の表示

このウィンドウには、処理された RDS/RBDS データが表示されます。

  • Basic RDS/RBDS information:

  • 最初のフィールドにはプログラム タイプが含まれます。これは、すべてのグループ タイプの 2 番目の情報ワードによって伝えられます。10A グループ タイプが受信されると、1 番目のフィールドは Sports \ Football のように、さらなる特性も提供します。

  • 2 番目のフィールドには、0A/0B グループによって伝えられる 8 文字のテキストが含まれます。送信文字列が 8 文字を超える場合、表示されるテキストは折り返されます。

  • 3 番目のフィールドには、2A/2B グループ タイプによって伝えられる 32/64 文字の長いテキストが含まれます。

  • RadioText Plus (RT+): このセクションは、任意の 3A グループが、RadioText Plus (RT+) ODA が 11A などの抽象書式グループ タイプを使用していることを示す場合に入力されます。抽象グループ タイプを受信すると、2A/2B のグループによって伝えられる 32/64 文字のテキストが 2 つの部分文字列に分割されます。2 つのラベルが部分文字列を特徴づけるために更新されます (アーティストや曲など)。

  • Group type receptions: この表からは、放送局から受信したグループ タイプと周波数を表示したヒストグラムが得られます。結果として、ユーザーはグラフィカルなビューアーでは示されないより詳細な情報のログ データ (具体的には、4A でのシステム時間、0A での代替周波数など) を確認できます。

  • Open data applications (ODA): いずれかの 3A グループ タイプが受信されると、この ODA リストには、受信した各 ODA の名前と専用グループ タイプが表示されます。

その他の調査

RBDSExampleApp アプリを使用して、RDS/RBDS 信号をさらに調査することができます。RBDSExampleApp アプリを使用すると、次のことができます。

  • 信号のソースを選択する (取得したファイルまたは RTL-SDR、ADALM-PLUTO または USRP)。

  • 放送局の周波数を指定する (RTL-SDR、ADALM-PLUTO または USRP の場合)。

  • 生成された C コードを通じて RDS/RBDS 受信機の第 1 層と第 2 層を実行する。これらは RDS/RBDS チェーンの最も時間のかかる部分で、コードを生成することでリアルタイム処理の実現に役立ちます。

  • 音声再生を無効にする。

  • 受信した信号を解析し、復号化処理を図示するスペクトル アナライザーや時間スコープなどのスコープを開く。スコープを有効にすると、追加の計算作業が必要となりリアルタイムの復号化を妨げる場合があります。この場合、RDS/RBDS 復号化は、ファイルから読み込んで取得した信号以外では正常に動作しない可能性があります。

  • [Log data to file] を選択して、他のグループ タイプから RBDS フィールドをログ記録する。

以下の関数と System object で、RBDS の実装、初期化、および構成を調査できます。

参考文献

1.National Radio Systems Committee, United States RBDS standard, April 1998

2.Der, Lawrence."Frequency Modulation (FM) Tutorial".Silicon Laboratories Inc.

3.National Radio Systems Committee, List of ODA Applications in RDS

4.RadioText Plus (RT+) Specification

5.Joseph P. Hoffbeck, "Teaching Communication Systems with Simulink® and the USRP", ASEE Annual Conference, San Antonio, TX, June 2012

参考

オブジェクト

関連するトピック

外部の Web サイト