最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

MLSE イコライザー

最尤系列推定 (MLSE) イコライザーは伝播チャネル特性における時間のばらつきの最適なイコライズを提供します。しかし、MLSE イコライザーは計算量が適応イコライザーより多いため、効果的でない場合もあります。

Communications Toolbox™ では、関数 mlseeqcomm.MLSEEqualizer System object™、および MLSE Equalizer ブロックはビタビ アルゴリズムを使用して分散チャネルを通る線形変調信号をイコライズします。これらの機能は、有限入力応答 (FIR) フィルターとしてモデルが作成されたチャネルの推定を使用して、信号の最尤系列推定を出力します。

受信信号を復号化するために、MLSE イコライザーは以下を実行します。

  1. 入力信号内のシンボルに FIR フィルターを適用します。FIR フィルターのタップ重みはチャネル推定に対応します。

  2. ビタビ アルゴリズムを使用して、トレースバック パスと状態メトリクスを計算します。これらの値は、ビタビ アルゴリズムの各ステップでシンボルに割り当てられます。メトリクスは、ユークリッド距離に基づいています。

  3. 変調された信号のコンスタレーション点に対応する複素数のシーケンスとして、信号の最尤系列推定を出力します。

MLSE イコライザーは、理論的には実現しうる最高の性能を示しますが、計算は集中的になります。

MLSE イコライザーに関する参考文献は、イコライザーについての参考文献を参照してください。

MATLAB でのベクトル信号のイコライズ

関数 mlseeq または comm.MLSEEqualizer System object を MATLAB® での MLSE イコライズに使用できます。この節で示す例では、関数 mlseeq を呼び出します。comm.MLSEEqualizer System object を使用する場合も同様のワークフローが適用されます。System object を使用する例については、comm.MLSEEqualizer System object のリファレンス ページを参照してください。

関数 mlseeq には、2 つの操作モードがあります。

  • 連続操作モードでは、mlseeq を繰り返し呼び出して使うことによって、ベクトルの列を処理できます。この関数は 1 つの呼び出しから次の呼び出しまで内部状態の情報を保存します。詳細は、連続操作モードでのイコライズを参照してください。

  • リセット操作モードによって、データに加えるプリアンブルとポストアンブルを指定することができます。詳細は、プリアンブルとポストアンブルの利用を参照してください。

ベクトルの列の処理ではないので、プリアンブルまたはポストアンブルを指定する必要がない場合、これらの操作モードはほぼ等しくなります。これらは連続操作モードが遅延を起こし、リセット操作モードが遅延を起こさない点で異なります。次の例では、リセット操作モードを使用します。連続操作モードを使用して例を実行するように変更すると、イコライズされた出力に遅延が生じます。この遅延の詳細については、連続操作モードでの遅延を参照してください。

ベクトル信号をイコライズするための mlseeq の使用

最も単純な形式では、次を指定すると、関数 mlseeq は変調されたデータのベクトルをイコライズします。

  • チャネルの推定された係数 (FIR フィルターとしてモデルを作成)。

  • 変調タイプのコンスタレーション。

  • ビタビ アルゴリズムのトレースバック長。トレースバック長の値が大きいほど、イコライザーからの結果が改善されますが、計算時間は増えます。

4 つに設定された変調次数で PSK 変調された信号を生成します。

