このページは前リリースの情報です。該当の英語のページはこのリリースで削除されています。
この例では、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)'); signalSource = 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 noiseSource = 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]);
情報を含む信号を破損しているノイズは、フィルターされたバージョンの「ノイズ」です。ノイズを処理するフィルターを初期化します。
lp = 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 rlsfilt = dsp.RLSFilter(M,'InitialInverseCovariance',P0);
RLS 適応フィルターを 1000 回反復して実行します。適応フィルターが収束すると、フィルター処理されたノイズが「信号 + ノイズ」から完全に除去されます。また、誤差 'e' には元の信号のみが含まれます。
scope = dsp.TimeScope('TimeSpan',1000,'YLimits',[-2,2], ... 'TimeSpanOverrunAction','Scroll'); for k = 1:10 n = noiseSource(); % Noise s = signalSource(); d = lp(n) + s; [y,e] = rlsfilt(n,d); scope([s,e]); end release(scope);
プロットは、FIR フィルターの応答に対する適応フィルター応答の収束を示します。
H = abs(freqz(rlsfilt.Coefficients,1,64)); H1 = abs(freqz(lp.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]);