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

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

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

RLS 適応フィルター処理を使用した適応ノイズ キャンセリング

この例では、RLS フィルターを使用してノイズを含む信号から有用な情報を抽出する方法を示します。情報を含む信号は、加法性ホワイト ガウス ノイズの影響を受けた正弦波です。

適応ノイズ キャンセリング システムでは、2 つのマイクを使用することが前提となります。メインのマイクはノイズを含む入力信号を拾い、サブのマイクは情報を含む信号に対して無相関のノイズを拾います。このノイズは、メインのマイクで拾われたノイズに相関します。

メモ: この例は、付属の Simulink モデル 'rlsdemo' と同じものです。

参照:S.Haykin, "Adaptive Filter Theory", 3rd Edition, Prentice Hall, N.J., 1996.

このモデルでは、ノイズを含む信号から有益な情報を抽出する適応 RLS フィルターの機能を示します。

priv_drawrlsdemo
axis off

情報を含む信号は、0.055 サイクル/サンプルの正弦波です。

signal = sin(2*pi*0.055*(0:1000-1)');
Hs = dsp.SignalSource(signal,'SamplesPerFrame',100,...
    'SignalEndAction','Cyclic repetition');

plot(0:199,signal(1:200));
grid; axis([0 200 -2 2]);
title('The information bearing signal');

サブ マイクで拾われたノイズは、RLS 適応フィルターの入力です。正弦波に影響するノイズは、このノイズ (に相関する) ローパス フィルター バージョンです。フィルターされたノイズと情報を含む信号の混合信号が適応フィルターの目的の信号です。

nvar  = 1.0;                  % Noise variance
noise = randn(1000,1)*nvar;   % White noise
Hn = dsp.SignalSource(noise,'SamplesPerFrame',100,...
    'SignalEndAction','Cyclic repetition');

plot(0:999,noise);
title('Noise picked up by the secondary microphone');
grid; axis([0 1000 -4 4]);

情報を含む信号を破損しているノイズは、フィルターされたバージョンの「ノイズ」です。ノイズを処理するフィルターを初期化します。

Hd = dsp.FIRFilter('Numerator',fir1(31,0.5));% Low pass FIR filter

RLS 適応フィルターのパラメーターと値を設定して初期化します。

M      = 32;                 % Filter order
delta  = 0.1;                % Initial input covariance estimate
P0     = (1/delta)*eye(M,M); % Initial setting for the P matrix
Hadapt = dsp.RLSFilter(M,'InitialInverseCovariance',P0);

RLS 適応フィルターを 1000 回反復して実行します。適応フィルターが収束すると、フィルター処理されたノイズが「信号 + ノイズ」から完全に除去されます。また、誤差 'e' には元の信号のみが含まれます。

Hts = dsp.TimeScope('TimeSpan',1000,'YLimits',[-2,2]);
for k = 1:10
    n = step(Hn); % Noise
    s = step(Hs);
    d = step(Hd,n) + s;
    [y,e]  = step(Hadapt,n,d);
    step(Hts,[s,e]);
end

プロットは、FIR フィルターの応答に対する適応フィルター応答の収束を示します。

H  = abs(freqz(Hadapt.Coefficients,1,64));
H1 = abs(freqz(Hd.Numerator,1,64));

wf = linspace(0,1,64);

plot(wf,H,wf,H1);
xlabel('Normalized Frequency  (\times\pi rad/sample)');
ylabel('Magnitude');
legend('Adaptive Filter Response','Required Filter Response');
grid;
axis([0 1 0 2]);

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