M = 4; 
msg = pskmod([1 2 2 0 3 1 3 3 2 1 0 2 3 0 1]',M);

歪みチャネルを経由して変調された信号をフィルター処理します。

chcoeffs = [.986; .845; .237; .12345+.31i];
filtmsg = filter(chcoeffs,1,msg);

MLSE イコライザーに対して参照コンスタレーション、トレースバック長、およびチャネル推定を定義します。次の例では、正確なチャネルはチャネル推定として提供されます。

const = pskmod([0:M-1],M);
tblen = 10;
chanest = chcoeffs;

受信信号をイコライズします。

msgEq = mlseeq(filtmsg,chanest,const,tblen,'rst');
isequal(msg,msgEq)
ans = logical
   1

連続操作モードでの信号のイコライズ

データが一連のベクトルに分割される (たとえば、ループ内で処理する) 場合、関数 mlseeq の利用には連続操作モードが適しています。連続操作モードでは、mlseeq は、その内部状態の情報を続く呼び出しで利用するために保存でき、前に保管した状態情報を使って初期化できます。連続操作モードを選択するには、mlseeq を呼び出すときに入力引数として 'cont' を指定します。

メモ

連続操作モードでの遅延で説明しているとおり、連続操作モードでは遅延が生じます。このモードはプリアンブルまたはポストアンブルに対応できません。

連続操作モードに対する手順

ループ内で連続操作モードを使用する場合、イコライズ ループが始まる前に、イコライザーのための状態メトリクス、トレースバック状態、トレースバック入力を格納する 3 つの空の行列変数を事前に割り当てます。ループ内で次のような構文を使用して mlseeq を実行します。

sm = [];
ts = [];
ti = [];
for ...
    [y,sm,ts,ti] = mlseeq(x,chcoeffs,const,tblen,'cont',nsamp,sm,ts,ti);
...
end

smtsti を入力引数として使用すると、mlseeq は、以前の反復で終了した位置から操作を続けます。sm, ts, ti を出力引数として利用すると、mlseeq は現在の反復の最後で状態の情報を更新します。最初の反復において、smtsti はそれぞれ、空の行列として始まり、関数 mlseeq の最初の呼び出しでは、すべての状態メトリクスを 0 に初期化します。

連続操作モードでの遅延

トレースバック長 tblen を使った連続操作モードは、tblen シンボルの出力遅延を起こします。最初の tblen 出力シンボルは入力信号に関連せず、最後の tblen 入力シンボルは出力信号に関連しません。たとえば、次のコマンドは、トレースバック長 3 を使用します。最初の 3 つの出力シンボルは ones(1,10) の入力信号に関連しません。

y = mlseeq(ones(1,10),1,[-7:2:7],3,'cont')
y =
    -7   -7   -7    1    1    1    1    1    1    1

通信システムの異なる部分によりもたらされる遅延を追跡することが重要です。連続操作モードでベクトルをイコライズするための mlseeq の使用の例は、誤り率を計算するときに、遅延をどのように考慮するかを示します。

連続操作モードでベクトルをイコライズするための mlseeq の使用

この例は、ループ内で関数mlseeqの連続操作モードを使用するための手順を示します。

変数の初期化

ランタイム変数を指定します。

numsym = 200; % Number of symbols in each iteration
numiter = 25; % Number of iterations

M = 4; % Use 4-PSK modulation
qpskMod = comm.QPSKModulator('PhaseOffset',0);

chcoeffs = [1 ; 0.25]; % Channel coefficients
chanest = chcoeffs; % Channel estimate

イコライザーを初期化するために、基準コンスタレーション、トレースバック長、シンボルあたりのサンプル数、および状態変数 smtsti のパラメーターを定義します。

const = qpskMod((0:M-1)');
tblen = 10;
nsamp = 1;
sm = [];
ts = [];
ti = [];

ループの各反復から結果を蓄積する変数を定義します。

fullmodmsg = [];
fullfiltmsg = [];
fullrx = [];

ループを利用したシステムのシミュレーション

ランダム データを作成し、ベースバンド PSK 変調を使用してそのデータを変調し、データをフィルター処理するループでシミュレーションを実行します。関数 mlseeq はフィルター処理されたデータをイコライズします。ループは、ループの各反復から結果を蓄積する変数の更新も行います。

for jj = 1:numiter
    msg = randi([0 M-1],numsym,1); % Random signal vector
    modmsg = qpskMod(msg); % PSK-modulated signal
    filtmsg = filter(chcoeffs,1,modmsg); % Filtered signal
    % Equalize the signal.
    [rx,sm,ts,ti] = mlseeq(filtmsg,chanest,const, ...
        tblen,'cont',nsamp,sm,ts,ti);
    % Update vectors with cumulative results.
    fullmodmsg = [fullmodmsg; modmsg];
    fullfiltmsg = [fullfiltmsg; filtmsg];
    fullrx = [fullrx; rx];
end

誤り率の計算と結果のプロット

ループのすべての反復からのシンボル誤り率を計算します。関数 symerr は、信号全体ではなく、受信信号と送信信号の選択した部分を比較します。連続操作モードでは、サンプル単位での長さがイコライザーのトレースバック長 (tblen) である遅延が発生するため、最初の tblen サンプルを受信信号から除いたり、最後の tblen サンプルを送信信号から除きます。イコライザーの遅延を表すサンプルを除くと、シンボル誤り率の計算において、受信信号と送信信号からの意味のある正確に対応するサンプルが比較されます。

遅延を考慮しながら、シンボル誤りの合計数を計算します。

hErrorCalc = comm.ErrorRate('ReceiveDelay',10);
err = step(hErrorCalc, fullmodmsg, fullrx);
numsymerrs = err(1)
numsymerrs = 0

イコライズの前後にコンスタレーションをプロットします。イコライズされた信号の点は、4-PSK に対する理想的なコンスタレーションの点と一致します。

h = scatterplot(fullfiltmsg); 
hold on;
scatterplot(fullrx,1,0,'r*',h);
legend('Filtered signal before equalization','Equalized signal',...
   'Location','NorthOutside');
hold off; 

プリアンブルとポストアンブルの利用

システムの中には、一連のデータの始めと終わりに既知のシンボルのシーケンスを含めるものがあります。始めまたは終わりの既知のシーケンスは、それぞれ、"プリアンブル"、"ポストアンブル" と呼ばれます。関数 mlseeq は、その入力信号に既に組み込まれているプリアンブルとポストアンブルを調整できます。関数を呼び出す場合、コンスタレーションのベクトルにインデックスを付けることによって、プリアンブルとポストアンブルを既知のシンボルのシーケンスを表す整数ベクトルとして指定します。たとえば、[1 4 4] のプリアンブル ベクトルと [1 j -1 -j] の 4-PSK コンスタレーションは、変調された信号が [1 -j -j] で始まることを示します。

システムがポストアンブルなしでプリアンブルを使用する場合、mlseeq を呼び出すときに、[] のポストアンブル ベクトルを使用します。システムがプリアンブルなしでポストアンブルを使用する場合、[] のプリアンブル ベクトルを使用します。

プリアンブルを含むメッセージの復元

プリアンブルを含むメッセージを復元し、信号をイコライズして、シンボル誤り率をチェックします。

変調次数、イコライザーのトレースバック長、シンボルあたりのサンプル数、プリアンブル、およびメッセージ長を指定します。

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 = 8
ser = 0.0159

Simulink での MLSE イコライザーの利用

MLSE Equalizer ブロックは、ビタビ アルゴリズムを使って、分散チャネルを通る線形変調信号をイコライズします。このブロックは、有限入力応答 (FIR) フィルターとしてモデルが作成されたチャネルの推定を利用して、信号の最尤系列推定 (MLSE) を出力します。MLSE Equalizer ブロックを使用する場合は、入力信号のチャネル推定とコンスタレーションを指定します。また、MLSE Equalizer ブロックへの入力パラメーターとして、予想される入力信号のプリアンブルとポストアンブルを指定することもできます。

動的に変化するチャネルによる MLSE イコライズ

最尤系列推定 (MLSE) イコライザーを使用して、マルチパス レイリー フェージング チャネルの影響をイコライズします。MLSE イコライザーは、時変分散チャネルを通過したデータとチャネルの推定を入力します。チャネル推定には、2 パス レイリー フェージング チャネルの動的に変化するチャネル係数が含まれます。

モデルの構成

  • 送信機は、QPSK ランダム信号データを生成します。

  • チャネル障害には、マルチパス フェージングと AWGN があります。

  • 受信機は、MLSE イコライズと QPSK 復調を適用します。

  • このモデルはスコープと BER 計算を使用してシステム動作を示します。

モデル例の調査

モデルを試す

5e-6 秒の Bernoulli Binary Generator ブロックのサンプル時間は、200 kbps のビット レートと 100 ksym/秒の QPSK シンボル レートに対応します。

Multipath Rayleigh Fading Channel ブロックの設定は以下のとおりです。

  • 最大ドップラー シフトは 30 Hz です。

  • 離散パスの遅延は [0 1e-5] で、入力 QPSK シンボル データの 2 つの連続するサンプル時間に対応します。この遅延は 2 パス チャネルの最も単純な遅延ベクトルを表します。

  • 平均パス ゲインは [0 -10] です。

  • 平均パス ゲインは 0 dB に正規化されているため、AWGN ブロックへの平均電力入力は 1 W です。

MLSE Equalizer ブロックの [Traceback depth] は 10 に設定されています。このトレースバック長を変更することでビット誤り率 (BER) への影響を調べることができます。

QPSK 復調器は N 行 1 列の入力フレームを受け取り、2N 行 1 列の出力フレームを生成します。この出力フレームとトレースバック長が 10 であるため、20 ビットの遅延が生じます。このモデルはフレームごとのサンプル数が 100 のフレームでフレームベース処理を実行します。フレームベース処理により、モデルには 100 ビットの固有の遅延があります。これらの遅延を合計した 120 の受信遅延が Error Rate Calculation ブロックの [Receive delay] パラメーターに設定されており、これによってサンプルが整列します。

計算された BER が表示されます。コンスタレーション プロットにイコライズ前後のコンスタレーションが示されます。

BER = 0.033645

参考

オブジェクト

ブロック

関連するトピック