Main Content

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

comm.FMDemodulator

ベースバンド FM 信号の復調

説明

comm.FMDemodulator System object™ は、ベースバンド FM 信号を復調します。

ベースバンド FM 信号を復調するには、次のようにします。

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

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

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

作成

説明

fmdemodulator = comm.FMDemodulator は、FM 復調器 System object を作成します。

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

fmdemodulator = comm.FMDemodulator(fmmodulator) は、入力 comm.FMModulator System object fmmodulator の構成に基づいてプロパティを設定します。

プロパティ

すべて展開する

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

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

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

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

データ型: double

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

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

データ型: double

使用法

説明

outsig = fmdemodulator(insig) は、ベースバンド FM 信号を復調し、メッセージ データを出力します。

入力引数

すべて展開する

ベースバンド FM 信号。スカラーまたは列ベクトルとして指定します。

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

出力引数

すべて展開する

メッセージ データ。入力 insig と同じデータ型およびサイズのスカラーまたは列ベクトルとして返されます。

オブジェクト関数

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

release(obj)

すべて展開する

stepSystem object のアルゴリズムの実行
releaseリソースを解放し、System object のプロパティ値と入力特性の変更を可能にします。
resetSystem object の内部状態のリセット

すべて折りたたむ

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

オーディオ ファイル guitartune.wav を読み込むには、オーディオ ファイル リーダー System object™ を使用します。

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

オーディオ再生のためのオーディオ デバイス ライター System object を作成します。

audioplayer = audioDeviceWriter;

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

fmmod = comm.FMModulator;
fmdemod = comm.FMDemodulator;

オーディオ データを読み取って FM 変調し、FM 変調された信号を FM 復調して、復調された信号を再生します (z)。

while ~isDone(audiofilereader)
    x = audiofilereader();
    y = fmmod(x);
    z = fmdemod(y);
    audioplayer(z);
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™ を作成し、サンプル レートと周波数偏差を設定します。次に、FM 復調器 System object を作成し、FM 変調器の構成を使用して復調器のプロパティを設定します。

fmmodulator = comm.FMModulator( ...
    'SampleRate',fs, ...
    'FrequencyDeviation',fd);
fmdemodulator = comm.FMDemodulator(fmmodulator);

信号を FM 変調し、複素信号の実数部をプロットします。変調された信号の周波数は、入力信号の振幅によって変化します。

y = fmmodulator(x);
plot(t,[x real(y)])
title('Input Sinusoid and FM-Modulated Signals')
xlabel('Time (seconds)'); ylabel('Amplitude')
legend('Input signal','Modulated signal (real component)')

Figure contains an axes object. The axes object with title Input Sinusoid and FM-Modulated Signals, xlabel Time (seconds), ylabel Amplitude contains 2 objects of type line. These objects represent Input signal, Modulated signal (real component).

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

z = fmdemodulator(y);

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

plot(t,x,'r',t,z,'ks')
legend('Original signal','Demodulated signal')
xlabel('Time (s)')
ylabel('Amplitude')

Figure contains an axes object. The axes object with xlabel Time (s), ylabel Amplitude contains 2 objects of type line. One or more of the lines displays its values using only markers These objects represent Original signal, Demodulated signal.

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

例で使用するパラメーターを初期化します。

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

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

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

変調器 System object を使用して構成することにより、FM 復調器 System object を作成します。

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 = load("handel.mat");
data = S.y;
fsamp = S.Fs;

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

sa = spectrumAnalyzer( ...
    SampleRate=fsamp, ...
    ShowLegend=true);

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

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

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

sa([data demodData])
release(sa)

アルゴリズム

周波数変調された通過帯域信号 Y(t) は次で与えられます。

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

ここで、

  • A は搬送波振幅です。

  • fc は搬送波周波数です。

  • x(τ) はベースバンド入力信号です。

  • fΔ は Hz 単位の周波数偏差です。

|x(τ)| ≤ 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τ となります。y(t) をこのような式にすることで、入力信号が位相 ϕ(t) の導関数をスケーリングしたものであることを意味します。

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

Baseband FM demodulator

参照

[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. New York: McGraw-Hill, 1971, pp. 142–155.

拡張機能

バージョン履歴

R2015a で導入