Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

comm.FMDemodulator

FM 方式を使用した復調

説明

FMDemodulator System object™ は、FM 変調された信号を復調します。

信号の FM 復調は次によって行います。

  1. FMDemodulator オブジェクトを定義して設定します。構築を参照してください。

  2. step を呼び出して、comm.FMDemodulator のプロパティに従い、信号を FM 復調します。step の動作は、ツールボックスの各オブジェクト固有のものです。

メモ

R2016b 以降では、step メソッドを使用して、System object によって定義された演算を実行する代わりに、引数を関数であるかのように使ってオブジェクトを呼び出すことができます。たとえば、y = step(obj,x)y = obj(x) は同等の演算を実行します。

構築

H = comm.FMDemodulator は、入力信号の周波数復調を行う復調器 System object、H を作成します。

H = comm.FMDemodulator(mod) は、FM 復調器オブジェクトを作成します。このオブジェクトのプロパティは対応する FM 変調器オブジェクト mod によって決まります。

H = comm.FMDemodulator(Name,Value) は、指定の各 Name プロパティを指定の Value に設定して FM 復調器オブジェクトを作成します。Name は一重引用符で囲まなければなりません。(Name1,Value1,...,NameN,ValueN) のように、追加の名前と値のペアの引数を任意の順番で指定できます。

プロパティ

FrequencyDeviation

出力信号周波数のピーク偏差 (Hz)

FM 復調器の周波数偏差を Hz 単位で、正の実数スカラーとして指定します。既定値は 75e3 です。システムの帯域幅は、周波数偏差とメッセージ帯域幅の合計の 2 倍と等しくなります。このプロパティは調整不可能です。

SampleRate

入力信号のサンプルレート (Hz)

サンプルレートを Hz 単位で、正の実数スカラーとして指定します。既定値は 240e3 です。出力サンプルレートは、入力サンプルレートと等しくなります。このプロパティは調整不可能です。

メソッド

stepFM ベースバンド復調の適用
すべての System object に共通
release

System object のプロパティ値の変更の許可

reset

System object の内部状態をリセットします。

reset を使用するとき、このメソッドは、前に処理されたフレーム内の最後のシンボルのウィンドウ処理されたサフィックスをリセットします。

すべて折りたたむ

正弦波信号を変調および復調します。復調された信号をプロットし、元の信号と比較します。

例のパラメーターを設定します。

fs = 100; % Sample rate (Hz)
ts = 1/fs; % Sample period (s)
fd = 25; % Frequency deviation (Hz)

持続時間が 0.5 秒で周波数が 4 Hz の正弦波入力信号を作成します。

t = (0:ts:0.5-ts)';
x = sin(2*pi*4*t);

FM 変調器および復調器 System object を作成します。

fmmod = comm.FMModulator('SampleRate',fs,'FrequencyDeviation',fd);
fmdemod = comm.FMDemodulator('SampleRate',fs,'FrequencyDeviation',fd);

入力信号を FM 変調し、実数部をプロットします。変調された信号の周波数が入力信号の振幅によって変化することが確認できます。

y = fmmod(x);
plot(t,[x real(y)])

Figure contains an axes. The axes contains 2 objects of type line.

FM 変調された信号を復調します。

z = fmdemod(y);

入力信号と復調された信号をプロットします。復調器の出力信号は、入力信号と完全に一致します。

plot(t,x,'r',t,z,'ks')
legend('Input Signal','Demod Signal')
xlabel('Time (s)')
ylabel('Amplitude')

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Input Signal, Demod Signal.

FM 変調器オブジェクトから FM 復調器 System object™ を作成します。ファイルから読み込んだオーディオ データを変調および復調し、復調されたデータと入力データのスペクトルを比較します。

例のパラメーターを設定します。

fd = 50e3;  % Frequency deviation (Hz)
fs = 300e3; % Sample rate (Hz)

FM 変調器 System object を作成します。

mod = comm.FMModulator('FrequencyDeviation',fd,'SampleRate',fs);

変調器オブジェクトを使用して構成することにより、対になる復調器オブジェクトを作成します。

demod = comm.FMDemodulator(mod);

2 つの System object でプロパティが同一であることを確認します。

mod
mod = 
  comm.FMModulator with properties:

            SampleRate: 300000
    FrequencyDeviation: 50000

demod
demod = 
  comm.FMDemodulator with properties:

            SampleRate: 300000
    FrequencyDeviation: 50000

構造体変数 S にオーディオ データを読み込みます。

S = load('handel.mat');
data = S.y;
fsamp = S.Fs;

スペクトル アナライザー System object を作成します。

specanalyzer = dsp.SpectrumAnalyzer('SampleRate',fsamp,'ShowLegend',true);

オーディオ データを FM 変調および復調します。

modData = mod(data);
demodData = demod(modData);

