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

디지털 필터 설계에 대한 실용적 입문

이 예제에서는 Signal Processing Toolbox® 제품의 designfilt 함수를 사용하여 주파수 응답 사양을 기반으로 FIR 필터 및 IIR 필터를 설계하는 방법을 보여줍니다. 이 예제는 저역통과 필터를 중점적으로 다루지만, 대부분의 결과는 다른 응답 유형에도 적용됩니다.

이 예제에서는 디지털 필터의 응용보다 디지털 필터의 설계에 대해 중점적으로 다룹니다. 디지털 필터의 응용에 대해 자세히 알아보려면 디지털 필터링에 대한 실용적 입문 예제를 참조하십시오.

FIR 필터 설계

저역통과 필터 사양

이상적인 저역통과 필터는 지정된 차단 주파수 ωc 아래에 있는 신호의 모든 주파수 성분을 변경되지 않은 상태로 유지하고 ωc를 초과하는 모든 성분을 거부하는 필터입니다. 이상적인 저역통과 필터를 구현하는 데 필요한 임펄스 응답은 무한대로 길기 때문에 이상적인 FIR 저역통과 필터를 설계하는 것은 불가능합니다. 이상적인 임펄스 응답에 대한 유한한 길이의 근삿값을 사용하는 경우 필터의 통과대역(ω<ωc)과 저지대역(ω>ωc) 모두에 리플이 존재하게 되고 통과대역과 저지대역 사이에 0이 아닌 천이 폭이 발생합니다.

통과대역/저지대역 리플과 천이 폭은 이상적인 저역통과 필터 응답과의 편차로서, 유한한 임펄스 응답으로 근사할 때 나타나는 원치 않지만 불가피한 편차입니다. 이러한 편차는 다음 그림에 묘사되어 있습니다.

  • 실용적인 FIR 설계는 일반적으로 허용 가능한 값을 초과하지 않는 최대 통과대역 및 저지대역 리플과 천이 폭을 갖는 필터로 구성됩니다. 이러한 설계 사양 외에도, 필터 차수 또는 이에 해당하는 잘린 임펄스 응답의 길이를 선택해야 합니다.

필터 설계의 설계 사양에 대한 효과적인 비유로, 아래 그림에 표시된 삼각형의 한 각도로 각각의 사양을 생각할 수 있습니다.

이 삼각형은 설계 사양을 선택할 때 사용할 수 있는 자유도를 이해하는 데 사용됩니다. 각도의 합은 고정되어 있기 때문에 최대 두 개의 사양 값을 선택할 수 있습니다. 세 번째 사양은 특정 설계 알고리즘에 따라 결정됩니다. 또한, 삼각형의 각도와 마찬가지로, 사양 중 하나를 더 크게/더 작게 만들면 다른 사양 하나 또는 둘 모두에 영향을 미치게 됩니다.

FIR 필터는 본질적으로 안정적이며 선형 위상을 갖도록 설계할 수 있기 때문에 매우 유용합니다. 그럼에도 불구하고, 이러한 필터는 긴 과도(Transient) 응답을 가질 수 있으며 특정 응용 사례에서 많은 계산량이 필요한 것으로 판명될 수 있습니다.

최소 차수 FIR 설계

최소 차수 설계는 통과대역 주파수 및 저지대역 주파수와 함께 통과대역 리플과 저지대역 감쇠량을 지정하면 얻어집니다. 그러면, 설계 알고리즘이 해당 사양을 준수하는 최소 필터 길이를 선택합니다.

0.37*pi rad/sample의 통과대역 주파수, 0.43*pi rad/sample의 저지대역 주파수(천이 폭이 0.06*pi rad/sample에 해당함), 1dB의 통과대역 리플, 30dB의 저지대역 감쇠량을 갖는 최소 차수 저역통과 FIR 필터를 설계합니다.

Fpass = 0.37; 
Fstop = 0.43;
Ap = 1;
Ast = 30;

d = designfilt('lowpassfir','PassbandFrequency',Fpass,...
  'StopbandFrequency',Fstop,'PassbandRipple',Ap,'StopbandAttenuation',Ast);

