Main Content

IIR 필터 설계

이 예제에서는 기본적인 버터워스 설계, 체비쇼프 설계, 타원 설계를 비교하고, 베셀 필터, Yule-Walker 필터, 일반화된 버터워스 필터를 살펴봅니다.

IIR 필터와 FIR 필터 비교

FIR 필터 대신 IIR 필터를 사용하면 FIR 필터보다 훨씬 낮은 필터 차수로 지정된 사양 세트를 충족할 수 있습니다. IIR 필터에 비선형 위상이 있더라도 MATLAB®에서의 데이터 처리는 일반적으로 “오프라인”으로 수행됩니다. 즉, 필터링을 수행하기 전에 전체 데이터 시퀀스를 사용할 수 있습니다. 따라서 비인과적 영위상 필터링 접근 방식(filtfilt 함수 사용)이 허용됩니다. 이 접근 방식에서는 IIR 필터의 비선형 위상 왜곡이 제거됩니다.

기본적인 IIR 필터

기본적인 IIR 필터인 버터워스, 체비쇼프 유형 I 및 유형 II, 타원, 베셀 모두 각기 다른 방식으로 이상적인 “벽돌담(Brick Wall)” 필터를 근사합니다.

Signal Processing Toolbox™에서는 아날로그 영역 및 디지털 영역 모두에서, 그리고 저역통과, 고역통과, 대역통과, 대역저지 구성에서 이러한 기본적인 유형의 IIR 필터를 생성할 수 있도록 함수를 제공합니다(베셀 필터는 아날로그 영역만 지원됨). 대부분의 필터 유형의 경우 통과대역 감쇠량과 저지대역 감쇠량 및 천이 폭 측면에서 지정된 필터 사양에 맞는 최저 필터 차수를 구할 수도 있습니다.

기타 IIR 필터

직접 필터 설계 함수 yulewalk는 지정된 주파수-응답 함수에 가까운 크기 응답을 가지는 필터를 구합니다. 이는 다중대역 대역통과 필터를 생성하는 한 가지 방법입니다.

모수적 모델링 함수 또는 시스템 식별 함수를 사용하여 IIR 필터를 설계할 수도 있습니다. 이러한 함수에 대해서는 Parametric Modeling에 설명되어 있습니다.

일반화된 버터워스 설계 함수 maxflat에 대해서는 일반화된 버터워스 필터 설계 섹션에 설명되어 있습니다.

IIR 필터 방법 요약

다음 표에는 Signal Processing Toolbox™를 사용한 다양한 필터 방법에 대한 요약과 함께 이러한 방법을 구현하는 데 사용할 수 있는 함수가 나열되어 있습니다.

툴박스 필터 방법과 사용 가능한 함수

필터 방법

설명

필터 함수

아날로그 프로토타이핑

연속적인(라플라스) 영역에서 기본적인 저역통과 프로토타입 필터의 극점과 영점을 사용하여 주파수 변환 및 필터 이산화를 통해 디지털 필터를 구합니다.

필터 설계:

besself, butter, cheby1, cheby2, ellip

차수 추정: buttord, cheb1ord, cheb2ord, ellipord

저역통과 아날로그 프로토타이핑: besselap, buttap, cheb1ap, cheb2ap, ellipap

주파수 변환: lp2bp, lp2bs, lp2hp, lp2lp

필터 이산화: bilinear, impinvar

직접 설계

조각별 선형 크기 응답의 근삿값을 계산하는 방식으로 이산시간 영역에서 직접 디지털 필터를 설계합니다.

yulewalk

일반화된 버터워스 설계

극점보다 영점이 많은 저역통과 버터워스 필터를 설계합니다.

maxflat

모수적 모델링

미리 정해진 시간 영역 응답 또는 주파수 영역 응답을 근사하는 디지털 필터를 구합니다. (광범위한 모수적 모델링 툴 모음은 System Identification Toolbox™ 문서를 참조하십시오.)

시간 영역 모델링:

lpc, prony, stmcb

주파수 영역 모델링: invfreqs, invfreqz

아날로그 프로토타이핑을 사용하는 기본적인 IIR 필터 설계

이 툴박스에서 제공하는 주요 IIR 디지털 필터 설계 기법은 기본적인 저역통과 아날로그 필터를 디지털 필터로 변환하는 것을 기반으로 합니다. 다음 섹션에서는 필터를 설계하는 방법을 설명하고 지원되는 필터 유형의 특성에 대한 요약을 제공합니다. 필터 설계 절차에 대한 세부 단계는 Special Topics in IIR Filter Design 항목을 참조하십시오.

