Main Content

comm.RBDSWaveformGenerator

説明

comm.RBDSWaveformGenerator System object™ は、MATLAB® で構成可能な規格準拠のベースバンド RDS/RBDS 波形を生成します。RDS/RBDS 波形は、曲名やアーティスト名、ラジオ ステーションの説明などの追加のテキスト情報で FM ラジオ ステーションを補足します。RDS/RBDS 信号は、ベースバンド FM 無線信号の 57 kHz の帯域にあります。

このオブジェクトを使用することで、RadioText Plus (RT+) 情報を含む波形を生成し、オープン データ アプリケーション (ODA) のカスタム符号化の実装を登録することができます。時間、データ、およびプログラム タイプも指定できます。オブジェクトは短いスクロールする 8 文字のテキスト、および長い 32 文字または 64 文字のテキストをサポートします。

ベースバンド RDS/RBDS 波形を生成するには、次を行います。

  1. comm.RBDSWaveformGenerator オブジェクトを作成し、そのプロパティを設定します。

  2. 関数と同様に、引数を指定してオブジェクトを呼び出します。

System object の機能の詳細については、System object とはを参照してください。

作成

説明

rbdsgen = comm.RBDSWaveformGenerator は、既定のプロパティを使用して RDS/RBDS 波形発生器オブジェクト rbdsgen を作成します。

rbdsgen = comm.RBDSWaveformGenerator(Name=Value) は、名前と値の引数を使用して追加プロパティを指定します。たとえば、comm.RBDSWaveformGenerator(GroupsPerFrame="20",SamplesPerSymbol="10") は、出力フレームごとに 20 個のグループとシンボルごとに 10 個のサンプルを必要とする RDS/RBDS 波形発生器を作成します。

プロパティ

すべて展開する

特に指定がない限り、プロパティは "調整不可能" です。つまり、オブジェクトの呼び出し後に値を変更することはできません。オブジェクトは呼び出すとロックされ、ロックを解除するには関数 release を使用します。

プロパティが "調整可能" の場合、その値をいつでも変更できます。

プロパティ値の変更の詳細については、System object を使用した MATLAB でのシステム設計を参照してください。

プロパティが調整可能としてリストされている場合、その値はオブジェクトがロックされている場合でも変更できます。

シンボルあたりのサンプル数 (ビット)。正の偶数として指定します。サンプルの半分はマンチェスター符号化の 1 つの振幅レベルを表しています。サンプルの残り半分は、逆のレベルを表しています。

出力フレームあたりのグループ数。スカラー整数で指定します。各グループは 104 シンボル長 (ビット) です。

タイプ 2A グループによって伝えられるラジオ テキスト。最大 64 文字の文字ベクトルとして指定します。オブジェクトはタイプ 2A グループを使用して、指定したテキストを一度に 4 文字送信します。

調整可能: Yes

プログラム サービスのラベル。最大 8 文字の文字ベクトルとして指定します。この情報は、タイプ 0A グループによって短いテキストとして一度に 2 文字伝えられます。

調整可能: Yes

プログラム識別 (PI) コード。16 ビット行ベクトルとして指定します。北米では、PI コードはステーションの呼び出し符号を伝えます。

ラジオ ステーションの呼び出し符号用に北米の PI コードを生成するには、オブジェクト関数 callLettersToPICode を使用します。

例: 例の呼び出し符号には、'WLIR''KPOA' が含まれています。

プログラム タイプ。RDS/RBDS 規格で許可された 31 の値のうちの 1 つを含む文字ベクトルで指定します。RDS/RBDS 規格が北米で許可しているプログラム タイプのリストについては、[1]を参照してください。

調整可能: Yes

プログラム タイプ名。最大 8 文字の文字ベクトルとして指定します。このテキストは、プログラム タイプ 'Sports''Football' など、プログラム タイプをさらに特徴づけます。オブジェクトはタイプ 10A グループを使用して、プログラム タイプ名を伝えます。このプロパティが空の場合、10A グループは生成されません。

調整可能: Yes

日付と時刻を通知するオプション。logical の false (0) または true (1) として指定します。このプロパティを true に設定すると、685 グループごとに 1 つの 4A グループが定期的に生成されます (1 分に 1 回)。

代替周波数。行ベクトルとして MHz 単位で指定します。この情報はタイプ 0A グループで伝えられます。これは、同じまたは隣接する受信エリアで同じプログラムを放送している他の送信機を示します。この情報を使用して、受信機は受信しやすい別の周波数に切り替えることができます。

