Main Content

comm.MSKModulator

MSK 法を使用した変調

説明

comm.MSKModulator System object™ は、最小偏移変調法を使用して変調します。出力は、変調信号のベースバンド表現です。詳細については、アルゴリズムを参照してください。

最小偏移変調を変調するには、以下の手順に従います。

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

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

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

作成

説明

mskmodulator = comm.MSKModulator は、最小偏移変調 (MSK) 変調方式を使用して入力信号を変調する変調器 System object を作成します。

mskmodulator = comm.MSKModulator(Name=Value) は、名前と値の引数を 1 つ以上使用してプロパティを設定します。たとえば、mskmodulator = comm.MSKModulator(InitialPhaseOffset=pi/2) は、変調波形の初期位相を pi/2 ラジアンに指定します。

プロパティ

すべて展開する

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

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

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

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

  • このプロパティを false に設定した場合、入力 X-1 または 1 の値をもつ列ベクトルでなければなりません。入力データのデータ型は倍精度または符号付きの整数でなければなりません。

  • このプロパティを true に設定した場合、入力 X01 の列ベクトルでなければなりません。入力データのデータ型は、倍精度または logical でなければなりません。

データ型: logical

変調波形の初期位相オフセット (ラジアン単位)。数値スカラーとして指定します。

出力シンボルあたりのサンプル数。正の整数として指定します。シンボルあたりのサンプル数は、入力サンプルから出力サンプルへのアップサンプリング係数を表します。

データ型: double

出力データ型。'double' または 'single' を指定します。

使用法

説明

Y = mskmodulator(X) は MSK 変調を入力データに適用し、変調された MSK ベースバンド信号を返します。

入力引数

すべて展開する

入力データ。整数、あるいは整数またはビットからなる列ベクトルとして指定します。

  • BitInputfalse に設定する場合、入力データは倍精度または符号付き整数でなければなりません。

  • BitInputtrue に設定する場合、入力データは倍精度または logical でなければなりません。

データ型: double | logical | int8 | int16 | int32

出力引数

すべて展開する

MSK 変調されたベースバンド信号。列ベクトルとして返されます。

ベクトルの長さは、入力サンプル数と SamplesPerSymbol プロパティの値を掛け合わせたものと同じです。出力データ型の詳細については、OutputDataType プロパティを参照してください。

データ型: double | single

オブジェクト関数

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

release(obj)

すべて展開する

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

すべて折りたたむ

MSK 変調器、AWGN チャネル、および MSK 復調器を作成します。π/4 の位相オフセットを使用します。

mskmodulator = comm.MSKModulator( ...
    BitInput=true, ...
    InitialPhaseOffset=pi/4);
awgn = comm.AWGNChannel( ...
    NoiseMethod='Signal to noise ratio (SNR)', ...
    SNR=0);
mskdemodulator = comm.MSKDemodulator( ...
    BitOutput=true, ...
    InitialPhaseOffset=pi/4);

エラー レート計算機を作成します。ビタビ アルゴリズムによって発生する遅延を考慮します。

    ber = comm.ErrorRate(ReceiveDelay=mskdemodulator.TracebackDepth);

3 ビットのワードを 100 個送信します。

    for counter = 1:100
      data = randi([0 1],300,1);
      modSignal = mskmodulator(data);
      noisySignal = awgn(modSignal);
      receivedData = mskdemodulator(noisySignal);
      errorStats = ber(data, receivedData);
    end
    fprintf('Error rate = %f\nNumber of errors = %d\n', ...
      errorStats(1), errorStats(2))
Error rate = 0.000000
Number of errors = 0

0 と 1 のバイナリ シーケンスを MSK 変調器の出力にマッピングします。このマッピングは GMSK 変調にも適用されます。

バイナリ入力を受け入れる MSK 変調器を作成し、シンボルあたりのサンプル数の値を 1 にします。

mskmodulator = comm.MSKModulator(BitInput=true, SamplesPerSymbol=1);

すべて 0 の入力シーケンスを作成します。シーケンスを変調します。

x = zeros(5,1);
y = mskmodulator(x)
y = 5×1 complex

   1.0000 + 0.0000i
   0.0000 - 1.0000i
  -1.0000 - 0.0000i
  -0.0000 + 1.0000i
   1.0000 + 0.0000i

各点の位相角を決定します。関数 unwrap を使用してトレンドを表示します。

theta = unwrap(angle(y))
theta = 5×1

         0
   -1.5708
   -3.1416
   -4.7124
   -6.2832

0 のシーケンスにより、サンプル間で位相が -π/2 シフトします。

変調器をリセットします。すべて 1 の入力シーケンスを変調します。

reset(mskmodulator)
x = ones(5,1);
y = mskmodulator(x)
y = 5×1 complex

   1.0000 + 0.0000i
   0.0000 + 1.0000i
  -1.0000 + 0.0000i
  -0.0000 - 1.0000i
   1.0000 + 0.0000i

