Main Content

mlseeq

MLSE を使用した線形変調信号のイコライズ

説明

y = mlseeq(x,chcffs,const,tblen,opmode) は、最尤系列推定 (MLSE) を使用してベースバンド信号ベクトル x をイコライズします。chcffs は、推定されたチャネル係数を提供します。const は、理想的な信号コンスタレーション点を提供します。tblen は、トレースバック長を指定します。opmode は、イコライザーの操作モードを指定します。MLSE は、ビタビ アルゴリズムを使用して実装されます。

y = mlseeq(___,nsamp) は、前述の構文の引数に加えて、x のシンボルあたりのサンプル数を指定します。

y = mlseeq(___,nsamp,preamble,postamble) は、最初の構文の引数に加えて、x のシンボルあたりのサンプル数、プリアンブル、およびポストアンブルを指定します。この構文は opmode'rst' である場合にのみ適用されます。詳細については、リセット操作モードのプリアンブルおよびポストアンブルを参照してください。

y = mlseeq(___,nsamp,init_metric,init_states,init_inputs) は、最初の構文の引数に加えて、x のシンボルあたりのサンプル数、イコライザーの初期尤度状態メトリクス、初期トレースバック状態、および初期トレースバック入力を指定します。これら 3 つの入力は通常、この関数への前の呼び出しからの final_metricfinal_states、および final_inputs の出力です。この構文は opmode'cont' である場合にのみ適用されます。詳細については、連続操作モードでの初期化を参照してください。

[y,final_metric,final_states,final_inputs] = mlseeq(___) は、前述の入力引数の構文のいずれかを使用して、トレースバック復号化プロセスの最後の正規化された最終尤度状態メトリクス、最終トレースバック状態、および最終トレースバック入力を返します。この構文は opmode'cont' である場合にのみ適用されます。詳細については、連続操作モードでの初期化を参照してください。

すべて折りたたむ

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

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 のベクトル長は nsamp の整数倍でなければなりません。

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

チャネル係数。ベクトルとして指定します。チャネル係数は、チャネル応答の推定を提供します。nsamp > 1 の場合、chcffs 入力はオーバーサンプリング チャネル係数を指定します。

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

基準コンスタレーション。M 要素をもつベクトルとして指定します。M は変調次数です。const は、変調器により使用されるシーケンス内の理想的な信号コンスタレーション点をリストします。

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

トレースバック長。正の整数として指定します。イコライザーは最大メトリクスの尤度状態からトレースバックします。

データ型: double

操作モード。'rst' または 'cont' として指定します。

使用方法
'rst'

リセット操作モードを使用してイコライザーを実行します。入力信号に付随する preamblepostamble を指定できます。関数は入力信号 x をこの関数のその他の呼び出しからの入力信号とは独立して処理します。この操作モードでは、出力遅延は生じません。詳細については、リセット操作モードのプリアンブルおよびポストアンブルを参照してください。

'cont'

連続操作モードを使用してイコライザーを実行します。この関数のその後の呼び出しで使用する、イコライザーの内部状態情報の保存を可能にします。連続操作モードは、入力信号がループ内で処理されてパケットのストリームに分割される場合に役立ちます。この操作モードでは、tblen シンボルの出力遅延が生じます。詳細については、連続操作モードでの初期化を参照してください。

データ型: char

正の整数として指定される、シンボルあたりのサンプル数。nsamp はオーバーサンプリング係数です。

依存関係

入力信号 x は、nsamp の整数倍でなければなりません。

データ型: double

入力信号のプリアンブル。0 ~ M–1 の整数のベクトルとして指定します。ここで、M は変調次数です。プリアンブルを省略するには、[] を指定します。

詳細については、リセット操作モードのプリアンブルおよびポストアンブルを参照してください。

依存関係

この入力引数は、opmode'rst' に設定した場合にのみ適用されます。

データ型: double

入力信号のポストアンブル。0 ~ M–1 の間の整数のベクトルとして指定します。ここで、M は変調次数です。ポストアンブルを省略するには、[] を指定します。

詳細については、リセット操作モードのプリアンブルおよびポストアンブルを参照してください。

依存関係

この入力引数は、opmode'rst' に設定した場合にのみ適用されます。

データ型: double

初期状態メトリクス。Nstates 要素をもつ列ベクトルとして指定します。Nstates の詳細については、尤度状態の数を参照してください。

詳細については、連続操作モードでの初期化を参照してください。

依存関係

この入力引数は、opmode'cont' に設定した場合にのみ適用されます。init_metric[] を指定する場合は、init_statesinit_inputs にも [] を指定しなければなりません。

データ型: double

初期トレースバック状態。0 ~ Nstates–1 の値をもつ整数の Nstatestblen 列の行列として指定します。Nstates の詳細については、尤度状態の数を参照してください。

詳細については、連続操作モードでの初期化を参照してください。

依存関係

