最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

ECG 信号からの高周波数ノイズの除去

この例では、高周波数ノイズが含まれる ECG 信号に対するローパス フィルター処理方法を説明します。

ECG 信号の 1 周期を作成します。関数 ecg は長さが 500 の ECG 信号を作成します。関数 sgolayfilt は Savitzky-Golay (多項式) 平滑化フィルターを使用して ECG 信号を平滑化します。

x = ecg(500).';
y = sgolayfilt(x,0,5);
[M,N] = size(y);

時間スコープを初期化し、ノイズを含む信号とフィルター処理された信号を表示します。

Fs = 1000;
TS = dsp.TimeScope('SampleRate',Fs,...
                      'TimeSpan',1.5,...
                      'YLimits',[-1 1],...
                      'ShowGrid',true,...
                      'NumInputPorts',2,...
                      'LayoutDimensions',[2 1],...
                      'Title','Noisy and Filtered Signals');

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)