RadioText Plus (RT+) 情報を送信するオプション。スカラー論理値で指定します。このプロパティを true に設定した場合、RT+ ODA 情報はタイプ 3A グループで通知されます。さらに、RadioTextType1RadioTextType2、および RadioTextIndices でインデックス付けされた 2 つの RT+ 部分文字列で指定された RT+ コンテンツ タイプは、オープン形式のタイプ 11A グループで伝えられます。

最初の RT+ 部分文字列のコンテンツ タイプ。文字ベクトルとして指定します。許可された値は RT+ 標準で指定されたクラス名です。詳細については、[2]を参照してください。

調整可能: Yes

2 番目の RT+ 部分文字列のコンテンツ タイプ。文字ベクトルとして指定します。許可された値は RT+ 標準で指定されたクラス名です。詳細については、[2]を参照してください。

調整可能: Yes

RT+ 部分文字列の開始および終了のインデックス。正の整数の 2 行 2 列の行列として指定します。1 列目は各 RT+ 部分文字列の先頭のインデックスを作成します。2 列目は各部分文字列の末尾のインデックスを作成します。

調整可能: Yes

使用法

説明

Y = rbdsgen は列ベクトル Y のベースバンド RDS/RBDS 波形のフレームを出力します。波形には、オブジェクトの GroupsPerFrame プロパティで指定された 104 ビット グループの数が含まれています。オブジェクトは、SamplesPerSymbol プロパティに従って各シンボルをオーバーサンプリングします。オブジェクトは内部スケジューラを使用して、送信されるグループ タイプの次数と周波数を決定します。

出力引数

すべて展開する

出力信号。列ベクトルとして返されます。返されるベクトルには、ベースバンド RDS/RBDS 波形の (SamplesPerSymbol×104×GroupsPerFrame) 個のサンプル フレームが含まれます。波形には、GroupsPerFrame プロパティで指定された (104 ビットの) グループの数が含まれています。各シンボルは、SamplesPerSymbol プロパティに従ってオーバーサンプリングされます。オブジェクトはスケジューラを使用して、生成されるグループ タイプの次数と周波数を決定します。

オブジェクト関数

オブジェクト関数を使用するには、System object を最初の入力引数として指定します。たとえば、obj という名前の System object のシステム リソースを解放するには、次の構文を使用します。

release(obj)

すべて展開する

callLettersToPICode北米の呼び出し符号のバイナリ PI コードへの変換
registerODAODA へのカスタム符号化の実装の登録
stepSystem object のアルゴリズムの実行
releaseリソースを解放し、System object のプロパティ値と入力特性の変更を可能にします。
resetSystem object の内部状態のリセット

すべて折りたたむ

基本的な RBDS 波形を生成し、オーディオ信号を使用して波形を FM 変調してから復調します。

RBDS 波形の各フレームには、19 のグループが含まれます。グループの長さはそれぞれ 104 ビット (シンボル) です。RBDS シンボルあたりのサンプル数を 10 に設定します。これにより、RBDS 波形の各フレーム内のサンプル数は、104 x 10 x 19 = 19,760 となります。RBDS 標準に従って、ビット レートは 1187.5 Hz となります。そのため、RBDS サンプル レート = 1187.5 x RBDS シンボルあたりのサンプル数となります。オーディオ フレーム レートを 40 x 1187.5 = 47,500 に設定します。

groupLen = 104;
sps = 10;
groupsPerFrame = 19;
rbdsFrameLen = groupLen*sps*groupsPerFrame;
afrRate = 40*1187.5;
rbdsRate = 1187.5*sps;
outRate = 4*57000;

afr = dsp.AudioFileReader( ...
    "rbds_capture_47500.wav", ...
    SamplesPerFrame=rbdsFrameLen*afrRate/rbdsRate);
rbds = comm.RBDSWaveformGenerator( ...
    GroupsPerFrame=groupsPerFrame, ...
    SamplesPerSymbol=sps);

fmMod = comm.FMBroadcastModulator( ...
    AudioSampleRate=afr.SampleRate, ...
    SampleRate=outRate,...
    Stereo=true, ...
    RBDS=true, ...
    RBDSSamplesPerSymbol=sps);
fmDemod = comm.FMBroadcastDemodulator( ...
    SampleRate=outRate,...
    Stereo=true, ...
    RBDS=true, ...
    PlaySound=true);
