このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
符号-データ LMS アルゴリズムを使用したノイズ キャンセリング
適応フィルターを導き出すために必要な計算量が開発プロセスに影響を与える場合、この例で示すように、LMS アルゴリズムの符号-データ バリアント (SDLMS) は優れた選択肢となる可能性があります。
LMS 適応フィルターの標準および正規化された変動において、適応フィルターの係数は目的の信号と未知のシステムからの出力信号間の平均二乗誤差より発生します。符号-データ アルゴリズムでは、入力データの符号を使用してフィルター係数を変更することにより、平均二乗誤差の計算が変更されます。
誤差が正である場合、新しい係数は、誤差にステップ サイズ µ を乗算して前の係数に加算した値になります。誤差が負である場合、新しい係数は、誤差に µ を乗算して前の係数から減算した値になります。符号の変化に注意してください。
入力がゼロの場合、新しい係数は前のセットと同じです。
ベクトル形式では、符号-データ LMS アルゴリズムは次のようになります。
ここで
ベクトル はフィルターの係数に適用された重み、ベクトル は入力データです。ベクトル は、目的の信号とフィルターを適用した信号の間の誤差です。SDLMS アルゴリズムの目的は、この誤差を最小化することです。ステップ サイズは、 によって表されます。
を小さくすると、フィルターの重みに対する補正が各サンプルについて小さくなり、SDLMS の誤差がより緩やかに小さくなります。 を大きくすると、各ステップの重みがより大きく変化するので、誤差がより高速に小さくなりますが、生成される誤差は理想的な解にはあまり近づきません。優れた収束速度と安定性を確保するには、次の実用的な範囲内で を選択します。
ここで、 は信号のサンプル数です。また、効率的に計算するために を 2 のべき乗として定義します。
メモ: 符号-データ アルゴリズムの初期条件をどのように設定するかは適応処理の効果に大きく影響します。アルゴリズムは基本的に入力信号を量子化するため、アルゴリズムは簡単に不安定になる可能性があります。
一連の大きな入力値を量子化プロセスと組み合わせると、誤差がすべての範囲を超えて大きくなる可能性があります。小さいステップ サイズ を選択し、アルゴリズムの初期条件を非ゼロの正および負の値に設定することにより、制御できなくなるという符号-データ アルゴリズムの傾向を制限します。
このノイズ キャンセリングの例では、dsp.LMSFilter
の Method
プロパティを 'Sign-Data LMS'
に設定します。この例には、2 つの入力データセットが必要です。
ノイズによって破損した信号が含まれるデータ。ノイズまたは干渉の除去 –– 適応フィルターを使用した、未知のシステムからのノイズの除去のブロック線図では、これは目的の信号 です。ノイズ キャンセリング プロセスでは、信号からノイズが除去されます。
ランダム ノイズが含まれているデータ。ノイズまたは干渉の除去 –– 適応フィルターを使用した、未知のシステムからのノイズの除去のブロック線図では、これは です。信号 は、信号データを破損するノイズに関連します。ノイズ データ間の相関がないと、適応アルゴリズムで信号からノイズを除去できません。
信号には、正弦波を使用します。signal
は 1000 要素の列ベクトルであることに注意してください。
signal = sin(2*pi*0.055*(0:1000-1)');
今度は、相関ホワイト ノイズを signal
に追加します。ノイズが相関していることを確認するには、ローパス FIR フィルターを介してノイズを渡してから、フィルター処理されたノイズを信号に追加します。
noise = randn(1000,1); filt = dsp.FIRFilter; filt.Numerator = fir1(11,0.4); fnoise = filt(noise); d = signal + fnoise;
fnoise
は相関ノイズであり、d
は符号-データ アルゴリズムに対する目的の信号になります。
dsp.LMSFilter
オブジェクトを処理用に準備するには、フィルターの重みの初期条件と mu
(StepSize
) を設定します。この節で前述したように、coeffs
と mu
に設定する値によって適応フィルターが信号パスからノイズを除去できるかどうかが決まります。
LMS アルゴリズムの使用による FIR フィルターのシステム同定では、フィルター係数をゼロに設定する既定のフィルターを作成しました。ほとんどの場合、この方法は符号-データ アルゴリズムで機能しません。設定する初期フィルター係数が期待値に近いほどアルゴリズムは適切に機能し、効果的にノイズを除去するフィルターの解に収束します。
この例では、ノイズ フィルターで使用する係数 (filt.Numerator
) から開始して、アルゴリズムが適応しなければならないように若干変更します。
coeffs = (filt.Numerator).'-0.01; % Set the filter initial conditions. mu = 0.05; % Set the step size for algorithm updating.
dsp.LMSFilter
に必要な入力引数を準備したら、LMS フィルター オブジェクトを作成し、適応を実行して、結果を表示します。
lms = dsp.LMSFilter(12,'Method','Sign-Data LMS',... 'StepSize',mu,'InitialConditions',coeffs); [~,e] = lms(noise,d); L = 200; plot(0:L-1,signal(1:L),0:L-1,e(1:L)); title('Noise Cancellation by the Sign-Data Algorithm'); legend('Actual signal','Result of noise cancellation',... 'Location','NorthEast'); xlabel('Time index') ylabel('Signal values')
dsp.LMSFilter
を実行すると、いずれの標準 LMS アルゴリズムよりもはるかに少ない乗算演算が使用されます。また、ステップ サイズが 2 のべき乗の場合、ビット シフトによる乗算だけで符号-データ適応を実行できます。
符号-データ アルゴリズムの性能はこのプロットに示すように非常に良好ですが、符号-データ アルゴリズムは標準 LMS の変動より安定性がかなり低下します。このノイズ キャンセリング例で、処理後の信号は入力信号と非常によく一致しますが、アルゴリズムは優れた性能を実現するのではなく、とても簡単に制限なく拡大します。
重みの初期条件 (InitialConditions
) と mu
(StepSize
)、または相関ノイズの作成に使用したローパス フィルターを変更すると、ノイズ キャンセリングが失敗します。
参考
オブジェクト
関連するトピック
参照
[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.