Main Content

comm.FSKDemodulator

M-ary FSK 手法を使用した復調

説明

comm.FSKDemodulator System object™ は、M-ary 周波数偏移変調 (M-FSK) 手法を使用して変調された信号を非コヒーレントに復調します。入力は、変調信号のベースバンド表現です。このオブジェクトの入力と出力はともに離散時間信号です。詳細については、アルゴリズムを参照してください。

周波数偏移変調を使用して変調された信号を復調するには、以下の手順に従います。

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

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

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

作成

説明

fskdemodulator = comm.FSKDemodulator は、M-FSK で変調された信号を非コヒーレントなエネルギー検出器で復調する復調器の System object を作成します。

fskdemodulator = comm.FSKDemodulator(Name=Value) は、FSK 復調器オブジェクトを作成し、名前と値の引数を 1 つ以上使用してプロパティを設定します。たとえば、comm.FSKDemodulator(BitOutput=true) は、バイナリ出力値を返すオブジェクトを構成します。

fskdemodulator = comm.FSKDemodulator(M,freqSep,RS,Name=Value) は、ModulationOrder プロパティを M に設定し、FrequencySeparation プロパティを freqSep に設定し、SymbolRate プロパティを RS に設定し、さらにオプションで名前と値の引数を使用して、M-FSK 復調器オブジェクトを作成します。

プロパティ

すべて展開する

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

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

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

変調信号の周波数の数。2 以上の正の整数として指定します。

メモ

SymbolMapping'Gray' に設定した場合、または BitOutputtrue に設定した場合、変調次数 M は 2 のべき乗 (つまり M = 2K) でなければなりません。ここで、K は正の整数です。

データ型: double

出力を整数で提供するかビット値のグループで提供するかのオプション。数値または logical の 0 (false) または 1 (true) として指定します。

データ型: logical

シンボルの符号化マッピング。'Gray' または 'Binary' として指定します。各整数または log2(M) ビットの各グループは、1 つのシンボルに対応します。M は、ModulationOrder プロパティの値を表します。

  • このプロパティを 'Gray' に設定すると、オブジェクトはシンボルをグレイ符号化された順序にマッピングします。

  • このプロパティを 'Binary' に設定すると、オブジェクトはシンボルを通常のバイナリ符号の順序にマッピングします。

どちらのタイプのマッピングを使用する場合でも、オブジェクトは、最も低い周波数を整数 0 にマッピングし、最も高い周波数を整数 (M – 1) にマッピングします。ベースバンド シミュレーションでは、最も低い周波数は絶対値が最大の負の周波数です。

変調された信号における連続トーン間の周波数分離 (ヘルツ単位)。正のスカラー値で指定します。詳細については、出力信号のエイリアシングの回避を参照してください。

データ型: double

入力シンボルあたりのサンプルの数。正の整数として指定します。詳細については、出力信号のエイリアシングの回避を参照してください。

データ型: double

シンボル内の 1 秒あたりのシンボル レート。正のスカラーとして指定します。シンボル区間は、出力信号がビットか整数かにかかわりなく同一です。詳細については、出力信号のエイリアシングの回避を参照してください。

データ型: double

出力のデータ型。"double""logical""int8""uint8""int16""uint16""int32"、および "uint32" のいずれかとして指定します。

  • BitOutput プロパティを false に設定し、ModulationOrder プロパティを 2 に設定した場合は、このプロパティを "logical" に設定できます。

  • BitOutput プロパティを true に設定した場合は、出力のデータ型を "logical" または "double" に設定しなければなりません。

使用法

説明

Y = fskdemodulator(X) は、M-FSK 手法を使用して入力信号を復調します。

入力引数

すべて展開する

変調された入力信号。列ベクトルとして指定します。X の長さは、SamplesPerSymbol プロパティの値の整数倍でなければなりません。

データ型: double | single

出力引数

すべて展開する