hfvt = fvtool(d);

결과로 생성되는 필터 차수는 filtord 함수를 사용하여 쿼리할 수 있습니다.

N = filtord(d)
N = 39

info 함수를 사용하면 필터를 설계하는 데 사용되는 파라미터에 대한 자세한 내용을 확인할 수 있습니다.

info(d)
ans = 17x44 char array
    'FIR Digital Filter (real)                   '
    '-------------------------                   '
    'Filter Length  : 40                         '
    'Stable         : Yes                        '
    'Linear Phase   : Yes (Type 2)               '
    '                                            '
    'Design Method Information                   '
    'Design Algorithm : Equiripple               '
    '                                            '
    'Design Specifications                       '
    'Sample Rate     : N/A (normalized frequency)'
    'Response        : Lowpass                   '
    'Specification   : Fp,Fst,Ap,Ast             '
    'Stopband Edge   : 0.43                      '
    'Passband Edge   : 0.37                      '
    'Stopband Atten. : 30 dB                     '
    'Passband Ripple : 1 dB                      '

  • designfilt 함수는 기본적으로 등리플 설계 알고리즘을 선택합니다. 선형 위상 등리플 필터는 지정된 차수에서 이상적인 필터와의 가능한 최대 편차가 최소가 되기 때문에 바람직합니다.

하지만, 최소 차수 설계는 카이저 윈도우를 사용하여 얻을 수도 있습니다. 카이저 윈도우 방법을 사용할 경우 동일한 사양에 대해 더 큰 필터 차수가 생성되지만, 이 알고리즘은 설계 사양이 매우 엄격할 경우 계산량이 덜 필요하며 수렴 문제가 발생할 가능성이 더 적습니다. 이러한 현상은 매우 좁은 천이 폭이나 매우 큰 저지대역 감쇠량이 필요한 응용 사례에서 나타날 수 있습니다.

카이저 윈도우 방법을 사용하여 위에 명시된 것과 동일한 사양으로 필터를 설계하고 해당 응답을 등리플 필터와 비교합니다.

dk = designfilt('lowpassfir','PassbandFrequency',Fpass,...
  'StopbandFrequency',Fstop,'PassbandRipple',Ap,...
  'StopbandAttenuation',Ast, 'DesignMethod', 'kaiserwin');

addfilter(hfvt,dk);
legend(hfvt,'Equiripple design', 'Kaiser window design')

N = filtord(dk)
N = 52

헤르츠 단위로 주파수 파라미터 지정하기

필터가 동작하는 샘플 레이트를 알고 있으면 해당 샘플 레이트와 주파수를 헤르츠 단위로 지정할 수 있습니다. 2kHz의 샘플 레이트에 대해 최소 차수 등리플 필터를 다시 설계합니다.

Fpass = 370;
Fstop = 430;
Ap = 1;
Ast = 30;
Fs = 2000; 

d = designfilt('lowpassfir','PassbandFrequency',Fpass,...
  'StopbandFrequency',Fstop,'PassbandRipple',Ap,...
  'StopbandAttenuation',Ast,'SampleRate',Fs);
  
hfvt = fvtool(d);

고정 차수, 고정 천이 폭

고정 차수 설계는 계산 부하에 민감하거나 필터 계수의 개수에 제한을 두는 응용 사례에 유용합니다. 옵션으로 천이 폭을 고정할 수 있습니다. 단, 그러면 통과대역 리플/저지대역 감쇠량을 제어할 수 없게 됩니다.

370Hz의 통과대역 주파수, 430Hz의 저지대역 주파수, 2kHz의 샘플 레이트를 갖는 30차 저역통과 FIR 필터가 있다고 가정하겠습니다. 이러한 특정 사양 세트에 대해 등리플과 최소제곱의 두 가지 설계 방법을 사용할 수 있습니다. 각 방법으로 하나씩 필터를 설계하고 결과를 비교해 보겠습니다.

N = 30;
Fpass = 370;
Fstop = 430;
Fs = 2000; 