各点の位相角を決定します。関数 unwrap を使用してトレンドを表示します。

theta = unwrap(angle(y))
theta = 5×1

         0
    1.5708
    3.1416
    4.7124
    6.2832

1 のシーケンスにより、サンプル間で位相が +π/2 シフトします。

パルス長の異なるガウス最小偏移変調 (GMSK) および最小偏移変調 (MSK) のアイ ダイアグラムをプロットして GMSK および MSK の変調スキームを比較します。

シンボル変数あたりのサンプルを設定します。

sps = 8;

ランダムなバイナリ データを生成します。

data = randi([0 1],1000,1);

バイナリ入力を受け入れる GMSK 変調器および MSK 変調器を作成します。GMSK 変調器の PulseLength プロパティを 1 に設定します。

gmskMod = comm.GMSKModulator( ...
    BitInput=true, ...
    PulseLength=1, ...
    SamplesPerSymbol=sps);
mskMod = comm.MSKModulator( ...
    BitInput=true, ...
    SamplesPerSymbol=sps);

GMSK 変調器および MSK 変調器を使用してデータを変調します。

modSigGMSK = gmskMod(data);
modSigMSK = mskMod(data);

SNR が 30 dB の AWGN チャネル経由で変調信号を渡します。

rxSigGMSK = awgn(modSigGMSK,30);
rxSigMSK = awgn(modSigMSK,30);

関数eyediagramを使用して、ノイズを含む信号のアイ ダイアグラムをプロットします。GMSK パルスの長さを 1 に設定すると、アイ ダイアグラムはほぼ同じになります。

eyediagram(rxSigGMSK,sps,1,sps/2)

Figure Eye Diagram contains 2 axes objects. Axes object 1 with title Eye Diagram for In-Phase Signal, xlabel Time, ylabel Amplitude contains an object of type line. This object represents In-phase. Axes object 2 with title Eye Diagram for Quadrature Signal, xlabel Time, ylabel Amplitude contains an object of type line. This object represents Quadrature.

eyediagram(rxSigMSK,sps,1,sps/2)

Figure Eye Diagram contains 2 axes objects. Axes object 1 with title Eye Diagram for In-Phase Signal, xlabel Time, ylabel Amplitude contains an object of type line. This object represents In-phase. Axes object 2 with title Eye Diagram for Quadrature Signal, xlabel Time, ylabel Amplitude contains an object of type line. This object represents Quadrature.

GMSK 変調器オブジェクトの PulseLength プロパティを 3 に設定します。プロパティは調整不可能であるため、最初にオブジェクトを解放する必要があります。

release(gmskMod)
gmskMod.PulseLength = 3;

更新した GMSK 変調器オブジェクトを使用して変調信号を生成し、生成した変調信号を AWGN チャネル経由で渡します。

modSigGMSK = gmskMod(data);
rxSigGMSK = awgn(modSigGMSK,30);

GSMK などの連続位相変調 (CPM) 波形では、波形は前のシンボルや現在のシンボルの値に依存します。パルスの長さが長くなるとアイ ダイアグラムのパスの数が増加することを確認するために、GMSK 信号のアイ ダイアログラムをプロットします。

eyediagram(rxSigGMSK,sps,1,sps/2)

Figure Eye Diagram contains 2 axes objects. Axes object 1 with title Eye Diagram for In-Phase Signal, xlabel Time, ylabel Amplitude contains an object of type line. This object represents In-phase. Axes object 2 with title Eye Diagram for Quadrature Signal, xlabel Time, ylabel Amplitude contains an object of type line. This object represents Quadrature.

GMSK 変調器オブジェクトの PulseLength パラメーターを他の値に変更して実験できます。プロパティを偶数に設定した場合、変調信号をわかりやすく表示するために gmskMod.InitialPhaseOffsetpi/4 に、関数 eyediagram のオフセット引数を sps/2 から 0 に更新する必要があります。ガウス パルス整形をよりわかりやすく表示するには、View CPM Phase Tree Using Simulinkの例で説明したように、信号の位相を表示するスコープを使用しなければなりません。

アルゴリズム

差分符号化最小偏移変調変調は、パルス整形を使用して、変調信号の位相遷移を平滑化します。関数 q(t) は、q(t)=tg(t)dt の関係によって周波数パルス g(t) から得られる位相応答です。

指定された周波数パルス整形は、g(t) の次の矩形パルス整形式に対応します。

パルス整形
Rectangularg(t)={12LT,0tLT0otherwise

  • L は、シンボル区間におけるメイン ローブ パルス存続時間です。

  • パルスの持続時間 LT は、シンボル区間におけるパルス長です。

拡張機能

バージョン履歴

R2012a で導入