ドキュメンテーション センター

  • 評価版
  • 製品アップデート

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

デジタル通信におけるイコライズ

この例では、適応フィルターによりデジタル通信のチャネル イコライズを行う方法を示します。

著者: Scott C. Douglas

はじめに

チャネルのイコライズは、周波数選択性および分散通信リンクによって発生する悪影響を緩和するシンプルな方法です。この例では、すべての信号はデジタル ベースバンド表現をもつものとします。チャネルのイコライズのトレーニング フェーズでは、送信側と受信側の両方で既知のデジタル信号 s[n] が送信側から受信側に送信されます。受信信号 x[n] には、次の 2 つの信号が含まれます。チャネルのインパルス応答によってフィルター処理された信号 s[n] および未知の広帯域ノイズ信号 v[n]。目的は、x[n] をフィルターして分散チャネルによって発生した符号間干渉 (ISI) を除去し、加法性ノイズ v[n] の影響を最小限に抑えることです。理想では、出力信号は、送信信号 s[n] の遅延バージョンに密に近づきます。

送信される入力信号

デジタル信号は、その離散構造を介して情報を運びます。いくつかの一般的なベースバンド信号送信法があります。ここでは、入力信号が {-3, -1, 1, 3} + j*{-3, -1, 1, 3} のすべての可能な組み合わせによって付与される 16 の異なる値の 1 つを取る 16-QAM 複素数値シンボル セットを使用します。ここで、j = sqrt(-1) です。このようなシンボルを 5000 シーケンス生成します。各シンボルの確率は同等です。

ntr = 5000;
j = sqrt(-1);
s = sign(randn(ntr,1)).*(2+sign(randn(ntr,1)))+...
    j*sign(randn(ntr,1)).*(2+sign(randn(ntr,1)));
Hs = dsp.SignalSource(s,'SamplesPerFrame',1000);
plot(s,'o');
axis([-4 4 -4 4]);
axis('square');
xlabel('Re\{s(n)\}');
ylabel('Im\{s(n)\}');
title('Input signal constellation');

送信チャネル

送信チャネルは、チャネル インパルス応答とノイズ特性によって定義されます。周波数選択制と分散の両方を示す特定のチャネルを選択します。受信 S/N比が 30 dB になるようなノイズ分散を選択します。

b = exp(j*pi/5)*[0.2 0.7 0.9];
a = [1 -0.7 0.4];
% Transmission channel filter
channel = dsp.BiquadFilter('SOSMatrix',[b,a]);
% Impulse response
hFV = fvtool(channel,'Analysis','impulse','Color','White');
legend(hFV, 'Transmission channel');

% Frequency response
set(hFV, 'Analysis', 'freq')

受信信号

受信信号 x[n] は、加法性ノイズ v[n] を含むチャネル インパルス応答によってフィルターされた送信信号 s[n] によって生成されます。加法性ノイズに対して複素ガウス ノイズ信号があると仮定します。

sig = sqrt(1/16*(4*18+8*10+4*2))/sqrt(1000)*norm(impz(channel));
v = sig*(randn(ntr,1) + j*randn(ntr,1))/sqrt(2);
x = step(channel,s) + v;
Hx = dsp.SignalSource(x,'SamplesPerFrame',Hs.SamplesPerFrame);
plot(x,'.');
xlabel('Re\{x[n]\}');
ylabel('Im\{x[n]\}');
axis([-40 40 -40 40]);
axis('square');
title('Received signal x[n]');
set(gcf, 'Color', [1 1 1])

トレーニング信号

トレーニング信号は、元の送信信号 s[n] のシフト バージョンです。この信号は、送信側と受信側の両方で既知です。

D = 10;
Hd = dsp.Delay(D);

トレーニングされたイコライズ

最速の収束を得るには、再帰的な最小二乗推定量の通常のバージョンを使用します。トレーニングには、最初の 2000 サンプルだけを使用します。出力信号の配置は、16 の異なるシンボル値を中心とする値のクラスターを示し、イコライズが達成されたことがわかります。

P0 = 100*eye(20);
lam = 0.99;
h = dsp.RLSFilter(20,'ForgettingFactor',lam,'InitialInverseCovariance',P0);
hlog = dsp.SignalSink('BufferLength',2); % Store 2 frames (2000 samples)
for k = 1:2
    d = step(Hd,step(Hs));
    Rx = step(Hx);
    [y,e] = step(h,Rx,d);
    step(hlog,e);
    plot(y,'.');
    hold on
    xlabel('Re\{y[n]\}');
    ylabel('Im\{y[n]\}');
    axis([-5 5 -5 5]);
    axis('square');
    title('Equalized signal y[n]');
    set(gcf, 'Color', [1 1 1])
end

トレーニング誤差

誤差信号 e[n] の振幅の 2 乗をプロットすると、RLS アルゴリズムでの収束が速いことがわかります。これは、選択したイコライザー設定で約 60 のサンプルで発生します。

hold off
ntrain = 1:1000;
semilogy(ntrain,abs(hlog.Buffer(ntrain)).^2);
xlabel('Number of iterations');
ylabel('|e[n]|^2')
title('Squared magnitude of the training errors');
set(gcf, 'Color', [1 1 1])

この情報は役に立ちましたか?