Main Content

ECG 신호에서 고주파 잡음 제거하기

이 예제에서는 고주파 잡음이 포함된 ECG 신호를 저역통과 필터링하는 방법을 보여줍니다.

ECG 신호의 한 주기를 생성합니다. ecg 함수가 길이가 500인 ECG 신호를 생성합니다. sgolayfilt 함수가 사비츠키-골레이(다항식) 평활화 필터를 사용하여 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';

통과대역 경계 주파수가 200Hz이고 저지대역 경계 주파수가 400Hz인 최소 차수 저역통과 필터를 설계합니다. 원하는 주파수 응답의 진폭과 가중치는 각각 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);

저지대역 경계 주파수가 200Hz이고 통과대역 경계 주파수가 400Hz인 최소 차수 고역통과 필터를 설계합니다. 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)

참고 항목

함수

객체

관련 항목