入力データ (チャネル 1) のスペクトル プロットが、復調されたデータ (チャネル 2) のスペクトル プロットと一致していることを確認します。

specanalyzer([data demodData])

Figure Spectrum Analyzer contains an axes and other objects of type uiflowcontainer, uimenu, uitoolbar. The axes contains 2 objects of type line. These objects represent Channel 1, Channel 2.

FM 変調および復調の適用後にオーディオ ファイルを再生します。この例では、ストリーミング モードでのデータ処理に System object™ の特性を活用しています。

オーディオ ファイル リーダー オブジェクトを使用して、オーディオ ファイル guitartune.wav を読み込みます。

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

オーディオ再生のためのオーディオ デバイス ライター オブジェクトを作成します。

AUDIOPLAYER = audioDeviceWriter;

既定のプロパティをもつ変調器オブジェクトと復調器オブジェクトを作成します。

MOD = comm.FMModulator;
DEMOD = comm.FMDemodulator;

オーディオ データを読み取り、FM 変調、FM 復調の後、復調された信号 z を再生します。

while ~isDone(AUDIO)
    x = step(AUDIO);                      % Read audio data
    y = step(MOD,x);                      % FM modulate
    z = step(DEMOD,y);                    % FM demodulate
    step(AUDIOPLAYER,z);                  % Playback the demodulated signal
end

正弦波信号を変調および復調します。復調された信号をプロットし、元の信号と比較します。

例のパラメーターを設定します。

fs = 100; % Sample rate (Hz)
ts = 1/fs; % Sample period (s)
fd = 25; % Frequency deviation (Hz)

持続時間が 0.5 秒で周波数が 4 Hz の正弦波入力信号を作成します。

t = (0:ts:0.5-ts)';
x = sin(2*pi*4*t);

FM 変調器および復調器 System object を作成します。

fmmod = comm.FMModulator('SampleRate',fs,'FrequencyDeviation',fd);
fmdemod = comm.FMDemodulator('SampleRate',fs,'FrequencyDeviation',fd);

入力信号を FM 変調し、実数部をプロットします。変調された信号の周波数が入力信号の振幅によって変化することが確認できます。

y = fmmod(x);
plot(t,[x real(y)])

Figure contains an axes. The axes contains 2 objects of type line.

FM 変調された信号を復調します。

z = fmdemod(y);

入力信号と復調された信号をプロットします。復調器の出力信号は、入力信号と完全に一致します。

plot(t,x,'r',t,z,'ks')
legend('Input Signal','Demod Signal')
xlabel('Time (s)')
ylabel('Amplitude')

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Input Signal, Demod Signal.

参考文献

[1] Chakrabarti, I. H., and Hatai, I. “A New High-Performance Digital FM Modulator and Demodulator for Software-Defined Radio and Its FPGA Implementation.” International Journal of Reconfigurable Computing. Vol. 2011, No. 10.1155/2011, 2011, p. 10.

[2] Taub, Herbert, and Donald L. Schilling. Principles of Communication Systems. New York: McGraw-Hill, 1971, pp. 142–155.

アルゴリズム

周波数変調を行ったパスバンド信号 Y(t) を次のように表します。

Y(t)=Acos(2πfct+2πfΔ0tx(τ)dτ),

ここで、A は搬送波振幅、fc は搬送周波数、x(τ) はベースバンド入力信号、fΔ はヘルツ単位の周波数偏差です。|x(t)| ≤ 1 と仮定した場合、周波数偏差は、fc からの単方向への最大シフト値になります。

ベースバンド FM 信号は、以下の条件を満たす fc でダウンコンバートすることによってパスバンド表現から導出できます。

ys(t)=Y(t)ej2πfct=A2[ej(2πfct+2πfΔ0tx(τ)dτ)+ej(2πfct+2πfΔ0tx(τ)dτ)]ej2πfct=A2[ej2πfΔ0tx(τ)dτ+ej4πfctj2πfΔ0tx(τ)dτ].

-2fc の成分を ys(t) から除去すると、次のように表されるベースバンド信号表現 y(t) が残ります。

y(t)=A2ej2πfΔ0tx(τ)dτ.

y(t) の式は次のように書き換えられます。

y(t)=A2ejϕ(t),

ここで、ϕ(t)=2πfΔ0tx(τ)dτ であり、これは入力信号が位相 ϕ(t) の導関数をスケーリングしたものであることを意味します。

ベースバンド遅延復調器は、入力信号を y(t) から復元するために使用します。

受信信号の遅延および共役の部分が信号自体から減算されます。

w(t)=A24ejϕ(t)ejϕ(tT)=A24ej[ϕ(t)ϕ(tT)],

ここで T はサンプリング周期です。離散項では wn=w(nT) であり、次のようになります。

wn=A24ej[ϕnϕn1],vn=ϕnϕn1.

信号 vn は、vn ≈ xn を満たす ϕn の近似微分です。

拡張機能

R2015a で導入