ECG 信号からの高周波数ノイズの除去
この例では、高周波数ノイズが含まれる ECG 信号に対するローパス フィルター処理方法を説明します。
1 周期の ECG 信号を作成します。関数 ecg
は長さが 500 の ECG 信号を作成します。関数 sgolayfilt
は Savitzky-Golay (多項式) 平滑化フィルターを使用して ECG 信号を平滑化します。
x = ecg(500).'; y = sgolayfilt(x,0,5); [M,N] = size(y);
時間スコープを初期化し、ノイズを含む信号とフィルター処理された信号を表示します。
Fs = 1000; TS = timescope('SampleRate',Fs,... 'TimeSpanSource','Property',... 'TimeSpan',1.5,... 'ShowGrid',true,... 'NumInputPorts',2,... 'LayoutDimensions',[2 1]); TS.ActiveDisplay = 1; TS.YLimits = [-1,1]; TS.Title = 'Noisy Signal'; TS.ActiveDisplay = 2; TS.YLimits = [-1,1]; TS.Title = 'Filtered Signal';
通過帯域エッジ周波数が 200 Hz、阻止帯域エッジ周波数が 400 Hz である最小次数のローパス フィルターを設計します。目的とする周波数応答振幅と重みは A
ベクトルと D
ベクトルでそれぞれ指定されます。これらの指定ベクトルを関数 firgr
に渡し、フィルター係数を設計します。設計したこれらの係数を dsp.FIRFilter
オブジェクトに渡します。
Fpass = 200; Fstop = 400; Dpass = 0.05; Dstop = 0.0001; F = [0 Fpass Fstop Fs/2]/(Fs/2); A = [1 1 0 0]; D = [Dpass Dstop]; b = firgr('minorder',F,A,D); LP = dsp.FIRFilter('Numerator',b);
阻止帯域エッジ周波数が 200 Hz、通過帯域エッジ周波数が 400 Hz である最小次数のハイパス フィルターを設計します。関数 firgr
を使用してフィルターを設計します。設計したこれらの係数を dsp.FIRFilter
オブジェクトに渡します。
Fstop = 200; Fpass = 400; Dstop = 0.0001; Dpass = 0.05; F = [0 Fstop Fpass Fs/2]/(Fs/2); % Frequency vector A = [0 0 1 1]; % Amplitude vector D = [Dstop Dpass]; % Deviation (ripple) vector b = firgr('minord',F,A,D); HP = dsp.FIRFilter('Numerator',b);
ノイズを含む信号には平滑化された ECG 信号が高周波数ノイズと共に含まれます。信号はローパス フィルターを使用してフィルター処理されます。時間スコープを使用して、ノイズが含まれている信号とフィルター処理された信号を表示します。
tic; while toc < 30 x = .1 * randn(M,N); highFreqNoise = HP(x); noisySignal = y + highFreqNoise; filteredSignal = LP(noisySignal); TS(noisySignal,filteredSignal); end % Finalize release(TS)