% Design method defaults to 'equiripple' when omitted
deq = designfilt('lowpassfir','FilterOrder',N,'PassbandFrequency',Fpass,...
  'StopbandFrequency',Fstop,'SampleRate',Fs);

dls = designfilt('lowpassfir','FilterOrder',N,'PassbandFrequency',Fpass,...
  'StopbandFrequency',Fstop,'SampleRate',Fs,'DesignMethod','ls');

hfvt = fvtool(deq,dls);
legend(hfvt,'Equiripple design', 'Least-squares design')

등리플 필터는 지정된 최소 저지대역 감쇠량이나 지정된 최대 통과대역 리플을 갖는 필터를 설계하는 것과 같이 특정 허용오차를 충족해야 하는 경우에 매우 적합합니다. 반면에, 통과대역/저지대역에서 이상적인 필터와 실제 필터 사이의 오차 에너지를 최소화하려는 경우에는 이러한 설계가 바람직하지 않을 수 있습니다.

  • 특정 주파수 대역에서 신호 에너지를 최대한 줄이려면 최소제곱 설계를 사용해야 합니다.

위의 예제에서, 설계된 필터는 통과대역과 저지대역에서 동일한 리플을 갖습니다. 가중치를 사용하여 필터 차수를 고정된 상태로 유지하면서 이러한 대역 중 하나에서 리플을 줄일 수 있습니다. 예를 들어, 저지대역 리플을 통과대역 리플의 1/10이 되게 하려면 저지대역 가중치를 통과대역 가중치의 10배로 지정해야 합니다. 이러한 사실에 기반하여 등리플 필터를 다시 설계합니다.

deqw = designfilt('lowpassfir','FilterOrder',N,'PassbandFrequency',Fpass,...
  'StopbandFrequency',Fstop,'SampleRate',Fs,...
  'PassbandWeight',1,'StopbandWeight',10);

hfvt = fvtool(deq,deqw);
legend(hfvt,'Equiripple design', 'Equiripple design with weighted stopband')

고정 차수, 고정 차단 주파수

윈도우 설계 방법을 사용하여 고정된 필터 차수와 차단 주파수를 갖는 필터를 설계할 수 있습니다.

  • 여러 다른 윈도우를 사용하여 필터 차수를 변경되지 않은 상태로 유지하면서 저지대역 감쇠량을 제어할 수 있습니다.

예를 들어, 60Hz의 차단 주파수와 1kHz의 샘플 레이트를 갖는 100차 저역통과 FIR 필터가 있다고 가정해 보겠습니다. 해밍 윈도우를 사용하여 생성된 설계와 사이드로브 감쇠량이 90dB인 체비쇼프 윈도우를 사용하여 생성된 설계를 비교합니다.

dhamming = designfilt('lowpassfir','FilterOrder',100,'CutoffFrequency',60,...
  'SampleRate',1000,'Window','hamming');

dchebwin = designfilt('lowpassfir','FilterOrder',100,'CutoffFrequency',60,...
  'SampleRate',1000,'Window',{'chebwin',90});

hfvt = fvtool(dhamming,dchebwin);
legend(hfvt,'Hamming window', 'Chebyshev window')

고정된 차단 주파수, 통과대역 리플, 저지대역 감쇠량, 고정된 천이 폭, 고정된 반전력(3dB) 주파수 등 고정된 차수를 갖는 필터를 지정할 수 있는 방법은 여러 가지가 있습니다.

IIR 필터 설계

FIR 필터의 문제점 중 하나는 특정 설계 사양을 충족하기 위해서는 큰 필터 차수가 필요하다는 것입니다. 리플이 일정하게 유지되는 경우 필터 차수가 천이 폭에 반비례하여 증가합니다. 피드백을 사용하면 훨씬 더 작은 필터 차수로 설계 사양 세트를 충족할 수 있습니다. 이것이 IIR 필터 설계의 바탕이 되는 아이디어입니다. "무한 임펄스 응답"(IIR)이라는 용어는 임펄스가 필터에 적용될 때 출력값이 0으로 감쇠되지 않는다는 사실에서 기인된 것입니다.

  • IIR 필터는 계산 리소스가 부족한 경우에 유용합니다. 그러나, 안정적이고 인과적인 IIR 필터는 완벽한 선형 위상을 가질 수 없습니다. 위상 선형성이 요구되는 경우에는 IIR 설계를 사용하지 마십시오.

