Main Content

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

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)

参考

関数

オブジェクト

関連するトピック