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)