このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
ウェーブレットのノイズ除去
この例では、dsp.DyadicAnalysisFilterBank
と dsp.DyadicSynthesisFilterBank
の System object を使用して、信号からノイズを除去する方法を示します。
はじめに
ウェーブレットには、信号のノイズ除去において重要な用途があります。ウェーブレット分解後、高周波数サブバンドにはほとんどのノイズ情報が含まれ、信号情報はほとんど含まれません。この例では、ソフトしきい値をさまざまなサブバンドに適用します。しきい値は高周波数サブバンドでは高い値に、低周波数サブバンドでは低い値に設定されます。
初期化
処理ループで使用する前に System object を作成して初期化することは、最適なパフォーマンスを得るために不可欠です。
load dspwlets; % load wavelet coefficients and noisy signal Threshold = [3 2 1 0];
ノイズを含む信号を出力する dsp.SignalSource
System object™ を作成します。
signalGenerator = dsp.SignalSource(noisdopp.', 64);
信号のウェーブレット分解を行うための DyadicAnalysisFilterBank
System object を作成し、設定します。
dyadicAnalysis = dsp.DyadicAnalysisFilterBank( ... 'CustomLowpassFilter', lod, ... 'CustomHighpassFilter', hid, ... 'NumLevels', 3);
ウェーブレット成分によって生じたシステム遅延を補正するため、3 つの Delay
System object を作成します。
delay1 = dsp.Delay(3*(length(lod)-1)); delay2 = dsp.Delay(length(lod)-1); delay3 = dsp.Delay(7*(length(lod)-1));
信号のウェーブレット再構成を行う DyadicSynthesisFilterBank
System object を作成し、設定します。
dyadicSynthesis = dsp.DyadicSynthesisFilterBank( ... 'CustomLowpassFilter', lor, ... 'CustomHighpassFilter', hir, ... 'NumLevels', 3);
timescope
System object を作成して、ノイズ除去信号と残差信号をプロットします。
scope = timescope('Name', 'Wavelet Denoising', ... 'SampleRate', fs, ... 'TimeSpan', 13, ... 'NumInputPorts', 3, ... 'LayoutDimensions',[3 1], ... 'TimeAxisLabels', 'Bottom', ... 'TimeSpanOverrunAction', 'Scroll'); pos = scope.Position; scope.Position = [pos(1) pos(2)-(0.5*pos(4)) 0.9*pos(3) 2*pos(4)]; % Set properties for each display scope.ActiveDisplay = 1; scope.Title = 'Input Signal'; scope.ActiveDisplay = 2; scope.Title = 'Denoised Signal'; scope.ActiveDisplay = 3; scope.Title = 'Residual Signal';
ストリーム処理ループ
入力信号のノイズを除去する処理ループを作成します。このループは上記でインスタンス化した System object を使用します。
for ii = 1:length(noisdopp)/64 sig = signalGenerator(); % Input noisy signal S = dyadicAnalysis(sig); % Dyadic analysis % separate into four subbands S1 = S(1:32); S2 = S(33:48); S3 = S(49:56); S4 = S(57:64); % Delay to compensate for the dyadic analysis filters S1 = delay1(S1); S2 = delay2(S2); S1 = dspDeadZone(S1, Threshold(1)); S2 = dspDeadZone(S2, Threshold(2)); S3 = dspDeadZone(S3, Threshold(3)); S4 = dspDeadZone(S4, Threshold(4)); % Dyadic synthesis (on concatenated subbands) S = dyadicSynthesis([S1; S2; S3; S4]); sig_delay = delay3(sig); % Delay to compensate for analysis/synthesis. Error = sig_delay - S; % Plot the results scope(sig_delay, S, Error); end release(scope);
まとめ
この例では、DyadicAnalysisFilterBank
および DyadicSynthesisFilterBank
のような信号処理 System object を使用して、ユーザー指定のしきい値で信号からノイズを除去しました。[Input Signal] ウィンドウには元のノイズを含む信号が表示され、[Denoised Signal] ウィンドウにはノイズ抑制後の信号が表示され、[Residue Signal] ウィンドウには元の信号とノイズ除去信号間のエラーが表示されます。