Main Content

comm.CPMModulator

CPM 法を使用した信号の変調

説明

comm.CPMModulator System object™ は、連続位相変調 (CPM) 法を使用して入力信号を変調します。出力は、変調信号のベースバンド表現です。変調および適用されるフィルター処理の詳細については、CPM 法およびパルス整形のフィルター処理を参照してください。

CPM 法を使用して信号を変調するには、次のようにします。

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

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

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

作成

説明

cpmmod = comm.CPMModulator は、CPM 法を使用して入力信号を変調する変調器 System object を作成します。

cpmmod = comm.CPMModulator(Name,Value) は、名前と値の引数を 1 つ以上使用してプロパティを設定します。たとえば、'SymbolMapping','Gray' は、変調されたシンボルに対してグレイ符号順のシンボル マッピングを指定します。

cpmmod = comm.CPMModulator(M,Name,Value) は、ModulationOrder プロパティを M に設定し、オプションで名前と値の引数を設定します。

プロパティ

すべて展開する

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

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

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

変調次数。2 のべき乗のスカラーとして指定します。変調次数 M = 2k は、信号コンスタレーション点の数を指定します。ここで、k は、シンボルごとのビット数を示す正の整数です。

データ型: double

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

  • このプロパティを false に設定する場合、入力は範囲 [–(ModulationOrder – 1), (ModulationOrder – 1)] の奇数整数値の列ベクトルでなければなりません。

  • このプロパティを true に設定する場合、入力は長さ k のビット ワードの列ベクトルでなければなりません。ここで、k = log2(ModulationOrder) です。詳細については、シンボル セットを参照してください。

データ型: logical

コンスタレーション ビットのシンボル マッピング。'Binary' または 'Gray' として指定します。詳細については、シンボル セットを参照してください。

  • このプロパティを 'Binary' に設定すると、バイナリ符号の順序を使用してシンボルがマッピングされます。

  • このプロパティを 'Gray' に設定すると、グレイ符号の順序を使用してシンボルがマッピングされます。

依存関係

このプロパティを有効にするには、BitInput プロパティを true に設定します。

変調指数。非負のスカラーまたは列ベクトルとして指定します。詳細については、CPM 法を参照してください。

データ型: double

変調された信号の位相遷移を滑らかにするために変調器が使用する周波数パルス整形のタイプ。'Rectangular''Raised Cosine''Spectral Raised Cosine''Gaussian'、または 'Tamed FM' として指定します。詳細については、パルス整形のフィルター処理を参照してください。

スペクトル レイズド コサイン パルスの最大ローブのメイン ローブ期間。変調された信号をパルス整形するために変調器が使用するシンボル区間の数を表す正の整数として指定します。

依存関係

このプロパティを有効にするには、FrequencyPulse プロパティを 'Spectral Raised Cosine' に設定します。

データ型: double

スペクトル レイズド コサイン パルスのロールオフ係数。範囲が [0, 1] のスカラーとして指定します。

依存関係

このプロパティを有効にするには、FrequencyPulse プロパティを 'Spectral Raised Cosine' に設定します。

データ型: double

ガウス パルス整形の帯域幅とシンボル時間の積。正のスカラーとして指定します。BandwidthTimeProduct は、符号間干渉の増加を代償に帯域幅を狭くするために使われます。

依存関係

このプロパティを有効にするには、FrequencyPulse プロパティを 'Gaussian' に設定します。

データ型: double

シンボル区間における周波数パルス整形の長さ。正の整数として指定します。周波数パルス長の詳細については、パルス整形のフィルター処理の LT を参照してください。

データ型: double

シンボル プレヒストリ。範囲 [– (ModulationOrder – 1), (ModulationOrder – 1)] の奇数の整数要素をもつスカラーまたはベクトルとして指定します。このプロパティは、オブジェクトの最初の呼び出しの前に、変調器によって使用されるデータ シンボルを新しいものから順番に定義します。

  • スカラー値は長さ PulseLength – 1 のベクトルに展開されます。

  • ベクトルの場合、長さが PulseLength – 1 でなければなりません。

データ型: double

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

データ型: double

出力シンボルあたりのサンプル数。正の整数として指定します。このプロパティは、入力される各整数またはバイナリ ワードごとのサンプル出力の数を表します。パルス整形で定義されているように、すべての非バイナリ スキームに対して、この値は 1 より大きくなければなりません。

データ型: double

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

使用法

説明

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

入力引数

すべて展開する

入力信号のデータ。整数またはビットの列ベクトルまたは行列として指定します。詳細については、BitInput プロパティを参照してください。

データ型: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32 | logical

