mlseeq
MLSE を使用した線形変調信号のイコライズ
構文
説明
は、最初の構文の引数に加えて、y
= mlseeq(___,nsamp
,init_metric
,init_states
,init_inputs
)x
のシンボルあたりのサンプル数、イコライザーの初期尤度状態メトリクス、初期トレースバック状態、および初期トレースバック入力を指定します。これら 3 つの入力は通常、この関数への前の呼び出しからの final_metric
、final_states
、および final_inputs
の出力です。この構文は opmode
が 'cont'
である場合にのみ適用されます。詳細については、連続操作モードでの初期化を参照してください。
[
は、前述の入力引数の構文のいずれかを使用して、トレースバック復号化プロセスの最後の正規化された最終尤度状態メトリクス、最終トレースバック状態、および最終トレースバック入力を返します。この構文は y
,final_metric
,final_states
,final_inputs
] = mlseeq(___)opmode
が 'cont'
である場合にのみ適用されます。詳細については、連続操作モードでの初期化を参照してください。
例
MLSE イコライザーのリセット操作モードの使用
mlseeq
イコライザーのリセット操作モードを使用します。信号を復調し、ビット エラー レートをチェックします。
変調次数、イコライザーのトレースバック長、シンボルあたりのサンプル数、およびメッセージ長を指定します。
M = 2; tblen = 10; nsamp = 2; msgLen = 1000;
基準コンスタレーションを生成します。
const = pammod([0:M-1],M);
ランダム データを使用してメッセージを生成します。信号を変調してアップサンプリングします。
msgData = randi([0 M-1],msgLen,1); msgSym = pammod(msgData,M); msgSymUp = upsample(msgSym,nsamp);
歪みチャネルを介してデータをフィルター処理し、信号にガウス ノイズを追加します。
chanest = [0.986; 0.845; 0.237; 0.12345+0.31i];
msgFilt = filter(chanest,1,msgSymUp);
msgRx = awgn(msgFilt,5,'measured');
信号をイコライズしてから復調して、メッセージを復元します。イコライザーを初期化するために、チャネル推定、基準コンスタレーション、イコライザーのトレースバック長、およびシンボルあたりのサンプル数を提供し、操作モードをリセットに設定します。メッセージのビット エラー レートをチェックします。この例では乱数を使用しているため、結果は異なる場合があります。
eqSym = mlseeq(msgRx,chanest,const,tblen,'rst',nsamp);
eqMsg = pamdemod(eqSym,M);
[nerrs ber] = biterr(msgData, eqMsg)
nerrs = 0
ber = 0
プリアンブルを含むメッセージの復元
プリアンブルを含むメッセージを復元し、信号をイコライズして、シンボル エラー レートをチェックします。
変調次数、イコライザーのトレースバック長、シンボルあたりのサンプル数、プリアンブル、およびメッセージ長を指定します。
M = 4; tblen = 16; nsamp = 1; preamble = [3;1]; msgLen = 500;
基準コンスタレーションを生成します。
const = pskmod(0:3,4);
ランダム データを使用してメッセージを生成し、メッセージにプリアンブルを付加します。ランダム データを変調します。
msgData = randi([0 M-1],msgLen,1); msgData = [preamble; msgData]; msgSym = pskmod(msgData,M);
歪みチャネルを介してデータをフィルター処理し、信号にガウス ノイズを追加します。
chcoeffs = [0.623; 0.489+0.234i; 0.398i; 0.21];
chanest = chcoeffs;
msgFilt = filter(chcoeffs,1,msgSym);
msgRx = awgn(msgFilt,9,'measured');
受信信号をイコライズします。イコライザーを設定するために、チャネル推定、基準コンスタレーション、イコライザーのトレースバック長、操作モード、シンボルあたりのサンプル数、およびプリアンブルを提供します。同じプリアンブル シンボルがメッセージ ベクトルの始めとmlseeq
に対する構文に現れます。システムがポストアンブルを使用しないので、この mlseeq
構文の最後の入力引数として空のベクトルが指定されます。
イコライズされた信号のシンボル エラー レートをチェックします。乱数を使用しているため、結果は実行するたびに異なります。
eqSym = mlseeq(msgRx,chanest,const,tblen,'rst',nsamp,preamble,[]);
[nsymerrs,ser] = symerr(msgSym,eqSym)
nsymerrs = 7
ser = 0.0139
MLSE イコライザーの連続操作モードの使用
mlseeq
イコライザーの連続操作モードを使用します。受信信号のパケットを復調し、シンボルの誤り統計をチェックします。
変調次数、イコライザーのトレースバック長、シンボルあたりのサンプル数、メッセージ長、および処理するパケット数を指定します。
M = 4; tblen = 10; nsamp = 1; msgLen = 1000; numPkts = 25;
基準コンスタレーションを生成します。
const = pskmod(0:M-1,M);
イコライザーのメトリクス、状態、および入力の初期入力パラメーターを、空のベクトルに設定します。これらの初期割り当ては、送信される最初のパケットのパラメーターを表します。
eq_metric = []; eq_states = []; eq_inputs = [];
シンボルの誤り統計の変数を割り当てます。
ttlSymbErrs = 0; aggrPktSER = 0;
シミュレーション ループで複数のメッセージ パケットを送受信します。パケットの送信と受信の間で、歪みチャネルを介して各パケットをフィルター処理し、ガウス ノイズを追加します。
for jj = 1:numPkts
ランダム データを使用してメッセージを生成します。信号を変調します。
msgData = randi([0 M-1],msgLen,1); msgMod = pskmod(msgData,M);
歪みチャネルを介してデータをフィルター処理し、信号にガウス ノイズを追加します。
chanest = [.986; .845; .237; .12345+.31i];
msgFilt = filter(chanest,1,msgMod);
msgRx = awgn(msgFilt,10,'measured');
受信シンボルをイコライズします。イコライザーを設定するために、チャネル推定、基準コンスタレーション、イコライザーのトレースバック長、操作モード、シンボルあたりのサンプル数、イコライザーの初期化情報を提供します。イコライザーに連続操作モードが指定されます。連続操作モードでは、イコライザーの初期化情報 (メトリクス、状態、および入力) が返され、for
ループの次の反復で入力として使用されます。
[eqSym,eq_metric,eq_states,eq_inputs] = ... mlseeq(msgRx,chanest,const,tblen,'cont',nsamp, ... eq_metric,eq_states,eq_inputs);
シンボルの誤り統計を保存します。集計結果を使用してシンボルの誤り統計を更新します。誤りの合計数を表示します。この例では乱数を使用しているため、結果は異なる場合があります。
[nsymerrs,ser] = symerr(msgMod(1:end-tblen),eqSym(tblen+1:end)); ttlSymbErrs = ttlSymbErrs + nsymerrs; aggrPktSER = aggrPktSER + ser; end printTtlErr = 'A total of %d symbol errors over the %d packets received.\n'; fprintf(printTtlErr,ttlSymbErrs,numPkts);
A total of 167 symbol errors over the 25 packets received.
集計されたシンボル エラー レートを表示します。
printAggrSER = 'The aggregate symbol error rate was %6.5d.\n';
fprintf(printAggrSER,aggrPktSER/numPkts);
The aggregate symbol error rate was 6.74747e-03.
入力引数
x
— 入力信号
ベクトル
入力信号。変調されたシンボルのベクトルとして指定します。x
のベクトル長は nsamp
の整数倍でなければなりません。
データ型: double
複素数のサポート: あり
chcffs
— チャネル係数
ベクトル
チャネル係数。ベクトルとして指定します。チャネル係数は、チャネル応答の推定を提供します。nsamp
> 1 の場合、chcffs
入力はオーバーサンプリング チャネル係数を指定します。
データ型: double
複素数のサポート: あり
const
— 基準コンスタレーション
ベクトル
基準コンスタレーション。M 要素をもつベクトルとして指定します。M は変調次数です。const
は、変調器により使用されるシーケンス内の理想的な信号コンスタレーション点をリストします。
データ型: double
複素数のサポート: あり
tblen
— Traceback depth
正の整数
トレースバック長。正の整数として指定します。イコライザーは最大メトリクスの尤度状態からトレースバックします。
データ型: double
opmode
— Operation mode
'rst'
| 'cont'
操作モード。'rst'
または 'cont'
として指定します。
値 | 使用方法 |
---|---|
'rst' | リセット操作モードを使用してイコライザーを実行します。入力信号に付随する |
'cont' | 連続操作モードを使用してイコライザーを実行します。この関数のその後の呼び出しで使用する、イコライザーの内部状態情報の保存を可能にします。連続操作モードは、入力信号がループ内で処理されてパケットのストリームに分割される場合に役立ちます。この操作モードでは、 |
データ型: char
nsamp
— シンボルあたりのサンプル数
1
(既定値) | 正の整数
preamble
— 入力信号のプリアンブル
整数のベクトル
入力信号のプリアンブル。0 ~ M–1 の整数のベクトルとして指定します。ここで、M は変調次数です。プリアンブルを省略するには、[]
を指定します。
詳細については、リセット操作モードのプリアンブルおよびポストアンブルを参照してください。
依存関係
この入力引数は、opmode
を 'rst'
に設定した場合にのみ適用されます。
データ型: double
postamble
— 入力信号のポストアンブル
整数のベクトル
入力信号のポストアンブル。0 ~ M–1 の間の整数のベクトルとして指定します。ここで、M は変調次数です。ポストアンブルを省略するには、[]
を指定します。
詳細については、リセット操作モードのプリアンブルおよびポストアンブルを参照してください。
依存関係
この入力引数は、opmode
を 'rst'
に設定した場合にのみ適用されます。
データ型: double
init_metric
— 初期状態メトリクス
[ ] (既定値) | 列ベクトル
初期状態メトリクス。Nstates 要素をもつ列ベクトルとして指定します。Nstates の詳細については、尤度状態の数を参照してください。
詳細については、連続操作モードでの初期化を参照してください。
依存関係
この入力引数は、opmode
を 'cont'
に設定した場合にのみ適用されます。init_metric
に []
を指定する場合は、init_states
と init_inputs
にも []
を指定しなければなりません。
データ型: double
init_states
— 初期トレースバック状態
[ ] (既定値) | 整数の行列
初期トレースバック状態。0 ~ Nstates–1 の値をもつ整数の Nstates 行 tblen
列の行列として指定します。Nstates の詳細については、尤度状態の数を参照してください。
詳細については、連続操作モードでの初期化を参照してください。
依存関係
この入力引数は、opmode
を 'cont'
に設定した場合にのみ適用されます。init_states
に []
を指定する場合は、init_metric
と init_inputs
にも []
を指定しなければなりません。
データ型: double
init_inputs
— 初期トレースバック入力
[]
(既定値) | 整数の行列
初期トレースバック入力。0 ~ M–1 の値をもつ整数の Nstates 行 tblen
列の行列として指定します。Nstates の詳細については、尤度状態の数を参照してください。
詳細については、連続操作モードでの初期化を参照してください。
依存関係
この入力引数は、opmode
を 'cont'
に設定した場合にのみ適用されます。init_inputs
に []
を指定する場合は、init_metric
と init_states
にも []
を指定しなければなりません。
データ型: double
出力引数
y
— 出力信号
ベクトル
出力信号。変調されたシンボルのベクトルとして返されます。
final_metric
— 最終正規化状態メトリクス
ベクトル
最終正規化状態メトリクス。Nstates 要素をもつベクトルとして返されます。final_metric
は、トレースバック復号化プロセスの最後の最終状態メトリクスに対応します。Nstates の詳細については、尤度状態の数を参照してください。
詳細については、連続操作モードでの初期化を参照してください。
final_states
— 最終トレースバック状態
ベクトル
最終トレースバック状態。0 ~ Nstates–1 の値をもつ整数の Nstates 行 tblen
列の行列として返されます。final_states
は、トレースバック復号化プロセスの最後の最終トレースバック状態に対応します。Nstates の詳細については、尤度状態の数を参照してください。
詳細については、連続操作モードでの初期化を参照してください。
final_inputs
— 最終トレースバック入力
ベクトル
最終トレースバック入力。0 ~ M–1 の値をもつ整数の Nstates 行 tblen
列の行列として返されます。final_inputs
は、トレースバック復号化プロセスの最後の最終トレースバック入力に対応します。M は変調の次数です。Nstates の詳細については、尤度状態の数を参照してください。
詳細については、連続操作モードでの初期化を参照してください。
詳細
ビタビ アルゴリズム
リセット操作モードのプリアンブルおよびポストアンブル
リセット モードで MLSE イコライザーを操作する場合は、プリアンブルとポストアンブルを入力引数として指定できます。入力信号の最初と最後にそれぞれ追加されるプリアンブルとポストアンブルに等しいベクトルとして、preamble
と postamble
を指定します。preamble
ベクトルと postamble
ベクトルは、0 ~ M-1 の整数で構成されます。ここで、M は const
の要素数です。preamble
入力引数または postamble
入力引数を省略するには、[]
を指定します。
関数がビタビ アルゴリズムを適用する場合、プリアンブル、ポストアンブル、またはその両方を指定する方法に従って状態メトリクスを初期化します。
preamble
が空でない場合、関数はプリアンブルを復号化し、0 のメトリクスを復号化された状態に割り当てます。プリアンブルが一意の状態を復号化しない (プリアンブルの長さがチャネル メモリよりも小さい) 場合、復号化器は 0 のメトリクスをプリアンブルで示されるすべての状態に割り当てます。トレースバック パスはプリアンブルで示される状態の 1 つで終わります。preamble
が[]
の場合、復号化器はすべての状態のメトリクスを 0 に初期化します。postamble
が空でない場合、トレースバック パスはポストアンブルで示されるすべての可能な複合化された状態のうち最小の状態で開始されます。postamble
が[]
の場合、トレースバック パスは、最小メトリクスの状態で開始します。
連続操作モードでの初期化
連続モードで MLSE イコライザーを操作する場合は、関数の前回の呼び出しで返された値に基づいてイコライズを初期化できます。
トレースバック復号化プロセスの最後に、関数は final_metric
、final_states
、および final_inputs
を返します。opmode
が 'cont'
の場合は、関数の次の呼び出しのために、これらの出力がそれぞれ init_metric
、init_states
、および init_inputs
に割り当てられます。この割り当てにより、関数の前回の呼び出しからの最終状態メトリクス、最終トレースバック状態、および最終トレースバック入力で開始するようにイコライザーが初期化されます。
init_metric
の各実数は対応する状態の開始状態メトリクスを表します。init_states
および init_inputs
は、共同でイコライザーの初期トレースバック メモリを指定します。
出力引数 | 入力引数 | 意味 | 行列のサイズ | 値の範囲 |
---|---|---|---|---|
final_metric | init_metric | 状態メトリクス | 1 行 Nstates 列 | 実数 |
final_states | init_states | トレースバック状態 | Nstates 行 tblen 列 | 0 ~ Nstates–1 の整数 |
fianl_inputs | init_inputs | トレースバック入力 | Nstates 行 tblen 列 | 0 ~ M–1 の整数 |
init_metric
、init_states
、および init_inputs
の既定値を使用するには、それぞれ []
として指定します。Nstates の詳細については、尤度状態の数を参照してください。
尤度状態の数
尤度状態の数。Nstates は、トレリス内の相関位相状態の数です。Nstates は ML-1 に等しく、ここで M は const
内の要素数、L はチャネルのオーバーサンプリングされていないインパルス応答内のシンボル数です。
参照
[1] Proakis, John G. Digital Communications, Fourth Edition. New York: McGraw-Hill, 2001.
[2] Steele, Raymond, Ed. Mobile Radio Communications. Chichester, England: John Wiley & Sons, 1996.
バージョン履歴
R2006a より前に導入
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)