완전히 기본적인 IIR 필터 설계

필터 설계 함수를 사용하여 저역통과, 고역통과, 대역통과 또는 대역저지 ftype 구성으로 임의 차수의 필터를 손쉽게 생성할 수 있습니다.

필터 설계 함수

필터 유형

설계 함수

베셀(besself, 아날로그만)

[b,a] = besself(n,Wn,ftype)

[z,p,k] = besself(n,Wn,ftype)

[A,B,C,D] = besself(n,Wn,ftype)

버터워스(butter)

[b,a] = butter(n,Wn,ftype)

[z,p,k] = butter(n,Wn,ftype)

[A,B,C,D] = butter(n,Wn,ftype)

체비쇼프 유형 I(cheby1)

[b,a] = cheby1(n,Rp,Wn,ftype)

[z,p,k] = cheby1(n,Rp,Wn,ftype)

[A,B,C,D] = cheby1(n,Rp,Wn,ftype)

체비쇼프 유형 II(cheby2)

[b,a] = cheby2(n,Rs,Wn,ftype)

[z,p,k] = cheby2(n,Rs,Wn,ftype)

[A,B,C,D] = cheby2(n,Rs,Wn,ftype)

타원(ellip)

[b,a] = ellip(n,Rp,Rs,Wn,ftype)

[z,p,k] = ellip(n,Rp,Rs,Wn,ftype)

[A,B,C,D] = ellip(n,Rp,Rs,Wn,ftype)

기본적으로 이들 함수는 각각 저역통과 필터를 반환합니다. 따라서 나이퀴스트 주파수가 1Hz가 되도록 원하는 차단 주파수 Wn만 정규화된 단위로 지정해야 합니다. 고역통과 필터라면 함수의 파라미터 목록에 "high"를 추가하십시오. 대역통과 필터나 대역저지 필터라면 통과대역 경계 주파수를 포함하는, 요소를 2개 가진 벡터로 Wn을 지정하십시오. 대역저지 구성의 경우에는 "stop"을 추가하십시오.

다음은 디지털 필터의 몇 가지 예입니다.

[bB,aB] = butter(5,0.4);                  % Lowpass Butterworth
[bC1,aC1] = cheby1(4,1,[0.4 0.7]);        % Bandpass Chebyshev Type I
[bC2,aC2] = cheby2(6,60,0.8,"high");      % Highpass Chebyshev Type II
[bE,aE] = ellip(3,1,60,[0.4 0.7],"stop"); % Bandstop elliptic

시뮬레이션을 위해 아날로그 필터를 설계하려면 후행 "s"를 사용하여 차단 주파수를 단위 rad/s로 지정하십시오.

[bBA,aBA] = butter(5,0.4,"s");    % Analog Butterworth filter

모든 필터 설계 함수는 설정된 출력 인수의 개수에 따라 전달 함수, 영점-극점-이득, 또는 상태공간 선형 시스템 모델 표현으로 필터를 반환합니다. 일반적으로 전달 함수 형식은 반올림 오차로 인한 수치적 문제가 발생할 수 있기 때문에 사용하지 않도록 합니다. 대신, zp2sos를 사용하여 2차섹션형(SOS)으로 변환할 수 있는 영점-극점-이득 형식을 사용한 후 SOS 형식을 사용하여 필터를 분석하거나 구현하십시오.

기본적인 IIR 저역통과 필터는 차단 주파수가 매우 낮은 경우 나쁜 조건 상태가 됩니다(ill-conditioned). 따라서, 매우 좁은 통과대역을 가지는 저역통과 IIR 필터를 설계하는 대신 넓은 통과대역을 설계하고 입력 신호를 데시메이션하는 것이 더 적합할 수 있습니다.

주파수 영역 사양에 맞는 IIR 필터 설계하기

Signal Processing Toolbox™에서는 차수 선택 함수를 제공합니다. 이 함수를 사용하여 주어진 일련의 요구 사항을 충족하는 최소 필터 차수를 계산할 수 있습니다.

필터 유형

차수 추정 함수

버터워스

[n,Wn] = buttord(Wp,Ws,Rp,Rs)

체비쇼프 유형 I

[n,Wn] = cheb1ord(Wp,Ws,Rp,Rs)

체비쇼프 유형 II