この入力引数は、opmode'cont' に設定した場合にのみ適用されます。init_states[] を指定する場合は、init_metricinit_inputs にも [] を指定しなければなりません。

データ型: double

初期トレースバック入力。0 ~ M–1 の値をもつ整数の Nstatestblen 列の行列として指定します。Nstates の詳細については、尤度状態の数を参照してください。

詳細については、連続操作モードでの初期化を参照してください。

依存関係

この入力引数は、opmode'cont' に設定した場合にのみ適用されます。init_inputs[] を指定する場合は、init_metricinit_states にも [] を指定しなければなりません。

データ型: double

出力引数

すべて折りたたむ

出力信号。変調されたシンボルのベクトルとして返されます。

最終正規化状態メトリクス。Nstates 要素をもつベクトルとして返されます。final_metric は、トレースバック復号化プロセスの最後の最終状態メトリクスに対応します。Nstates の詳細については、尤度状態の数を参照してください。

詳細については、連続操作モードでの初期化を参照してください。

最終トレースバック状態。0 ~ Nstates–1 の値をもつ整数の Nstatestblen 列の行列として返されます。final_states は、トレースバック復号化プロセスの最後の最終トレースバック状態に対応します。Nstates の詳細については、尤度状態の数を参照してください。

詳細については、連続操作モードでの初期化を参照してください。

最終トレースバック入力。0 ~ M–1 の値をもつ整数の Nstatestblen 列の行列として返されます。final_inputs は、トレースバック復号化プロセスの最後の最終トレースバック入力に対応します。M は変調の次数です。Nstates の詳細については、尤度状態の数を参照してください。

詳細については、連続操作モードでの初期化を参照してください。

詳細

すべて折りたたむ

ビタビ アルゴリズム

ビタビ アルゴリズムは、最尤系列検出を実行するために使用される、逐次トレリス探索アルゴリズムです。

MLSE イコライザーは、ビタビ アルゴリズムを使用して、尤度関数を最大化するシーケンスを再帰的に探索します。ビタビ アルゴリズムを使用すると、新しいデータが受信されたときにシーケンスが除去されることで、トレリス探索のシーケンス数が減少します。最尤系列を決定するために使用されるメトリクスは、受信信号と、尤度状態の数の各受信シンボルの推定信号との間の相関です。

詳細については、[1][2]を参照してください。

リセット操作モードのプリアンブルおよびポストアンブル

リセット モードで MLSE イコライザーを操作する場合は、プリアンブルとポストアンブルを入力引数として指定できます。入力信号の最初と最後にそれぞれ追加されるプリアンブルとポストアンブルに等しいベクトルとして、preamblepostamble を指定します。preamble ベクトルと postamble ベクトルは、0 ~ M-1 の整数で構成されます。ここで、M は const の要素数です。preamble 入力引数または postamble 入力引数を省略するには、[] を指定します。

関数がビタビ アルゴリズムを適用する場合、プリアンブル、ポストアンブル、またはその両方を指定する方法に従って状態メトリクスを初期化します。

  • preamble が空でない場合、関数はプリアンブルを復号化し、0 のメトリクスを復号化された状態に割り当てます。プリアンブルが一意の状態を復号化しない (プリアンブルの長さがチャネル メモリよりも小さい) 場合、復号化器は 0 のメトリクスをプリアンブルで示されるすべての状態に割り当てます。トレースバック パスはプリアンブルで示される状態の 1 つで終わります。

  • preamble[] の場合、復号化器はすべての状態のメトリクスを 0 に初期化します。

  • postamble が空でない場合、トレースバック パスはポストアンブルで示されるすべての可能な複合化された状態のうち最小の状態で開始されます。

  • postamble[] の場合、トレースバック パスは、最小メトリクスの状態で開始します。

連続操作モードでの初期化

連続モードで MLSE イコライザーを操作する場合は、関数の前回の呼び出しで返された値に基づいてイコライズを初期化できます。

トレースバック復号化プロセスの最後に、関数は final_metricfinal_states、および final_inputs を返します。opmode'cont' の場合は、関数の次の呼び出しのために、これらの出力がそれぞれ init_metricinit_states、および init_inputs に割り当てられます。この割り当てにより、関数の前回の呼び出しからの最終状態メトリクス、最終トレースバック状態、および最終トレースバック入力で開始するようにイコライザーが初期化されます。

init_metric の各実数は対応する状態の開始状態メトリクスを表します。init_states および init_inputs は、共同でイコライザーの初期トレースバック メモリを指定します。

出力引数入力引数意味行列のサイズ値の範囲
final_metricinit_metric状態メトリクス1 行 Nstates実数
final_statesinit_statesトレースバック状態Nstatestblen0 ~ Nstates–1 の整数
fianl_inputsinit_inputsトレースバック入力Nstatestblen0 ~ M–1 の整数

init_metricinit_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 より前に導入