IIR 필터를 사용하는 또 다른 중요한 이유는 군지연이 FIR 필터에 비해 상대적으로 작다는 점입니다. 따라서 과도(Transient) 응답이 더 짧아집니다.

버터워스 필터

버터워스 필터는 최대로 평탄한 IIR 필터입니다. 통과대역과 저지대역이 평탄하기 때문에 천이 대역이 매우 넓습니다. 천이 폭이 좁은 필터를 얻으려면 차수가 커야 합니다.

100Hz의 통과대역 주파수, 300Hz의 저지대역 주파수, 1dB의 최대 통과대역 리플, 60dB의 저지대역 감쇠량을 갖는 최소 차수 버터워스 필터를 설계합니다. 샘플 레이트는 2kHz입니다.

Fp = 100;
Fst = 300;
Ap = 1;
Ast = 60;
Fs = 2e3;

dbutter = designfilt('lowpassiir','PassbandFrequency',Fp,...
  'StopbandFrequency',Fst,'PassbandRipple',Ap,...
  'StopbandAttenuation',Ast,'SampleRate',Fs,'DesignMethod','butter');

체비쇼프 유형 I 필터

체비쇼프 유형 I 필터는 통과대역 리플을 허용함으로써 동일한 차수의 버터워스 필터보다 더 작은 천이 폭을 제공합니다.

  • 버터워스 필터와 체비쇼프 유형 I 필터 모두 최대로 평탄한 저지대역을 가집니다. 지정된 필터 차수에서 통과대역 리플과 천이 폭은 서로 절충적인 관계입니다.

위에서 설명한 버터워스 필터와 동일한 사양으로 체비쇼프 유형 I 필터를 설계합니다.

dcheby1 = designfilt('lowpassiir','PassbandFrequency',Fp,...
  'StopbandFrequency',Fst,'PassbandRipple',Ap,...
  'StopbandAttenuation',Ast,'SampleRate',Fs,'DesignMethod','cheby1');

체비쇼프 유형 II 필터

  • 체비쇼프 유형 II 필터는 최대로 평탄한 통과대역과 등리플 저지대역을 가집니다.

일반적으로 아주 큰 감쇠량이 필요하지 않으므로 일부 저지대역 리플을 허용함으로써 상대적으로 작은 차수로 필요한 천이 폭을 얻을 수 있습니다.

이전 예제에서 설명한 것과 동일한 사양으로 최소 차수 체비쇼프 유형 II 필터를 설계합니다.

dcheby2 = designfilt('lowpassiir','PassbandFrequency',Fp,...
  'StopbandFrequency',Fst,'PassbandRipple',Ap,...
  'StopbandAttenuation',Ast,'SampleRate',Fs,'DesignMethod','cheby2');

타원 필터

타원 필터는 통과대역과 저지대역 모두에 리플을 허용함으로써 체비쇼프 필터와 버터워스 필터를 일반화합니다. 리플이 상대적으로 작게 생성되므로 타원 필터는 얼마든지 체비쇼프 필터 또는 버터워스 필터의 크기와 위상 응답에 가깝게 근사할 수 있습니다.

  • 타원 필터는 가장 작은 차수를 사용해 지정된 천이 폭을 얻습니다.

dellip = designfilt('lowpassiir','PassbandFrequency',Fp,...
  'StopbandFrequency',Fst,'PassbandRipple',Ap,...
  'StopbandAttenuation',Ast,'SampleRate',Fs,'DesignMethod','ellip');

네 가지 IIR 필터의 응답과 차수를 비교합니다.

  • 동일한 사양 제약 조건에 대해 버터워스 방법은 가장 높은 차수를 생성하고 타원 방법은 가장 작은 차수를 생성합니다.

FilterOrders = [filtord(dbutter) filtord(dcheby1) filtord(dcheby2) filtord(dellip)]
FilterOrders = 1×4

     7     5     5     4