[n,Wn] = cheb2ord(Wp,Ws,Rp,Rs)

타원

[n,Wn] = ellipord(Wp,Ws,Rp,Rs)

이러한 차수 추정 함수는 필터 설계 함수와 함께 사용하는 경우에 유용합니다. 1000Hz ~ 2000Hz의 통과대역, 양쪽에서 500Hz 떨어진 저지대역 시작값, 10kHz 샘플링 주파수, 최대 1dB의 통과대역 리플, 최소 60dB의 저지대역 감쇠량을 가지는 대역통과 필터가 필요하다고 가정하겠습니다. 다음과 같이 butter 함수를 사용하여 이러한 사양을 충족할 수 있습니다.

[n,Wn] = buttord([1000 2000]/5000,[500 2500]/5000,1,60)
n = 
12
Wn = 1×2

    0.1951    0.4080

[bB2,aB2] = butter(n,Wn);

동일한 요구 사항을 충족하는 타원 필터는 다음과 같이 지정됩니다.

[n,Wn] = ellipord([1000 2000]/5000,[500 2500]/5000,1,60)
n = 
5
Wn = 1×2

    0.2000    0.4000

[bE2,aE2] = ellip(n,1,60,Wn);

이러한 함수는 기타 표준 대역 구성은 물론, 아날로그 필터에도 사용할 수 있습니다.

기본적인 IIR 필터 유형 비교

Signal Processing Toolbox™에서는 다섯 가지 유형의 기본적인 IIR 필터를 제공하며, 각 방식별로 최적화하여 사용할 수 있습니다. 이 섹션에서는 각각에 대한 기본적인 아날로그 프로토타입 형식을 보여주며 주요 특성에 대한 요약을 제공합니다.

버터워스 필터

버터워스 필터는 아날로그 주파수 Ω=0Ω=에서 이상적인 저역통과 필터 응답에 대한 최적의 테일러 급수 근사(Taylor series approximation)를 제공합니다. 임의 차수 N에 대해 크기 제곱 응답은 이러한 위치에서 2N1 0값 도함수를 가집니다(Ω=0Ω=에서 최대로 평탄함). 응답은 전체적으로 단조적(Monotonic)입니다. 즉 Ω=0에서 Ω=까지 매끄럽게 감소합니다. Ω=1에서 |H(jΩ)|=1/2입니다.

n = 5;
[z,p,k] = buttap(n);
[bBp,aBp] = zp2tf(z,p,k);
[hBp,wBp] = freqs(bBp,aBp,4096);
semilogx(wBp,abs(hBp))
grid on
xlabel("Frequency (rad/s)")
ylabel("Magnitude")

Figure contains an axes object. The axes object with xlabel Frequency (rad/s), ylabel Magnitude contains an object of type line.

체비쇼프 유형 I 필터

체비쇼프 유형 I 필터는 통과대역에 동일한 리플 RpdB을 결합시켜 전체 통과대역에서 이상적인 주파수 응답과 실제 주파수 응답 사이의 절대 오차를 최소화합니다. 저지대역 응답은 최대로 평탄합니다. 통과대역에서 저지대역으로의 천이는 버터워스 필터보다 더 빠르게 이루어집니다. Ω=1에서 |H(jΩ)|=10 -Rp/20입니다.

n = 5;
Rp = 0.5;
[z,p,k] = cheb1ap(n,Rp);
[bC1p,aC1p] = zp2tf(z,p,k);
[hC1p,wC1p] = freqs(bC1p,aC1p,4096);
semilogx(wC1p,abs(hC1p))
grid on
xlabel("Frequency (rad/s)")
ylabel("Magnitude")

Figure contains an axes object. The axes object with xlabel Frequency (rad/s), ylabel Magnitude contains an object of type line.

체비쇼프 유형 II 필터

체비쇼프 유형 II 필터는 저지대역에 동일한 리플 RsdB을 결합시켜 전체 저지대역에서 이상적인 주파수 응답과 실제 주파수 응답 사이의 절대 오차를 최소화합니다. 통과대역 응답은 최대로 평탄합니다.

저지대역은 유형 I 필터만큼 빠르게 0에 도달하지 않습니다(짝수 값 필터 차수 n의 경우 0에 도달하지 않음). 그러나 통과대역에 리플이 없는 경우 대개 중요한 이점으로 작용합니다. Ω=1에서 |H(jΩ)|=10 -Rs/20입니다.

