Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

ウェーブレットのノイズ除去

この例では、dsp.DyadicAnalysisFilterBankdsp.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] ウィンドウには元の信号とノイズ除去信号間のエラーが表示されます。