このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
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')
参考
オブジェクト
関連するトピック
- LMS アルゴリズムの使用による FIR フィルターのシステム同定
- 正規化 LMS アルゴリズムの使用による FIR フィルターのシステム同定
- 符号-データ LMS アルゴリズムを使用したノイズ キャンセリング
参照
[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.