n = 5;
Rs = 20;
[z,p,k] = cheb2ap(n,Rs);
[bC2p,aC2p] = zp2tf(z,p,k);
[hC2p,wC2p] = freqs(bC2p,aC2p,4096);
semilogx(wC2p,abs(hC2p))
grid on
xlabel("Frequency (rad/s)")
ylabel("Magnitude")

Figure contains an axes object. The axes object with xlabel Frequency (rad/s), ylabel Magnitude contains an object of type line.

타원 필터

타원 필터는 통과대역과 저지대역에서 등리플을 가집니다. 이 필터는 지원되는 필터 유형의 최소 차수로 필터 요구 사항을 충족합니다. 필터 차수 n, 통과대역 리플 Rp(단위: 데시벨), 저지대역 리플 Rs(단위: 데시벨)가 주어진 경우, 타원 필터는 천이 폭을 최소화합니다. Ω=1에서 |H(jΩ)|=10 -Rp/20입니다.

n = 5;
Rp = 0.5;
Rs = 20;
[z,p,k] = ellipap(n,Rp,Rs);
[bEp,aEp] = zp2tf(z,p,k);
[hEp,wEp] = freqs(bEp,aEp,4096);
semilogx(wEp,abs(hEp))
grid on
xlabel("Frequency (rad/s)")
ylabel("Magnitude")

Figure contains an axes object. The axes object with xlabel Frequency (rad/s), ylabel Magnitude contains an object of type line.

베셀 필터

아날로그 베셀 저역통과 필터는 영주파수에서 최대로 평탄한 군지연을 가지며 전체 통과대역에서 거의 일정한 군지연을 유지합니다. 따라서 필터링된 신호가 통과대역 주파수 범위에서 그 파형을 유지합니다. 아날로그 베셀 저역통과 필터가 주파수 매핑을 통해 디지털로 변환되면 더 이상 이러한 최대 평탄 속성을 가지지 않습니다. Signal Processing Toolbox™가 제공하는 완전한 베셀 필터 설계 함수는 아날로그에만 사용할 수 있습니다.

베셀 필터는 일반적으로 만족스러운 저지대역 감쇠량을 얻기 위해 다른 필터보다 높은 필터 차수를 필요로 합니다. Ω=1에서 |H(jΩ)|<1/2입니다. 그리고 필터 차수 n이 증가할수록 감소합니다.

n = 5;
[z,p,k] = besselap(n);
[bBsp,aBsp] = zp2tf(z,p,k);
[hBsp,wBsp] = freqs(bBsp,aBsp,4096);
semilogx(wBsp,abs(hBsp))
grid on
xlabel("Frequency (rad/s)")
ylabel("Magnitude")

Figure contains an axes object. The axes object with xlabel Frequency (rad/s), ylabel Magnitude contains an object of type line.

참고: 위에 나온 저역통과 필터는 아날로그 프로토타입 함수 besselap, buttap, cheb1ap, cheb2ap, ellipap를 사용하여 작성되었습니다. 이러한 함수는 1rad/s의 차단 주파수를 갖는 적합한 유형의 n차 아날로그 필터에 대한 영점, 극점, 이득을 구합니다. 완전한 필터 설계 함수(besself, butter, cheby1, cheby2, ellip)는 설계 절차의 첫 번째 단계로 프로토타이핑 함수를 호출합니다. 자세한 내용은 Special Topics in IIR Filter Design 항목을 참조하십시오.

직접 IIR 필터 설계

이 툴박스에서는 이산 영역에서의 사양을 기반으로 하여 필터를 구하는 IIR 설계 기법을 직접 방법이라는 용어를 사용하여 설명합니다. 아날로그 프로토타이핑 방법과 달리, 직접 설계 방법은 표준 저역통과, 고역통과, 대역통과 또는 대역저지 구성으로 제한되지 않습니다. 이 함수는 다중대역 등의 임의 주파수 응답을 갖는 필터를 설계합니다. 이 섹션에서는 yulewalk 함수에 대해 설명합니다. 이 함수는 필터 설계에 사용하도록 특별히 고안되었습니다. Parametric Modeling에서는 Prony 방법, 선형 예측, Steiglitz-McBride 방법, 역 주파수 설계와 같은 직접 설계 방법으로 간주될 수도 있는 기타 방법에 대해 설명합니다.