出力信号。整数またはビット値の列ベクトルとして返されます。

  • BitOutputfalse に設定した場合、このオブジェクトは N / NSPS 行 1 列のベクトルを返します。N は入力信号 x の長さ、NSPSSamplesPerSymbol プロパティの値です。出力ベクトルの要素は、範囲 [0, (M – 1)] の整数です。M は ModulationOrder プロパティの値を表します。

  • BitOutputtrue に設定すると、このオブジェクトは長さが N × log2(M) に等しい列ベクトルを返します。出力ベクトルには、範囲 [0, (M – 1)] の整数を表すビット表現が含まれます。log2(M) ビットのグループがシンボルにマッピングされます。ここで、最初のビットは MSB を表し、最後のビットは LSB を表します。

OutputDataType プロパティは、出力のデータ型を指定します。

オブジェクト関数

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

release(obj)

すべて展開する

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

すべて折りたたむ

周波数分離が 100 Hz の 8-FSK 変調を使用して信号を変調および復調します。

変調次数 8、周波数分離 100 Hz で、FSK 変調器と FSK 復調器の System object を作成します。

M = 8;
freqSep = 100;
fskmodulator = comm.FSKModulator(M,freqSep);
fskdemodulator = comm.FSKDemodulator(M,freqSep);

S/N 比が -2 dB の加法性ホワイト ガウス ノイズ チャネルを作成します。

awgnchan = comm.AWGNChannel( ...
    NoiseMethod="Signal to noise ratio (SNR)", ...
    SNR=-2);

エラー レート計算機オブジェクトを作成します。

errRate = comm.ErrorRate;

AWGN チャネルで 8-FSK 変調を使用して、50 シンボル フレームを 100 個送信します。

for counter = 1:100
    data = randi([0 M-1],50,1);
    modSignal = fskmodulator(data);
    noisySignal = awgnchan(modSignal);
    receivedData = fskdemodulator(noisySignal);
    errorStats = errRate(data,receivedData);
end

誤りの統計を表示します。

es1 = 'Error rate = %4.2e\n';
es2 = 'Number of errors = %d\n';
es3 = 'Number of symbols = %d\n';
fprintf([es1 es2 es3],errorStats)
Error rate = 1.40e-02
Number of errors = 70
Number of symbols = 5000

FSK 変調器の System object は、データ入力を整数値またはバイナリ値として変調するように構成できます。FSK 復調器の System object は、シンボルと出力を整数値またはバイナリ値として復調するように構成できます。各整数または "log2(M)" ビットの各グループは、1 つのシンボルに対応します。"M" は、ModulationOrder プロパティの値を表します。整数信号およびバイナリ信号に対する FSK 変復調について、予想される入出力信号長を計算します。FSK で変復調された整数信号およびバイナリ信号について、結果として得られた入出力信号長を表示します。

FSK 変調器および FSK 復調器のオブジェクトを構成する際に使用する変数を定義します。

M = 8;         % Modulation order   
freqSep = 100; % Frequency separation
nspf = 21;     % Number of samples per frame
sps = 10;      % Samples per symbol

fskmod_bit = comm.FSKModulator(M,freqSep, ...
    BitInput=true, ...
    SamplesPerSymbol=sps);
fskmod_bif = comm.FSKModulator(M,freqSep, ...
    BitInput=false, ...
    SamplesPerSymbol=sps);
fskdemod_bot = comm.FSKDemodulator(M,freqSep, ...
    BitOutput=true, ...
    SamplesPerSymbol=sps);
fskdemod_bof = comm.FSKDemodulator(M,freqSep, ...
    BitOutput=false, ...
    SamplesPerSymbol=sps);

整数データを生成します。また、ビット データを受け取るように構成された (BitInput=true に設定された) FSK 変調器オブジェクトを使用して、変調データを生成します。

bindata = randi([0 1],nspf*M,1);
modSignal = fskmod_bit(bindata);

