Main Content

comm.FSKModulator

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

説明

comm.FSKModulator System object™ は、M-ary 周波数偏移変調 (M-FSK) 手法を使用して信号を変調します。出力は、変調信号のベースバンド表現です。詳細については、アルゴリズムを参照してください。

周波数偏移変調を変調するには、以下の手順に従います。

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

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

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

作成

説明

fskmodulator = comm.FSKModulator は、M-ary 周波数偏移変調手法を使用して入力信号を変調する変調器の System object を作成します。

fskmodulator = comm.FSKModulator(Name=Value) は、FSK 変調器オブジェクトを作成し、名前と値の引数を 1 つ以上使用してプロパティを設定します。たとえば、入力値を指定する comm.FSKModulator(BitInput=true) はバイナリでなければなりません。

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

プロパティ

すべて展開する

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

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

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

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

メモ

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

データ型: double

ビットで入力するためのオプション。数値または logical 0 (false) または 1 (true) として指定します。

  • このプロパティを false に設定した場合、入力値は範囲 [0, (M – 1)] の整数でなければなりません。M が 2 に等しい場合は、入力ベクトルに logical 値を使用できます。M は、ModulationOrder プロパティの値を表します。

  • このプロパティを true に設定した場合、入力値はビット値の列ベクトルでなければなりません。入力値のデータ型は、倍精度または logical でなければなりません。入力ベクトルの長さは、シンボルあたりのビットの数 log2(M) の整数倍でなければなりません。このベクトルには、範囲 [0, (M – 1)] の整数を表すビット表現が格納されます。また、M は 2 のべき乗でなければなりません。log2(M) ビットのグループがシンボルにマッピングされます。ここで、最初のビットは MSB を表し、最後のビットは LSB を表します。

データ型: logical

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

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

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

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

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

データ型: double

位相連続性。数値または logical の 0 (false) または 1 (true) として指定します。

  • このプロパティを true に設定すると、変調信号は、周波数が変わっても連続位相を維持します。

  • このプロパティを false に設定すると、変調信号は、周波数が異なる M 個の正弦波の部分で構成されます。この場合、入力値が変化したときに、変調された信号の位相が不連続に変化することがあります。M は、ModulationOrder プロパティの値を表します。

データ型: logical

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

データ型: double

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

データ型: double

出力のデータ型。"double" または "single" として指定します。

使用法

説明

y = fskmodulator(x) は、FSK 手法を使用して入力信号を変調します。出力は変調された FSK ベースバンド信号です。

入力引数

すべて展開する

入力信号。整数、またはビット値からなる数値データ型または logical データ型の列ベクトルとして指定します。BitInput プロパティで、必要とされる入力型およびベクトル長に関する制約を指定します。

出力引数

すべて展開する

変調された出力信号。列ベクトルとして返されます。

  • BitInputfalse に設定した場合、このオブジェクトは、(N × NSPS) 個の要素をもつ列ベクトルを返します。N は入力信号 x の長さを表し、NSPSSamplesPerSymbol プロパティの値を表します。

  • BitInputtrue に設定した場合、このオブジェクトは、(N × NSPS) / log2(M) 個の要素をもつ列ベクトルを返します。M は ModulationOrder プロパティの値を表します。

オブジェクト関数

オブジェクト関数を使用するには、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 変調信号のシンボル マッピングを可視化します。

シンボルごとに 20 個のサンプルを指定します。シンボル 0 は -50 kHz (負の位相勾配) にマッピングされ、シンボル 1 は +50 kHz (正の位相勾配) にマッピングされます。

mod = comm.FSKModulator(ModulationOrder=2, ...
    FrequencySeparation=1e5, ...
    SamplesPerSymbol=20, ...
    SymbolRate=1e4);
x = mod([0 1 0 1 0 1]');
figure 
subplot(1,2,1)
plot(unwrap(angle(x)),0:length(x)-1)
grid on
xlabel("Phase")
ylabel("Samples")
subplot(1,2,2)
spectrogram(x,20,0,[], ...
    mod.SymbolRate*mod.SamplesPerSymbol,"centered")

Figure contains 2 axes objects. Axes object 1 with xlabel Phase, ylabel Samples contains an object of type line. Axes object 2 with xlabel Frequency (kHz), ylabel Time (μs) contains an object of type image.

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'

詳細

すべて展開する

アルゴリズム

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

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

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

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

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

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

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

参照

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

拡張機能

バージョン履歴

R2012a で導入