yulewalk 함수는 지정된 주파수 응답에 적합한 재귀적인 IIR 디지털 필터를 설계합니다. yulewalk의 이름은 필터의 분모 계수를 구하는 방법을 나타냅니다. 이 함수는 지정된 이상적인 크기 제곱 응답의 역 FFT를 구하고 결과로 생성된 자기상관 함수 샘플을 사용하여 수정된 Yule-Walker 방정식의 해를 구합니다. [b,a] = yulewalk(n,f,m) 문은 주파수-크기 특성이 벡터 fm에 지정된 주파수-크기에 근사한 n차 IIR 필터에 대한 n+1개 분자 및 분모 계수를 포함하는 행 벡터 ba를 반환합니다. f는 0부터 1까지의 범위에 속하는 주파수 점으로 구성된 벡터입니다(여기서 1은 나이퀴스트 주파수임). mf에 포함된 점에서 지정된 크기 응답을 포함하는 벡터입니다. fm은 다중대역 응답을 포함하여 모든 조각별 선형 크기 응답을 설명할 수 있습니다. 이 함수에 대응되는 FIR 함수는 fir2이며, 이 함수도 임의 조각별 선형 크기 응답을 기반으로 하여 필터를 설계합니다. 자세한 내용은 FIR 필터 설계 항목을 참조하십시오.

참고로, yulewalk는 위상 정보를 받지 않으며, 결과로 생성되는 필터의 최적성에 대한 명령문은 없습니다.

yulewalk를 사용하여 다중대역 필터를 설계하고 지정된 주파수 응답과 실제 주파수 응답을 플로팅합니다.

m = [0   0   1   1   0   0   1   1   0 0];
f = [0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 1];
[bY,aY] = yulewalk(10,f,m);
freqz(bY,aY,128)

Figure contains 2 axes objects. Axes object 1 with title Phase, xlabel Normalized Frequency (\times\pi rad/sample), ylabel Phase (degrees) contains an object of type line. Axes object 2 with title Magnitude, xlabel Normalized Frequency (\times\pi rad/sample), ylabel Magnitude (dB) contains an object of type line.

일반화된 버터워스 필터 설계

maxflat 함수를 사용하면 일반화된 버터워스 필터, 즉 영점 개수와 극점 개수가 다른 버터워스 필터를 설계할 수 있습니다. 이는 극점이 영점보다 더 많은 계산량을 필요로 하는 일부 구현에서 적합합니다. maxflatbutter 함수와 동일합니다. 단, 하나의 차수를 지정하는 대신 분자와 분모에 각각 하나씩 두 개의 차수를 지정할 수 있습니다. 이러한 필터는 최대로 평탄합니다. 이는 결과로 생성되는 필터가 어떤 분자나 분모의 차수에 대해서도 가장 적합하다는 것을 의미합니다. 이 경우, 0과 나이퀴스트 주파수 ω = π에서 최대 개수의 도함수는 모두 0으로 설정됩니다.

예를 들어, 두 차수가 동일한 경우 maxflatbutter와 동일합니다.

[bM0,aM0] = maxflat(3,3,0.25)
bM0 = 1×4

    0.0317    0.0951    0.0951    0.0317

aM0 = 1×4

    1.0000   -1.4590    0.9104   -0.1978

[bB0,aB0] = butter(3,0.25)
bB0 = 1×4

    0.0317    0.0951    0.0951    0.0317

aB0 = 1×4

    1.0000   -1.4590    0.9104   -0.1978

그러나, maxflat을 사용하면 극점보다 영점이 더 많은 필터를 설계할 수 있기 때문에 더 유연합니다.

[bM1,aM1] = maxflat(3,1,0.25)
bM1 = 1×4

    0.0950    0.2849    0.2849    0.0950

aM1 = 1×2

    1.0000   -0.2402

maxflat에 대한 세 번째 입력값은 반전력 주파수, 즉 1/√2의 크기 응답을 가지는 0에서 1 사이의 주파수입니다.

"sym" 옵션을 사용하여 최대 평탄 속성을 가지는 선형 위상 필터를 설계할 수도 있습니다.

bM2 = maxflat(4,"sym",0.3)
bM2 = 1×5

    0.0331    0.2500    0.4337    0.2500    0.0331

필터 응답 비교:

filterAnalyzer(bM0,aM0,bM1,aM1,bM2,1, ...
    FilterNames=["SameOrder" "DiffOrder" "Symmetric"])

maxflat 알고리즘에 대한 자세한 내용은 셀레스닉(Selesnick) 및 부루스(Burrus)[3]를 참조하십시오.