出力引数

すべて展開する

CPM 変調されたベースバンド信号。列ベクトルとして返されます。この出力ベクトルの長さは、入力サンプル数と SamplesPerSymbol プロパティで指定されたシンボルあたりのサンプル数を掛け合わせたものと同じです。出力データ型を指定するには、OutputDataType プロパティを使用します。

データ型: double | single
複素数のサポート: あり

オブジェクト関数

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

release(obj)

すべて展開する

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

すべて折りたたむ

CPM 変調器 System object と CPM 復調器 System object を作成します。

    cpmmodulator = comm.CPMModulator(8, ...
        'BitInput',true, ...
        'SymbolMapping','Gray');
    cpmdemodulator = comm.CPMDemodulator(8, ...
        'BitOutput',true, ...
        'SymbolMapping','Gray');

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

    delay = log2(cpmdemodulator.ModulationOrder) ...
        * cpmdemodulator.TracebackDepth;
    errorRate = comm.ErrorRate('ReceiveDelay',delay);

3 ビットのワードを 100 個送信し、エラー レートの結果を出力します。

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

comm.CPMModulatorcomm.CPMDemodulatorSystem object を使用して、ガウス周波数偏移変調 (GFSK) の変調と復調をランダム ビット データに適用します。

GFSK の変調器と復調器のペアを作成します。

gfskMod = comm.CPMModulator( ...
    'ModulationOrder',2, ...
    'FrequencyPulse','Gaussian', ...
    'BandwidthTimeProduct',0.5, ...
    'ModulationIndex',1, ...
    'BitInput',true);
gfskDemod = comm.CPMDemodulator( ...
    'ModulationOrder',2, ...
    'FrequencyPulse','Gaussian', ...
    'BandwidthTimeProduct',0.5, ...
    'ModulationIndex',1, ...
    'BitOutput',true);

ランダム ビット データを生成して GFSK 変調を適用します。散布図を使用してコンスタレーションを表示します。

numSym = 100;
x = randi([0 1],numSym*gfskMod.SamplesPerSymbol,1);
y = gfskMod(x);
eyediagram(y,16)

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.

GFSK 変調されたデータを復調します。復調された信号データが元のデータと等しいことを検証するには、GFSK の変調と復調のプロセスでガウス フィルター処理によって発生する遅延を考慮します。

z = gfskDemod(y);
delay = finddelay(x,z);
isequal(x(1:end-delay),z(delay+1:end))
ans = logical
   1

連続位相変調 (CPM) を適用した信号の位相ツリー ダイアグラムをプロットします。"位相ツリー ダイアグラム" は時間の経過に伴う変調信号の位相をプロットした曲線を多数重ね合わせたものです。明確な曲線は、変調器へのさまざまな入力から生成されます。この例では、CPM 変調器の設定を定義し、シンボル マッピングを適用して、結果をプロットします。各曲線は、識別可能な (定数) 入力信号による CPM 変調器のシミュレーションの異なるインスタンスを表します。

例で使用するパラメーターを定義し、CPM 変調器 System object™ を作成します。

M = 2;                   % Modulation order
modindex = 2/3;          % Modulation index
sps = 8;                 % Samples per symbol
L = 5;                   % Symbols to display
pmat = zeros(L*sps,M^L); % Empty phase matrix 

cpm = comm.CPMModulator(M, ...
    ModulationIndex=modindex, ...
    FrequencyPulse="Raised Cosine", ...
    PulseLength=2, ...
    SamplesPerSymbol=sps);

for ループを使用して、0 が -(M-1) に、1 が -(M-2) になるように (以下同様) マップし、入力シンボルのマッピングを CPM シンボルに適用します。位相行列の列に、変調シンボルのアンラップ位相角を入力します。

for ip_sig = 0:(M^L)-1
    s = int2bit(ip_sig,L,1);
    s = 2*s + 1 - M;
    x = cpm(s);
    pmat(:,ip_sig+1) = unwrap(angle(x(:)));
end
pmat = pmat/(pi*modindex);
t = (0:L*sps-1)'/sps;

CPM 位相ツリーをプロットします。

plot(t,pmat);
title('CPM Phase Tree')
xlabel('Samples')
ylabel('Phase (radians)')

Figure contains an axes object. The axes object with title CPM Phase Tree, xlabel Samples, ylabel Phase (radians) contains 32 objects of type line.

詳細

すべて展開する

参照

[1] Anderson, John B., Tor Aulin, and Carl-Erik Sundberg. Digital Phase Modulation. New York: Plenum Press, 1986.

拡張機能

バージョン履歴

R2012a で導入

すべて展開する