scope = timescope( ...
    SampleRate=outRate, ...
    TimeSpanSource="Property", ...
    TimeSpan=0.002, ...
    TimeDisplayOffset=0.5, ...
    YLimits=10^-3*[-5 5]);

オーディオ入力を取得し、RBDS 波形を生成します。RBDS 波形でステレオ オーディオを FM 変調し、ノイズを追加し、オーディオと RBDS 波形を FM 復調します。復調した RBDS 波形を時間スコープに表示し、マンチェスター符号化された差動パルスを表示します。

for idx = 1:7
    % Get current audio input
    input = afr();              
    % Generate RBDS info at the same configured rate
    rbdsWave = rbds();
    % FM-modulate stereo audio with RBDS info
    yFM = fmMod( ...
        [input input], ...
        rbdsWave);
    % Add noise
    rcv = awgn(yFM, 40);
    % FM-demodulate the audio and RBDS waveforms
    [audioRcv, rbdsRcv] = fmDemod(rcv);
    scope(rbdsRcv);
end
release(scope)

フレームあたり 20 のグループとシンボルあたり 10 のサンプルをもつ comm.RBDSWaveformGenerator System object™ を作成します。アーティスト名や曲名などの Radio Text plus (RT+) 情報を波形に追加します。RadioTextIndices プロパティを使用して、RT+ 部分文字列の先頭と末尾を示します。

rbds = comm.RBDSWaveformGenerator( ...
    GroupsPerFrame=20, ...
    SamplesPerSymbol=10, ...
    SendRadioTextPlus=true);
rbds.RadioText = 'MyArtist - MySongTitle';
rbds.RadioTextType1 = 'Item.Artist';
rbds.RadioTextType2 = 'Item.Title';
rbds.RadioTextIndices = [1 8; 12 22]; 
for idx = 1:10
    rbds();
end

comm.RBDSWaveformGenerator System object™ の registerODA メソッドを使用して、オープン データ アプリケーション (ODA) のカスタム符号化の実装を登録します。ODA ID を 'CD46' に設定します。これはトラフィック メッセージ チャネルの ID です。割り当てられたグループ タイプは 8A です。

rbds = comm.RBDSWaveformGenerator();
odaID = 'CD46';
allocatedGroupType = '8A';

この例では、次のテンプレートをカスタム符号化の実装の開始点として使用しています。

mainProcessingFcn = @CustomODAEncodingMain;
fcn3A             = @CustomODAEncoding3A;
registerODA(rbds,odaID,allocatedGroupType,mainProcessingFcn,fcn3A);
s = info(rbds);
s.ODAMap
ans=2×1 struct array with fields:
    ID
    GroupType
    FunctionMain
    Function3A

日付と時刻の情報、プログラム タイプ、および代替周波数を使用して RBDS 波形を生成します。comm.RBDSWaveformGenerator オブジェクトは、日付と時刻の情報にはタイプ 4A グループ、プログラム タイプの情報にはタイプ 10A グループ、および代替周波数にはタイプ 0A グループを使用します。スペクトル アナライザーに波形が表示されます。

rbds = comm.RBDSWaveformGenerator( ...
    GroupsPerFrame=1000);
sa = spectrumAnalyzer( ...
    SampleRate=1187.5*rbds.SamplesPerSymbol, ...
    YLimits=[-140 20]);
rbds.SendDateTime = true;          % Send type 4A groups
rbds.ProgramType = "Sports";
rbds.ProgramTypeName = "Football"; % Send type 10A groups
rbds.AlternativeFrequencies = ...  % Send info in type 0A groups
    [99.1 102.5];
wave = rbds();
sa(wave)
release(sa)

アルゴリズム

すべて展開する

comm.RBDSWaveformGenerator System object は RDS/RBDS 規格[1]に従って波形を生成します。RDS/RBDS 規格は、物理レイヤー、データ リンク レイヤー、セッションとアプリケーション レイヤーの 3 つのレイヤーで構成されます。

参照

[1] National Radio Systems Committee. United States RBDS Standard: Specification of the radio broadcast data system (RBDS). Electronic Industries Association and National Association of Broadcasters. April 9, 1998.

[2] Westdeutscher Rundfunk WDR, Nokia, and Institut für Rundfunktechnik IRT. RadioText Plus (RT+) Specification, Version 2.1. 2006.

拡張機能

バージョン履歴

R2017a で導入