メインコンテンツ

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

comm.FMBroadcastModulator

R2026a

ブロードキャスト FM オーディオ信号の変調

説明

comm.FMBroadcastModulator System object™ はオーディオ信号をプリエンファシスし、それをベースバンド FM 信号に変調します。詳細については、アルゴリズムを参照してください。

ブロードキャスト FM オーディオ信号を変調するには、次を行います。

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

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

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

作成

説明

fmbmodulator = comm.FMBroadcastModulator は、FM ブロードキャスト変調器 System object を作成します。

fmbmodulator = comm.FMBroadcastModulator(Name,Value) は、名前と値からなる 1 つ以上の引数を使用してプロパティを設定します。たとえば、'SampleRate',400e3 はサンプル レートを 400 kHz に指定します。

例

fmbmodulator = comm.FMBroadcastModulator(fmbdemodulator) は、入力 comm.FMBroadcastDemodulator System object fmbdemodulator の構成に基づいてプロパティを設定します。

プロパティ

すべて展開する

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

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

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

変調器の出力のサンプル レート (Hz 単位)。正のスカラーとして指定します。サンプル レートは周波数偏差の 2 倍より大きくなければなりません (つまり、SampleRate > 2×FrequencyDeviation)。

データ型: double

出力信号周波数のピーク偏差 (Hz 単位)。正のスカラーとして指定します。周波数偏差はサンプル レートの半分より小さくなければなりません (つまり、FrequencyDeviation < SampleRate/2)。

システムの帯域幅は BT = 2×(FrequencyDeviation + BM) です。ここで、BM はメッセージ帯域幅 (Hz 単位) です。詳細については、アルゴリズムを参照してください。

FM ブロードキャストの業界標準では、米国では 75 kHz、ヨーロッパでは 50 kHz の値が規定されています。

データ型: double

プリエンファシス ハイパス フィルターの時定数 (秒単位)。正のスカラーとして指定します。FM ブロードキャストの業界標準では、米国では 75 μs、ヨーロッパでは 50 μs の値が規定されています。

データ型: double

入力オーディオ信号のサンプル レート (Hz 単位)。正のスカラーとして指定します。

データ型: double

ステレオ変調を有効にするオプション。logical 0 (false) または 1 (true) として指定します。

  • モノラル オーディオ信号の場合は、このプロパティを false に設定します。

  • ステレオ オーディオ信号の場合は、このプロパティを true に設定します。オブジェクトはオーディオ入力 (L–R) をベースバンド (L+R) に変調するだけでなく、38 kHz の帯域にも変調します。

詳細については、多重化ステレオおよび RDS (または RBDS) FM 信号を参照してください。

データ型: logical

RDS (または RBDS) 波形変調を有効にするオプション。logical 0 (false) または 1 (true) として指定します。このプロパティを true に設定すると、オブジェクトはベースバンド RDS (または RBDS) 波形を 2 番目の入力として受け入れ、RDS (または RBDS) 信号を 57 kHz で変調します。詳細については、多重化ステレオおよび RDS (または RBDS) FM 信号を参照してください。

データ型: logical

RDS (または RBDS) 入力信号のオーバーサンプリング係数。正の整数として指定します。RDS (または RBDS) ブロードキャスト データのサンプル レートは 1187.5 Hz です。RDS (または RBDS) 信号のサンプル レートは RBDSSamplesPerSymbol × 1187.5 Hz です。

依存関係

このプロパティを有効にするには、RBDS プロパティを true に設定します。

データ型: double

使用法

説明

outsig = fmbmodulator(audiosig) は、入力オーディオ信号をプリエンファシスし、プリエンファシスした信号を FM 変調されたベースバンド オーディオ信号に変調します。

例

outsig = fmbmodulator(audiosig,rbdssig) は、ベースバンド RBDS 信号も 57 kHz で変調します。この構文を有効にするには、RBDS プロパティを true に設定します。

例

入力引数

すべて展開する

オーディオ信号。次のいずれかのオプションとして指定します。

  • N 要素の列ベクトル (モノラル信号の場合) — Stereo プロパティを false に設定した場合は、オーディオ信号を列ベクトルとして指定する必要があります。N はオーディオ信号のサンプル数です。

  • M 行 N 列の行列 (ステレオ信号の場合) — M はステレオ チャネルの数です。N はチャネルあたりのオーディオ信号のサンプル数です。

信号長の制限の詳細については、制限を参照してください。

