このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
comm.CPMDemodulator
CPM 法とビタビ アルゴリズムを使用した信号の復調
説明
comm.CPMDemodulator
System object™ は、連続位相変調 (CPM) 法を使用して変調された入力信号を復調します。入力は、変調信号のベースバンド表現です。復調および適用されるフィルター処理の詳細については、CPM 復調法およびパルス整形のフィルター処理を参照してください。
CPM 法を使用して変調された信号を復調するには、次のようにします。
comm.CPMDemodulator
オブジェクトを作成し、そのプロパティを設定します。関数と同様に、引数を指定してオブジェクトを呼び出します。
System object の機能の詳細については、System object とはを参照してください。
作成
構文
説明
cpmdemod = comm.CPMDemodulator
は、ビタビ アルゴリズムを使用して入力 CPM 信号を復調する復調器 System object を作成します。
cpmdemod = comm.CPMDemodulator(
は、名前と値の引数を 1 つ以上使用してプロパティを設定します。たとえば、Name
,Value
)'SymbolMapping','Gray'
は、変調されたシンボルに対してグレイ符号順のシンボル マッピングを指定します。
cpmdemod = comm.CPMDemodulator(
は、M
,Name
,Value
)ModulationOrder
プロパティを M
に設定し、オプションで名前と値の引数を設定します。
プロパティ
特に指定がない限り、プロパティは "調整不可能" です。つまり、オブジェクトの呼び出し後に値を変更することはできません。オブジェクトは呼び出すとロックされ、ロックを解除するには関数 release
を使用します。
プロパティが "調整可能" の場合、その値をいつでも変更できます。
プロパティ値の変更の詳細については、System object を使用した MATLAB でのシステム設計を参照してください。
ModulationOrder
— 変調次数
4 (既定値) | 2 のべき乗のスカラー
変調次数。2 のべき乗のスカラーとして指定します。変調次数 M = 2k は、信号コンスタレーション点の数を指定します。ここで、k は、シンボルごとのビット数を示す正の整数です。
データ型: double
BitOutput
— ビットとしてデータを出力するオプション
0
または false
(既定値) | 1
または true
ビットとしてデータを出力するオプション。logical 0
(false
) または logical 1
(true
) として指定します。
整数としてデータを出力するには、このプロパティを
false
に設定します。ビットとしてデータを出力するには、このプロパティを
true
に設定します。
詳細については、整数値とバイナリ値の出力信号を参照してください。
データ型: logical
SymbolMapping
— シンボルの符号化
'Binary'
(既定値) | 'Gray'
コンスタレーション ビットのシンボルの符号化マッピング。'Binary'
または 'Gray'
として指定します。
このプロパティを
'Binary'
に設定すると、バイナリ符号の順序を使用してシンボルがマッピングされます。このプロパティを
'Gray'
に設定すると、グレイ符号の順序を使用してシンボルがマッピングされます。
詳細については、整数値とバイナリ値の出力信号を参照してください。
依存関係
このプロパティを有効にするには、BitOutput
プロパティを true
に設定します。
ModulationIndex
— 変調指数
0.5
(既定値) | 非負のスカラー | 列ベクトル
変調指数。非負のスカラーまたは列ベクトルとして指定します。詳細については、CPM 復調法を参照してください。
データ型: double
FrequencyPulse
— 周波数パルス整形のタイプ
'Rectangular'
(既定値) | 'Raised Cosine'
| 'Spectral Raised Cosine'
| 'Gaussian'
| 'Tamed FM'
変調された信号の位相遷移を滑らかにするために変調器が使用する周波数パルス整形のタイプ。'Rectangular'
、'Raised Cosine'
、'Spectral Raised Cosine'
、'Gaussian'
、または 'Tamed FM'
として指定します。詳細については、パルス整形のフィルター処理を参照してください。
MainLobeDuration
— メイン ローブ期間
1
(既定値) | 正の整数
スペクトル レイズド コサイン パルスの最大ローブのメイン ローブ期間。変調された信号をパルス整形するために復調器が使用するシンボル区間の数を表す正の整数として指定します。
依存関係
このプロパティを有効にするには、FrequencyPulse
プロパティを 'Spectral Raised Cosine'
に設定します。
データ型: double
RolloffFactor
— ロールオフ係数
0.2
(既定値) | 範囲 [0,1] のスカラー
スペクトル レイズド コサイン パルスのロールオフ係数。範囲が [0, 1] のスカラーとして指定します。
依存関係
このプロパティを有効にするには、FrequencyPulse
プロパティを 'Spectral Raised Cosine'
に設定します。
データ型: double
BandwidthTimeProduct
— ガウス パルス整形の帯域幅とシンボル時間の積
0.3
(既定値) | 正のスカラー
ガウス パルス整形の帯域幅とシンボル時間の積。正のスカラーとして指定します。BandwidthTimeProduct
は、符号間干渉の増加を代償に帯域幅を狭くするために使われます。
依存関係
このプロパティを有効にするには、FrequencyPulse
プロパティを 'Gaussian'
に設定します。
データ型: double
PulseLength
— 周波数パルス整形の長さ
1
(既定値) | 正の整数
シンボル区間における周波数パルス整形の長さ。正の整数として指定します。周波数パルス長の詳細については、パルス整形のフィルター処理の LT を参照してください。
データ型: double
SymbolPrehistory
— シンボル プレヒストリ
1
(既定値) | スカラー | ベクトル
シンボル プレヒストリ。範囲 [– (ModulationOrder
– 1), (ModulationOrder
– 1)] の奇数の整数要素をもつスカラーまたはベクトルとして指定します。このプロパティは、オブジェクトの最初の呼び出しの前に、変調器によって使用されるデータ シンボルを新しいものから順番に定義します。
スカラー値は長さ
PulseLength
– 1 のベクトルに展開されます。ベクトルの場合、長さが
PulseLength
– 1 でなければなりません。
データ型: double
InitialPhaseOffset
— 初期位相オフセット
0
(既定値) | スカラー
変調波形の初期位相オフセット (ラジアン単位)。スカラーとして指定します。
データ型: double
SamplesPerSymbol
— 入力シンボルあたりのサンプル数
8
(既定値) | 正の整数
入力シンボルあたりのサンプル数。正の整数として指定します。このプロパティは、出力される整数またはバイナリ ワードごとのサンプル入力の数を表します。パルス整形で定義されているように、すべての非バイナリ スキームに対して、この値は 1 より大きくなければなりません。
データ型: double
TracebackDepth
— ビタビ アルゴリズムのトレースバック長
16
(既定値) | 正の整数
ビタビ アルゴリズムのトレースバック長。ビタビ アルゴリズムが各トレースバック パスの構築に使用するトレリス分岐の数を表す正の整数として指定します。このプロパティの値はまた出力遅延であり、出力内の復調された最初の有意なシンボルに先立つ 0 シンボルの数です。詳細については、トレースバック長と出力遅延を参照してください。
データ型: double
OutputDataType
— 出力のデータ型
'double'
(既定値) | 'single'
| 'logical'
| 'int8'
| 'int16'
| 'int32'
| 'uint8'
| 'uint16'
| 'uint32'
出力のデータ型。'double'
、'int8'
、'int16'
、'int32'
、'int32'
、'uint8'
、'uint16'
、'uint32'
、または 'logical'
として、出力のデータ型として指定します。
BitOutput
プロパティをfalse
に設定した場合、出力データ型には'double'
、'single'
、'int8'
、'int16'
、または'int32'
を設定できます。BitOutput
プロパティをtrue
に設定した場合、出力データ型には'double'
、'single'
、'int8'
、'int16'
、'int32'
、'uint8'
、'uint16'
、'uint32'
、または'logical'
を設定できます。
使用法
入力引数
X
— CPM 変調された信号
列ベクトル
CPM 変調された信号。SamplesPerSymbol
プロパティの整数倍と同じ長さの列ベクトルとして指定します。
データ型: double
| single
複素数のサポート: あり
出力引数
Y
— 出力信号
列ベクトル | 行列
出力信号。列ベクトルまたは行列として返されます。オブジェクトが値を整数として出力するかビットとして出力するかを指定するには、BitOutput
プロパティを使用します。出力データ型を指定するには、OutputDataType
プロパティを使用します。
詳細については、整数値とバイナリ値の出力信号を参照してください。
データ型: single
| double
| int8
| int16
| int32
| uint8
| uint16
| uint32
| logical
オブジェクト関数
オブジェクト関数を使用するには、System object を最初の入力引数として指定します。たとえば、obj
という名前の System object のシステム リソースを解放するには、次の構文を使用します。
release(obj)
例
グレイ マッピングとビット入力による信号の CPM 変調と CPM 復調
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
GFSK 変調と復調の適用
comm.CPMModulator
とcomm.CPMDemodulator
System 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)
GFSK 変調されたデータを復調します。復調された信号データが元のデータと等しいことを検証するには、GFSK の変調と復調のプロセスでガウス フィルター処理によって発生する遅延を考慮します。
z = gfskDemod(y); delay = finddelay(x,z); isequal(x(1:end-delay),z(delay+1:end))
ans = logical
1
詳細
CPM 復調法
CPM 復調法のプロセスは、相関器とそれに続く最尤系列検出器 (MLSD) で構成されます。MLSD は、状態トレリスのパスから最小ユークリッド距離のパスを求めます。変調指数が有理数 (h = m/p) の場合、シンボル内の位相状態の数は有限です。実装では、ビタビ アルゴリズムを使用して MLSD を実行します。
{hi} は、一連の指数 {h0, h1, h2, …,hH-1} を巡回する変調指数のシーケンスです。
hi = mi / pi は適切な有理式で示した変調指数です。
mi は変調指数の分子です。
pi は変調指数の分母です。
mi および pi は互いに素である正の数値です。
{p0, p1, p2, …,pH-1} の最小公倍数 (LCM) は p で表されます。
hi= m'i / p.
{hi} によって、位相状態の数が次のように決まります。
また、トレリス状態の数にも影響します。
numStates = numPhaseStates×M(L-1),
L はパルスの長さです。
M は変調次数です。
CPM 法
復調器への入力は、変調信号のベースバンド表現です。
ここで、
{αi} はアルファベット ±1、±3、±(M–1) から選択した M-ary データ シンボルのシーケンスです。
M は、ある正の整数 k に対する 2k の形式をとらなければなりません。ここで、M は変調次数であり、シンボル アルファベットのサイズを指定します。
{hi} は変調指数のシーケンスです。hi は、一連の指数 {h0, h1, h2, …,hH-1} を巡回します。H=1 の場合、変調指数は h0 の 1 つのみで、h として表されます。
パルス整形のフィルター処理
CPM 法では、変調された信号の位相遷移を滑らかにするためにパルス整形を使用します。関数 q(t) は、 の関係によって周波数パルス g(t) から得られる位相応答です。
指定された周波数パルス整形は、g(t) のこれらのパルス整形式に対応します。
パルス整形 | 式 |
---|---|
Rectangular | |
Raised Cosine | |
Spectral Raised Cosine | |
Gaussian | |
Tamed FM (管理された周波数変調) |
Lmain は、シンボル区間におけるメイン ローブ パルス存続時間です。
β はスペクトル レイズド コサインのロールオフ係数です。
Bb は帯域幅とガウス パルスの積です。
パルスの持続時間 LT は、シンボル区間におけるパルス長です。式で定義されているとおり、スペクトル レイズド コサイン、ガウス、および Tamed FM のパルス整形は無限長をもちます。実用性のため、LT は切り捨てられた有限長を指定します。
T はシンボル持続時間です。
Q(t) は相補累積分布関数です。
パルス整形のフィルター処理の詳細については、[1]を参照してください。
整数値とバイナリ値の出力信号
BitOutput
プロパティが false
に設定されている場合は以下のようになります。
オブジェクトは、N/
SamplesPerSymbol
と同じ長さの整数列ベクトルを出力します。ここで、N は入力信号の長さで、入力ベースバンド変調シンボルの数を示します。出力値は、範囲 [–(ModulationOrder
–1), (ModulationOrder
–1)] の奇数の整数です。OutputDataType
プロパティを'logical'
に設定することはできません。
BitOutput
プロパティが true
に設定されている場合は以下のようになります。
オブジェクトは、k×(N /
SamplesPerSymbol
) と同じ長さのバイナリ列ベクトルを出力します。ここで、k = log2(ModulationOrder
) と N は、入力ベースバンド変調シンボルの数 (具体的には入力信号の長さ) です。SymbolMapping
プロパティは、オブジェクトが範囲 [0,ModulationOrder
– 1] の整数を長さ k のビット ワードにマップする方法を決定します。バイナリ ワード マッピング オプションは、バイナリ符号の順序またはグレイ符号の順序です。OutputDataType
プロパティは、'double'
または'logical'
にのみ設定できます。オブジェクトは次のプロセスに従います。
復調された各シンボルを、範囲 [–(
ModulationOrder
–1), (ModulationOrder
–1)] の奇数の整数 L にマップします。L を非負の整数 (L +
ModulationOrder
–1)/2 にマップします。それぞれの非負の整数を、長さ k のバイナリ ワードにマップします。バイナリ ワード マッピング オプションは、
SymbolMapping
プロパティの指定に従って、バイナリ符号の順序またはグレイ符号の順序になります。
トレースバック長と出力遅延
トレースバック長とは、各トレースバック パスの構築に使用するトレリス分岐の数です。トレースバック長は出力の遅延に影響します。これは出力内の復調された最初の有意な値に先立つ 0 シンボルの数です。
最適なトレースバック長設定は、ユークリッド距離の最小二乗値に依存します。別の方法として、状態数に依存する標準値を選択することも可能で、その際に使用する "拘束長の 5 倍" ルールは 5log2(numStates) に対応します。
パルス長 3、h=2/3 のバイナリ レイズド コサイン パルス整形の場合、このルール (5log2(3×22) = 18 により、最適値の 20 に近い結果が生成されます。
参照
[1] Anderson, John B., Tor Aulin, and Carl-Erik Sundberg. Digital Phase Modulation. New York: Plenum Press, 1986.
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
使用上の注意および制限:
MATLAB コード生成における System object (MATLAB Coder)を参照してください。
バージョン履歴
R2012a で導入R2023b: 可変サイズのサポート
このサポートによって、オブジェクトを呼び出すたびに入力信号の長さを変えられるようになりました。
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)