이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

IIR 필터로 인해 발생하는 지연 보정하기

신호를 필터링하면 지연이 발생합니다. 이는 출력 신호가 입력 신호에 비해 시간적으로 이동하는 것을 의미합니다.

유한 임펄스 응답 필터는 특정 주파수 성분을 다른 주파수 성분보다 더 지연시킵니다. 이로 인해 입력 신호가 실질적으로 왜곡됩니다. 함수 filtfilt는 이러한 필터로 인해 발생하는 지연을 보정하여 필터 왜곡을 보정합니다. 이러한 "영위상 필터링"은 정방향과 역방향에서 신호를 필터링한 결과로 얻을 수 있습니다.

1초 동안 500Hz로 샘플링된 심전도 측정값을 가져옵니다. 랜덤 잡음을 추가합니다.

Fs = 500;
N = 500;

rng default
xn = ecg(N) + 0.2*randn([1 N]);
tn = (0:N-1)/Fs;

75Hz가 넘는 주파수를 저지하는 필터를 사용하여 일부 잡음을 제거합니다. 통과대역 리플이 1dB이고 저지대역 감쇠량이 60dB인 7차 IIR 필터를 지정합니다.

Nf = 7;
Fp = 75;
Ap = 1;
As = 60;

d = designfilt('lowpassiir','FilterOrder',Nf,'PassbandFrequency',Fp, ...
    'PassbandRipple',Ap,'StopbandAttenuation',As,'SampleRate',Fs);

신호에 필터를 적용합니다. 필터링된 신호가 원래 신호보다 깨끗하지만, 원래 신호에 비해 시간상 뒤처져 있습니다. 또한 필터링된 신호는 필터의 비선형 위상으로 인해 왜곡되었습니다. 피크 인근을 확대합니다.

xfilter = filter(d,xn);

plot(tn,xn,tn,xfilter)

title 'Electrocardiogram'
xlabel 'Time (s)', legend('Original Signal','Filtered Signal')
axis([0.25 0.55 -1 1.5])

필터로 인한 군지연을 살펴보면 지연이 주파수 종속적임을 알 수 있습니다.

grpdelay(d,N,Fs)

filtfilt를 사용하여 신호를 필터링합니다. 지연과 왜곡이 효과적으로 제거되었습니다. 신호의 위상 정보를 반드시 그대로 유지해야 하는 경우 filtfilt를 사용하십시오.

xfiltfilt = filtfilt(d,xn);

plot(tn,xn,tn,xfilter)
hold on
plot(tn,xfiltfilt,'r','linewidth',2)
hold off

title 'Electrocardiogram'
xlabel 'Time (s)'
legend('Original Signal','Filtered Signal', ...
       'Zero-phase filtered with ''filtfilt''')
axis([0.25 0.55 -1 1.5])

참고 항목

| | |

관련 항목