Main Content

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

comm.GMSKModulator

GMSK 法を使用した変調

説明

GMSKModulator オブジェクトは、ガウス最小シフト キーイング メソッドを使用して変調します。出力は、変調信号のベースバンド表現です。

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

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

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

メモ

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

構築

H = comm.GMSKModulator は変調器 System object H を作成します。このオブジェクトは、ガウス最小シフト キーイング (GMSK) 変調メソッドを使用して入力信号を変調します。

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

プロパティ

BitInput

入力がビットであると想定する

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

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

BitInput プロパティを true に設定すると、step メソッド入力は、倍精度または 0 と 1 の論理データ型列ベクトルである必要があります。

BandwidthTimeProduct

ガウス パルスの帯域幅とシンボル時間の積

ガウス パルス整形の帯域幅とシンボル時間の積を実数の正のスカラー値として指定します。既定の設定は 0.3 です。

PulseLength

パルス長

ガウス パルス整形の長さを、実数の正の整数としてシンボル区間で指定します。既定の設定は 4 です。

SymbolPrehistory

シンボル プレヒストリ

step メソッドへの最初の呼び出しの前に、新しいものから順番に、変調器が使用するデータ シンボルを指定します。既定の設定は 1 です。このプロパティは、-1 または 1 と等しい要素のスカラーまたはベクトルを必要とします。値がベクトルの場合、PulseLength プロパティの値より小さい長さでなくてはなりません。

InitialPhaseOffset

初期位相オフセット

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

SamplesPerSymbol

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

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

OutputDataType

出力のデータ型

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

メソッド

resetGMSK 変調器オブジェクトの状態のリセット
stepGMSK 法を使用した変調
すべての System object に共通
release

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

すべて折りたたむ

% Create a GMSK modulator, an AWGN channel, and a GMSK demodulator. Use a phase offset of pi/4.
    hMod = comm.GMSKModulator('BitInput', true, 'InitialPhaseOffset', pi/4);
    hAWGN = comm.AWGNChannel('NoiseMethod', ...
                    'Signal to noise ratio (SNR)','SNR',0);
    hDemod = comm.GMSKDemodulator('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.000133
Number of errors = 4

この例では、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)

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

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)

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

アルゴリズム

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

拡張機能

R2012a で導入