Stereo プロパティを true に設定した場合、オーディオ信号には少なくとも 2 つのチャネルが必要になり、System object はステレオ符号化をプリエンファシス フィルター処理の後に実行します。

データ型: double | single
複素数のサポート: あり

RBDS 信号。列ベクトルとして指定します。RBDS 信号長の制限の詳細については、制限を参照してください。

RBDS 信号を生成するには、comm.RBDSWaveformGenerator System object を使用します。

データ型: double | single
複素数のサポート: あり

出力引数

すべて展開する

FM 変調されたベースバンド信号。入力信号 audiosig と同じデータ型の複素数値の列ベクトルとして返されます。この出力の長さは length(audiosig) × (SampleRate/AudioSampleRate) です。

オブジェクト関数

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

release(obj)

すべて展開する

infoFM ブロードキャスト変調器または復調器に関する情報
stepSystem object のアルゴリズムの実行
releaseリソースを解放し、System object のプロパティ値と入力特性の変更を可能にします。
resetSystem object の内部状態のリセット

例

すべて折りたたむ

ストリーミング モードでデータを処理する System object を使用して FM ブロードキャスト変調および復調を適用した後に、オーディオ ファイルを再生します。

オーディオ ファイル guitartune.wav を読み込むには、フレームあたりのサンプル数が 4410 に設定されているオーディオ ファイル リーダー System object™ を使用します。

audiofilereader = dsp.AudioFileReader('guitartune.wav', ...
    'SamplesPerFrame',4410);

FM ブロードキャスト変調器オブジェクトと FM ブロードキャスト復調器オブジェクトを作成します。入力オーディオ信号のサンプル レートと一致するように、出力オーディオ信号のサンプル レートを設定します。変調器の指定されたサンプル レートと一致するように、復調器のサンプル レートを設定します。ブロードキャスト復調器でオーディオ再生を有効にします。

fmbMod = comm.FMBroadcastModulator( ...
    'AudioSampleRate',audiofilereader.SampleRate, ...
    'SampleRate',240e3);
fmbDemod = comm.FMBroadcastDemodulator( ...
    'AudioSampleRate',audiofilereader.SampleRate, ...
    'SampleRate',240e3,'PlaySound',true);

フレーム長が 4410 のオーディオ データを読み取って FM ブロードキャスト変調を適用し、その FM 信号を復調して、復調した信号 (demodData) を再生します。

while ~isDone(audiofilereader)
    audioData = audiofilereader();
    modData = fmbMod(audioData);
    demodData = fmbDemod(modData); % Demodulate and play signal
end

FM ブロードキャスト変調器 System object および FM ブロードキャスト復調器 System object を使用して、オーディオ信号を変調および復調します。周波数応答をプロットして、入力オーディオ信号と復調されたオーディオ信号を比較します。

オーディオ ファイル guitartune.wav を読み込むには、オーディオ ファイル リーダー System object™ を使用します。フレームあたりのサンプル数を 44,100 (オーディオ ファイル全体が入る大きさ) に設定します。

audiofilereader = dsp.AudioFileReader("guitartune.wav", ...
    SamplesPerFrame=44100);
x = audiofilereader();

スペクトル アナライザー System object を作成し、変調した信号と復調した信号のスペクトルをプロットします。

saFM = spectrumAnalyzer( ...
    SampleRate=152e3, ...
    Title="FM Broadcast Signal");
saAudio = spectrumAnalyzer( ...
    SampleRate=44100, ...
    ShowLegend=true, ...
    Title="Audio Signal", ...
    ChannelNames=["Input signal" "Demodulated signal"]);

FM ブロードキャスト変調器オブジェクトと FM ブロードキャスト復調器オブジェクトを作成します。入力オーディオ信号のサンプル レートと一致するように、出力オーディオ信号のサンプル レートを設定します。指定された変調器と一致するように復調器を構成します。

fmbMod = comm.FMBroadcastModulator( ...
    AudioSampleRate=audiofilereader.SampleRate, ...
    SampleRate=200e3);
fmbDemod = comm.FMBroadcastDemodulator(fmbMod)
fmbDemod = 
  comm.FMBroadcastDemodulator with properties:

            SampleRate: 200000
    FrequencyDeviation: 75000
    FilterTimeConstant: 7.5000e-05
       AudioSampleRate: 44100
             PlaySound: false
                Stereo: false
                  RBDS: false

