Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

LMS アルゴリズムと正規化 LMS アルゴリズムの収束性能の比較

適応フィルターは、未知のシステムの係数と一致するように自身のフィルターの係数を適応させます。目的は、未知のシステムの出力と適応フィルターの出力の間で誤差信号を最小化することです。同じ入力に対して 2 つの出力が収束して非常によく一致する場合、係数は非常によく一致すると呼ばれます。この状態の適応フィルターは、未知のシステムに似ています。この例では、正規化 LMS (NLMS) アルゴリズムと正規化を行わない LMS アルゴリズムに対して、この収束が発生する速さを比較します。

未知のシステム

未知のシステムを表す dsp.FIRFilter を作成します。未知のシステムへの入力として信号 x を渡します。目的の信号 d は、未知のシステム (FIR フィルター) の出力と加法性ノイズ信号 n の和です。

filt = dsp.FIRFilter;
filt.Numerator = fircband(12,[0 0.4 0.5 1],[1 1 0 0],[1 0.2],... 
{'w' 'c'});
x = 0.1*randn(1000,1);
n = 0.001*randn(1000,1);
d = filt(x) + n;

適応フィルター

2 つの dsp.LMSFilter オブジェクトを作成し、1 つを LMS アルゴリズムに、もう 1 つを正規化 LMS アルゴリズムに設定します。適応ステップ サイズとして 0.2 を選択し、適応フィルターの長さを 13 タップに設定します。

mu = 0.2;
lms_nonnormalized = dsp.LMSFilter(13,'StepSize',mu,...
    'Method','LMS');
lms_normalized = dsp.LMSFilter(13,'StepSize',mu,...
    'Method','Normalized LMS');

一次入力信号 x と目的の信号 d を両方の LMS アルゴリズムのバリエーションに渡します。変数 e1 および e2 はそれぞれ、目的の信号と正規化されたフィルターの出力の間の誤差、および目的の信号と正規化されていないフィルターの出力の間の誤差を表します。

[~,e1,~] = lms_normalized(x,d);
[~,e2,~] = lms_nonnormalized(x,d);

両方のバリエーションについて誤差信号をプロットします。NLMS バリアントの誤差信号は、LMS バリアントの誤差信号よりはるかに速くゼロに収束します。正規化されたバージョンは、はるかに少ない反復回数で、正規化されていないバージョンと同じ程度に良好な結果に適応します。

plot([e1,e2]);
title('Comparing the LMS and NLMS Conversion Performance');
legend('NLMS derived filter weights', ...
       'LMS derived filter weights','Location', 'NorthEast');
xlabel('Time index')
ylabel('Signal value')

Figure contains an axes object. The axes object with title Comparing the LMS and NLMS Conversion Performance, xlabel Time index, ylabel Signal value contains 2 objects of type line. These objects represent NLMS derived filter weights, LMS derived filter weights.

参考

オブジェクト

関連するトピック

参照

[1] Hayes, Monson H., Statistical Digital Signal Processing and Modeling. Hoboken, NJ: John Wiley & Sons, 1996, pp.493–552.

[2] Haykin, Simon, Adaptive Filter Theory. Upper Saddle River, NJ: Prentice-Hall, Inc., 1996.