Main Content

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

comm.MSKModulator

MSK 法を使用した変調

説明

MSKModulator オブジェクトは、最小シフト キーイング (MSK) 法を使用して変調します。出力は、変調信号のベースバンド表現です。Initial phase offset プロパティは、ラジアン単位で測定された、出力波形の初期位相を設定します。

最小シフト キーイングを変調するには、以下の手順に従います。

  1. MSK 変調器オブジェクトを定義および設定します。構築を参照してください。

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

メモ

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

構築

H = comm.MSKModulator は変調器 System object H を作成します。このオブジェクトは、最小シフト キーイング (MSK) 変調法を使用して入力信号を変調します。

H = comm.MSKModulator(Name,Value) は、指定された各プロパティを指定値に設定して、MSK 変調器オブジェクト H を作成します。(Name1,Value1,...,NameN,ValueN) のように、追加の名前と値のペアの引数を任意の順番で指定できます。

プロパティ

BitInput

ビット入力を想定する

入力がビットか整数かを指定します。既定の設定は false です。

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

BitInput プロパティを true に設定した場合、step メソッド入力は、値が 0 と 1 の、倍精度または論理データ型の列ベクトルでなければなりません。

InitialPhaseOffset

初期位相オフセット

変調波形の初期位相を、ラジアン単位の実数の数値スカラー値で指定します。既定の設定は 0 です。

SamplesPerSymbol

出力シンボルあたりのサンプル数

出力でのアップサンプリング係数を、実数の正の整数スカラー値で指定します。既定の設定は 8 です。アップサンプリング係数は、各入力サンプルに対して step メソッドが生成する出力サンプルの数を示します。

OutputDataType

出力のデータ型

出力データ型を double または single のいずれかとして指定します。既定の設定は double です。

メソッド

stepMSK 法を使用した変調
すべての System object に共通
release

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

reset

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

すべて折りたたむ

% Create an MSK modulator, an AWGN channel, and an MSK demodulator.  Use a
% phase offset of pi/4.
 hMod = comm.MSKModulator('BitInput', true, ...
                    'InitialPhaseOffset', pi/4);
    hAWGN = comm.AWGNChannel('NoiseMethod', ...
                    'Signal to noise ratio (SNR)','SNR',0);
    hDemod = comm.MSKDemodulator('BitOutput', true, ...
                    'InitialPhaseOffset', pi/4);
 % Create an error rate calculator, account for the delay caused by the Viterbi algorithm
    hError = comm.ErrorRate('ReceiveDelay', hDemod.TracebackDepth);
    for counter = 1:100
      % Transmit 100 3-bit words
      data = randi([0 1],300,1);
      modSignal = step(hMod, data);
      noisySignal = step(hAWGN, modSignal);
      receivedData = step(hDemod, noisySignal);
      errorStats = step(hError, 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 の 2 進シーケンスを GMSK 変調器の出力にマッピングする方法を説明します。この関係は MSK 変調にも適用されます。

バイナリ入力を受け入れる GMSK 変調器を作成します。パルス長とシンボルあたりのサンプル数を 1 に指定します。

gmsk = comm.GMSKModulator('BitInput',true,'PulseLength',1,'SamplesPerSymbol',1);

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

x = zeros(5,1);
y = gmsk(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(gmsk)
x = ones(5,1);
y = gmsk(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. Axes 1 with title Eye Diagram for In-Phase Signal contains an object of type line. This object represents In-phase. Axes 2 with title Eye Diagram for Quadrature Signal contains an object of type line. This object represents Quadrature.

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

Figure Eye Diagram contains 2 axes. Axes 1 with title Eye Diagram for In-Phase Signal contains an object of type line. This object represents In-phase. Axes 2 with title Eye Diagram for Quadrature Signal 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. Axes 1 with title Eye Diagram for In-Phase Signal contains an object of type line. This object represents In-phase. Axes 2 with title Eye Diagram for Quadrature Signal contains an object of type line. This object represents Quadrature.

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

アルゴリズム

このオブジェクトは、MSK Demodulator Baseband ブロックのリファレンス ページで説明されているアルゴリズム、入力、および出力を実装しています。オブジェクト プロパティはブロック パラメーターに対応します。MSK の場合、シンボルごとの位相シフトは π/2 です。これは、0.5 の変調指数です。

拡張機能

R2012a で導入