オブジェクトへのシーケンス入力の長さは、間引き係数の整数倍でなければなりません。変調器と復調器のフィルターのオーディオ間引き係数を決定するには、オブジェクト関数infoを使用します。

info(fmbMod)
ans = struct with fields:
       AudioDecimationFactor: 441
    AudioInterpolationFactor: 2000
        RBDSDecimationFactor: 19
     RBDSInterpolationFactor: 320

info(fmbDemod)
ans = struct with fields:
       AudioDecimationFactor: 50
    AudioInterpolationFactor: 57
        RBDSDecimationFactor: 50
     RBDSInterpolationFactor: 57

変調器のオーディオ間引き係数は、オーディオ フレーム長 44,100 の倍数です。復調器のオーディオ間引き係数は、変調器出力の 200,000 サンプル データ シーケンス長の整数倍です。

オーディオ信号を変調し、変調した信号のスペクトルをプロットします。

y = fmbMod(x);
saFM(y)

変調したオーディオ信号を復調し、結果のスペクトルをプロットします。入力信号のスペクトルを復調された信号のスペクトルと比較します。これらのスペクトルは似ていますが、復調された信号の高周波数成分の方が小さい点が異なります。

z = fmbDemod(y);
saAudio([x z])

RBDS 波形を生成し、オーディオ信号を使用して RBDS 波形を FM ブロードキャスト変調してから、FM 信号を FM ブロードキャスト復調します。

フレームあたり 19 のグループとシンボルあたり 10 のサンプルをもつ RBDS 波形のパラメーターを指定します。RBDS 波形のサンプルレートは、1187.5 x 10 で求められます。オーディオ サンプルレートを 1187.5 x 40 に設定します。

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

オーディオ ファイル guitartune.wav を読み込むには、フレームあたりのサンプル数を設定したオーディオ ファイル リーダー System object™ を使用します。RBDS 波形発生器、FM ブロードキャスト変調器、FM ブロードキャスト復調器、および時間範囲の System object を作成します。ステレオ オーディオ ファイルと RBDS 波形を処理するように変調器オブジェクトと復調器オブジェクトを構成します。

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, ...
    'YLimits',10^-2*[-1 1]);

オーディオ信号を読み取ります。オーディオと同じに構成されたレートで RBDS 情報を生成します。RBDS 情報を使用してステレオ オーディオ信号を FM ブロードキャスト変調します。加法性ホワイト ガウス ノイズを付加します。オーディオ信号と RBDS 波形を FM 復調します。時間スコープに波形が表示されます。

for idx = 1:7
    input = afr();                         
    rbdsWave = rbds();                     
    yFM = fmMod([input input],rbdsWave);  
    rcv = awgn(yFM,40);                   
    [audioRcv, rbdsRcv] = fmDemod(rcv);    
    scope(rbdsRcv);
end

制限

  • RBDS を true に設定した場合、オーディオと RDS (または RBDS) の両方の入力で次の方程式を満たさなければなりません。

    audioLengthaudioSampleRate=RBDSLengthRBDSSampleRate

  • RDS (または RBDS) 信号のサンプル レートは RBDSSamplesPerSymbol × 1187.5 Hz です。

  • 入力 RDS (または RBDS) 信号 rbdssig の長さは、RBDSDecimationFactor プロパティの整数倍でなければなりません。オーディオ信号 audiosig の入力長は、AudioDecimationFactor プロパティの整数倍でなければなりません。RBDSDecimationFactor と AudioDecimationFactor の詳細については、オブジェクト関数 info を参照してください。

アルゴリズム

すべて展開する

comm.FMBroadcastModulator System object には、comm.FMModulator System object の機能に加え、ディエンファシス フィルター処理とステレオ信号受信機能が含まれます。

参照

[1] Hatai, I., and I. Chakrabarti. “A New High-Performance Digital FM Modulator and Demodulator for Software-Defined Radio and Its FPGA Implementation.” International Journal of Reconfigurable Computing (December 25, 2011): 1–10. https://doi.org/10.1155/2011/342532.

[2] Taub, H., and D. Schilling. Principles of Communication Systems. McGraw-Hill Series in Electrical Engineering, 142–55. New York: McGraw-Hill, 1971.

[3] Der, Lawrence. "Frequency Modulation (FM) Tutorial." Silicon Laboratories Inc.: 4–8.

拡張機能

すべて展開する

バージョン履歴

R2015a で導入