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

filtfilt

영위상(Zero-Phase) 디지털 필터링

설명

예제

y = filtfilt(b,a,x)는 입력 데이터 x를 순방향과 역방향 모두로 처리하여 영위상 디지털 필터링을 수행합니다. 순방향으로 데이터를 필터링한 후 filtfilt는 필터링된 시퀀스를 역방향으로 진행하여 다시 필터링합니다. 결과는 다음과 같은 특징을 가집니다.

  • 영위상 왜곡.

  • 원래 필터 전달 함수 크기의 제곱과 같은 필터 전달 함수.

  • ba로 지정된 필터 차수의 2배에 해당하는 필터 차수.

filtfilt는 초기 조건을 일치시켜 시작 과도 상태와 종료 과도 상태를 최소화합니다. 미분기 FIR 필터와 힐베르트 FIR 필터는 위상 응답에 따라 동작이 크게 달라지므로 이러한 필터와 함께 filtfilt를 사용하지 마십시오.

y = filtfilt(sos,g,x)는 행렬 sos로 표현되는 2차섹션형(SOS)(바이쿼드) 필터와 스케일 값 g를 사용하여 입력 데이터 x를 영위상 필터링합니다.

y = filtfilt(d,x)는 디지털 필터 d를 사용하여 입력 데이터 x를 영위상 필터링합니다. designfilt를 사용하여 주파수-응답 사양을 기반으로 d를 생성합니다.

예제

모두 축소

영위상 필터링을 사용하면 필터링되지 않은 신호에서 발생하는 특징들을, 필터링한 시간 파형의 정확히 동일한 위치에 유지할 수 있습니다.

영위상 필터링에 filtfilt를 사용하는 방법을 설명하기 위해 심전도 파형을 살펴보겠습니다.

wform = ecg(500);

plot(wform)
axis([0 500 -1.25 1.25])
text(155,-0.4,'Q')
text(180,1.1,'R')
text(205,-1,'S')

QRS파는 심전도의 중요한 특징입니다. 여기서는 시간 지점 160 부근에서 QRS파가 시작됩니다.

가산성 잡음으로 심전도를 손상시킵니다. 재현 가능한 결과를 얻기 위해 난수 생성기를 재설정합니다. 저역통과 FIR 등리플 필터를 생성하고 영위상 필터링과 일반적인 필터링을 둘 다 사용하여 잡음이 있는 파형을 필터링합니다.

rng default

x = wform' + 0.25*randn(500,1);
d = designfilt('lowpassfir', ...
    'PassbandFrequency',0.15,'StopbandFrequency',0.2, ...
    'PassbandRipple',1,'StopbandAttenuation',60, ...
    'DesignMethod','equiripple');
y = filtfilt(d,x);
y1 = filter(d,x);

subplot(2,1,1)
plot([y y1])
title('Filtered Waveforms')
legend('Zero-phase Filtering','Conventional Filtering')

subplot(2,1,2)
plot(wform)
title('Original Waveform')

영위상 필터링은 신호에서 잡음을 줄이고, QRS파가 원래 신호에서 발생하는 시점과 동일한 시간으로 QRS파를 유지합니다. 일반적인 필터링은 신호에서 잡음을 줄이지만, QRS파를 지연시킵니다.

버터워스 2차섹션형(SOS) 필터를 사용하여 위의 절차를 반복합니다.

d1 = designfilt('lowpassiir','FilterOrder',12, ...
    'HalfPowerFrequency',0.15,'DesignMethod','butter');
y = filtfilt(d1,x);

subplot(1,1,1)
plot(x)
hold on
plot(y,'LineWidth',3)
legend('Noisy ECG','Zero-Phase Filtering')

입력 인수

모두 축소

전달 함수 계수로, 벡터로 지정됩니다. 전극점 필터를 사용하는 경우 b1을 입력합니다. 전영점 (FIR) 필터를 사용하는 경우 a1을 입력합니다.

예: b = [1 3 3 1]/6a = [3 0 1 0]/3은 0.5π rad/sample의 정규화된 3dB 주파수를 갖는 3차 버터워스 필터를 지정합니다.

데이터형: double

입력 신호로, 실수 벡터 또는 복소수 벡터, 행렬, N차원 배열로 지정됩니다. filtfilt는 크기가 1보다 큰 x의 첫 번째 배열 차원에서 연산을 수행합니다.

예: cos(pi/4*(0:159))+randn(1,160)은 단일채널 행 벡터 신호입니다.

예: cos(pi./[4;2]*(0:159))'+randn(160,2)는 2채널 신호입니다.

데이터형: double
복소수 지원 여부:

2차섹션형 계수로, 행렬로 지정됩니다. sos는 Kx6 행렬이며, 여기서 섹션 개수 K는 2보다 크거나 같아야 합니다. 섹션 개수가 2보다 작으면 filtfilt가 입력값을 분자 벡터로 간주합니다. sos의 각 행은 2차(바이쿼드) 필터의 계수에 대응됩니다. sos의 i번째 행은 [bi(1) bi(2) bi(3) ai(1) ai(2) ai(3)]에 대응됩니다.

예: s = [2 4 2 6 0 2;3 3 0 6 0 0]은 0.5π rad/sample의 정규화된 3dB 주파수를 갖는 3차 버터워스 필터를 지정합니다.

데이터형: double

스케일링 인자로, 벡터로 지정됩니다.

데이터형: double

디지털 필터로, digitalFilter 객체로 지정됩니다. designfilt를 사용하여 주파수 응답 사양을 기반으로 하여 디지털 필터를 생성합니다.

예: d = designfilt('lowpassiir','FilterOrder',3,'HalfPowerFrequency',0.5)는 0.5π rad/sample의 정규화된 3dB 주파수를 갖는 3차 버터워스 필터를 지정합니다.

데이터형: double

출력 인수

모두 축소

필터링된 신호로, 벡터, 행렬 또는 N차원 배열로 반환됩니다.

참고 문헌

[1] Oppenheim, Alan V., Ronald W. Schafer, and John R. Buck. Discrete-Time Signal Processing. 2nd Ed. Upper Saddle River, NJ: Prentice Hall, 1999.

[2] Mitra, Sanjit K. Digital Signal Processing. 2nd Ed. New York: McGraw-Hill, 2001.

[3] Gustafsson, F. “Determining the initial states in forward-backward filtering.” IEEE® Transactions on Signal Processing. Vol. 44, April 1996, pp. 988–992.

확장 기능

R2006a 이전에 개발됨