データを復調します。その後、最初の復調器オブジェクトからバイナリ データを出力し、2 番目の復調器から整数データを出力します。予想される入出力信号長、および結果として得られた入出力信号長を計算します。

rxData_bot = fskdemod_bot(modSignal);
rxData_bof = fskdemod_bof(modSignal);

バイナリ入力信号について、予想される入出力長を計算します。

Nbit = length(bindata);
Nsym = sps*length(bindata)/log2(M);
Nbot = (length(modSignal)/sps)*log2(M);
Nbof = length(modSignal)/sps;
expLen = sprintf(' Nbit  Nsym  Nbot  Nbof\n  %d   %d   %d   %d', ...
    length(bindata),length(modSignal), ...
    length(rxData_bot),length(rxData_bof))
expLen = 
    ' Nbit  Nsym  Nbot  Nbof
       168   560   168   56'

バイナリ入力信号の入出力長を表示します。

sigLen = sprintf(' bit   sym   bot   bof\n %d   %d   %d   %d', ...
    length(bindata),length(modSignal), ...
    length(rxData_bot),length(rxData_bof))
sigLen = 
    ' bit   sym   bot   bof
      168   560   168   56'

整数データを生成します。また、整数データを受け取るように構成された (BitInput=false に設定された) FSK 変調器オブジェクトを使用して、変調データを生成します。

data = randi([0 M-1],nspf,1);
modSignal = fskmod_bif(data);

入力長が変わるため、使用する前に変調器オブジェクトを解放しなければなりません。データを復調します。その後、最初の復調器オブジェクトからバイナリ データを出力し、2 番目の復調器から整数データを出力します。予想される入出力信号長、および結果として得られた入出力信号長を計算します。

release(fskdemod_bot)
release(fskdemod_bof)
rxData_bot = fskdemod_bot(modSignal);
rxData_bof = fskdemod_bof(modSignal);

整数入力信号について、予想される入出力長を計算します。

Nbif = length(data);
Nsym = sps*length(data);
Nbot = (length(modSignal)/sps)*log2(M);
Nbof = length(modSignal)/sps;
expLen = sprintf('Nbif  Nsym  Nbot  Nbof\n  %d   %d   %d   %d', ...
    length(data),length(modSignal), ...
    length(rxData_bot),length(rxData_bof))
expLen = 
    'Nbif  Nsym  Nbot  Nbof
       21   210   63   21'

整数入力信号の入出力長を表示します。

sigLen = sprintf(' bif  sym  bot  bof\n %d   %d   %d   %d', ...
    length(data),length(modSignal), ...
    length(rxData_bot),length(rxData_bof))
sigLen = 
    ' bif  sym  bot  bof
      21   210   63   21'

詳細

すべて展開する

アルゴリズム

M-FSK で変調された信号は、非コヒーレントな検出を使用して復調されます。これは、位相の測定値を利用しないエネルギー検出器を構成します。復調器は、M 個の波形が送信される可能性があることを知っており、各持続期間 T においてどの波形が受信されたかを判定しなければなりません。

Sklar [1] で説明されているように、M-FSK 変調の一般的な解析的表現は次のようになります。

si(t)=2ETcos(ωit+ϕ)0tTi=1,...,M

  • E はシンボルのエネルギーです。

  • T はシンボルの持続時間です。

  • ωi は離散値 M をもつ周波数項です。

  • M は変調次数で、波形の数を規定します。

  • ϕ は位相オフセットです。

M-FSK 復調器の非コヒーレントなエネルギー検出器は、どの判定領域が最大出力を生成するかに基づいて、各 ωi の波形の判定領域を選択します。

詳細については、Sklar [1] の "Noncoherent Detection of FSK" のセクションを参照してください。

参照

[1] Sklar, Bernard. Digital Communications: Fundamentals and Applications. 2nd ed. Upper Saddle River, N.J: Prentice-Hall PTR, 2001.

拡張機能

バージョン履歴

R2012a で導入