hfvt = fvtool(dbutter,dcheby1,dcheby2,dellip);
axis([0 1e3 -80 2]);
legend(hfvt,'Butterworth', 'Chebyshev Type I',...
  'Chebyshev Type II','Elliptic')

통과대역을 확대하여 리플 차이를 확인합니다.

axis([0 150 -3 2]);

통과대역 사양 또는 저지대역 사양에 정확하게 일치시키기

최소 차수 설계에서 이상적인 차수는 다음 정수로 반올림되어야 합니다. 이러한 소수 차수의 추가로 인해 알고리즘이 해당 사양을 실제로 초과할 수 있습니다.

  • 'MatchExactly' 파라미터를 사용하여 설계 알고리즘이 하나의 대역과 정확히 일치하도록 제한합니다. 다른 대역은 해당 사양을 초과합니다.

기본적으로, 체비쇼프 유형 I 설계는 통과대역과 일치하고, 버터워스와 체비쇼프 유형 II는 저지대역과 일치하며, 타원 설계는 통과대역 및 저지대역 모두와 일치합니다(반면 저지대역 경계 주파수는 초과됨).

dellip1 = designfilt('lowpassiir','PassbandFrequency',Fp,...
  'StopbandFrequency',Fst,'PassbandRipple',Ap,...
  'StopbandAttenuation',Ast,'SampleRate',Fs,'DesignMethod','ellip',...
  'MatchExactly','passband');

dellip2 = designfilt('lowpassiir','PassbandFrequency',Fp,...
  'StopbandFrequency',Fst,'PassbandRipple',Ap,...
  'StopbandAttenuation',Ast,'SampleRate',Fs,'DesignMethod','ellip',...
  'MatchExactly','stopband');

hfvt = fvtool(dellip, dellip1, dellip2);
legend(hfvt,'Matched passband and stopband','Matched passband',...
  'Matched stopband');
axis([0 1e3 -80 2]);

통과대역과 일치하는 설계와 통과대역 및 저지대역 모두와 일치하는 설계는 100Hz의 통과대역 주파수 값에서 정확히 1dB의 리플을 가집니다.

군지연 비교

IIR 필터의 경우, 리플/천이 폭의 상호 절충 관계뿐만 아니라 위상 왜곡의 정도도 고려해야 합니다. 전체 나이퀴스트 구간에 걸쳐 선형 위상을 갖는 것은 불가능합니다. 따라서 위상 응답이 선형과 얼마나 차이가 있는지 확인해야 할 수 있습니다. 이를 수행하는 좋은 방법은 군지연(이상적으로는 일정해야 함)을 검토하여 얼마나 평탄한지 확인하는 것입니다.

위에서 설계한 네 가지 IIR 필터의 군지연을 비교합니다.

  • 위상이 문제인 경우 버터워스 설계와 체비쇼프 유형 II 설계가 가장 평탄한 군지연을 가지며, 따라서 가장 적은 왜곡을 초래한다는 점을 유의하십시오.

hfvt = fvtool(dbutter,dcheby1,dcheby2,dellip,'Analysis','grpdelay');
legend(hfvt,'Butterworth', 'Chebyshev Type I',...
  'Chebyshev Type II','Elliptic')

결론

이 예제에서는 designfilt를 사용하여 다양한 제약 조건과 설계 방법으로 다양한 저역통과 FIR 필터와 IIR 필터를 얻는 방법에 대해 알아보았습니다. designfilt는 고역통과, 대역통과, 대역저지, 임의 크기, 미분기, 힐베르트 설계를 얻는 데에도 사용될 수 있습니다. 사용 가능한 모든 옵션에 대한 자세한 내용을 확인하려면 필터 설계 갤러리 예제와 설명서를 참조하십시오.

추가 참고 자료

필터 설계와 분석에 대한 자세한 내용은 Signal Processing Toolbox® 소프트웨어 설명서를 참조하십시오. 필터 응용에 대한 자세한 내용은 디지털 필터링에 대한 실용적 입문 예제를 참조하십시오.