Main Content

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

FIR 필터 설계

FIR 필터와 IIR 필터 비교

유한 길이의 임펄스 응답을 갖는 디지털 필터(전영점 필터 또는 FIR 필터)는 무한 길이의 임펄스 응답(IIR) 필터와 달리 이점과 단점이 모두 있습니다.

FIR 필터의 주요 이점은 다음과 같습니다.

  • 정확한 선형 위상을 가질 수 있습니다.

  • 항상 안정적입니다.

  • 설계 방법은 일반적으로 선형입니다.

  • 하드웨어에서 효율적으로 구현할 수 있습니다.

  • 필터 시작 과도(Transient) 상태는 유한한 길이를 갖습니다.

FIR 필터의 주요 단점은 지정된 수준의 성능을 달성하기 위해 IIR 필터보다 훨씬 높은 필터 차수를 필요로 하는 경우가 많다는 것입니다. 따라서, FIR 필터의 지연은 성능이 동일한 IIR 필터의 지연보다 훨씬 더 큽니다.

FIR 필터 요약

FIR 필터

필터 설계 방법

설명

필터 함수

윈도우 적용(Windowing)

지정된 "벽돌담(Brick Wall)" 필터의 잘린 푸리에 역변환에 윈도우를 적용합니다.

fir1, fir2, kaiserord

천이 대역을 갖는 다중대역

주파수 범위의 부분 대역에 대한 등리플 또는 최소제곱 접근 방식입니다.

firls, firpm, firpmord

제약된 최소제곱

최대 오차 제약 조건이 적용된 전체 주파수 범위에서 제곱 적분 오차를 최소화합니다.

fircls, fircls1

임의 응답

비선형 위상과 복소 필터를 포함하는 임의 응답입니다.

cfirpm

올림 코사인

매끄러운 정현파 천이를 갖는 저역통과 응답입니다.

rcosdesign

선형 위상 필터

cfirpm을 제외하고, 모든 FIR 필터 설계 함수는 선형 위상 필터만 설계합니다. 필터 계수 또는 이러한 필터의 “탭”은 우대칭 또는 기대칭 관계를 따릅니다. 이러한 대칭성과 필터의 차수 n이 짝수인지 홀수인지에 따라 선형 위상 필터(길이 n+1 벡터 b에 저장됨)는 해당 주파수 응답에 대해 내재된 특정 제한 사항을 가집니다.

선형 위상 필터 유형필터 차수 계수의 대칭성응답 H(f), f = 0응답 H(f), f = 1(나이퀴스트)

유형 I

짝수

짝수:

b(k)=b(n+2k),k=1,...,n+1

제한 사항 없음

제한 사항 없음

유형 II

홀수

짝수:

b(k)=b(n+2k),k=1,...,n+1

제한 사항 없음

H(1) = 0

유형 III

짝수

홀수:

b(k)=b(n+2k),k=1,...,n+1

H(0) = 0

H(1) = 0

유형 IV

홀수

홀수:

b(k)=b(n+2k),k=1,...,n+1

H(0) = 0

제한 사항 없음

선형 위상 FIR 필터의 위상 지연과 군지연은 서로 동일하며 주파수 대역에서 일정합니다. 차수가 n인 선형 위상 FIR 필터의 경우, 군지연은 n/2이고 필터링된 신호는 단순하게 n/2 시간 스텝만큼 지연됩니다(필터링된 신호의 푸리에 변환 크기는 필터의 크기 응답에 따라 스케일링됨). 이 속성은 통과대역에서 신호의 파형을 유지합니다. 즉, 위상 왜곡이 없습니다.

함수 fir1, fir2, firls, firpm, fircls, fircls1 모두 기본적으로 유형 I 및 유형 II 선형 위상 FIR 필터를 설계합니다. rcosdesign은 유형 I 필터만 설계합니다. firlsfirpm 모두 'hilbert' 또는 'differentiator' 플래그가 지정된 경우 유형 III 및 유형 IV 선형 위상 FIR 필터를 설계합니다. cfirpm은 모든 유형의 선형 위상 필터는 물론, 비선형 위상 필터도 설계할 수 있습니다.

참고

유형 II 필터의 주파수 응답이 나이퀴스트 주파수(“고주파")에서 0이기 때문에 fir1은 유형 II 고역통과 필터와 대역저지 필터를 설계하지 않습니다. 따라서, n이 홀수 값이면 fir1은 차수에 1을 추가하고 유형 I 필터를 반환합니다.

윈도우 적용(Windowing) 방법

ω0 rad/s의 차단 주파수를 갖는 이상적인, 즉 “벽돌담(Brick Wall)” 디지털 저역통과 필터가 있다고 가정하겠습니다. 이 필터는 크기가 ω0보다 작은 모든 주파수에서 크기 1을 가지고, 크기가 ω0과 π 사이인 주파수에서 크기 0을 가집니다. 이 필터의 임펄스 응답 시퀀스 h(n)은 다음과 같습니다.

h(n)=12πππH(ω)ejωndω=12πω0ω0ejωndω=sinω0nπn

이 필터의 임펄스 응답은 무한하고 비인과적이므로 이 필터를 구현할 수는 없습니다. 유한한 길이의 임펄스 응답을 생성하려면 윈도우를 적용하여 자르십시오. 잘린 부분에 임펄스 응답의 중앙 부분을 유지하면 선형 위상 FIR 필터를 얻을 수 있습니다. 예를 들어, 저역통과 차단 주파수 ω0이 0.4π rad/s이고 길이가 51인 필터는 다음과 같습니다.

b = 0.4*sinc(0.4*(-25:25));

여기에 적용된 윈도우는 단순한 사각 윈도우입니다. 파시발의 정리(Parseval’s theorem)에 따르면 이는 적분 최소제곱 측면에서 이상적인 저역통과 필터에 가장 근접한, 길이가 51인 필터입니다. 다음 명령은 FVTool에 필터의 주파수 응답을 표시합니다.

fvtool(b,1)

참고로, 아래 그림에 표시된 y축은 크기 제곱을 나타냅니다. 이는 축 레이블을 마우스 오른쪽 버튼으로 클릭하고 메뉴에서 크기 제곱을 선택하여 설정할 수 있습니다.

응답에서, 특히 대역 경계 주변에서 링잉 현상(Ringing Artifact)과 리플이 발생합니다. 이 “깁스 효과(Gibbs Effect)”는 필터 길이가 늘어나도 사라지지 않지만 사각이 아닌 윈도우의 크기는 감소합니다. 시간 영역에서 윈도우를 곱하면 주파수 영역에서 컨벌루션이나 평활화가 발생합니다. 길이가 51인 해밍 윈도우를 필터에 적용하고 FVTool을 사용하여 결과를 표시합니다.

b = 0.4*sinc(0.4*(-25:25));
b = b.*hamming(51)';
fvtool(b,1)

참고로, 아래 그림에 표시된 y축은 크기 제곱을 나타냅니다. 이는 축 레이블을 마우스 오른쪽 버튼으로 클릭하고 메뉴에서 크기 제곱을 선택하여 설정할 수 있습니다.

해밍 윈도우를 사용하면 링잉 현상이 크게 줄어듭니다. 그러나 이렇게 링잉 현상이 줄어드는 대신 천이 폭이 늘어나고(윈도우가 적용된 버전의 경우 통과대역에서 저지대역까지 증감하는 데 더 오래 걸림) 최적성이 감소합니다(윈도우가 적용된 버전의 경우 적분 제곱 오차가 최소화되지 않음).

표준 대역 FIR 필터 설계: fir1

fir1은 최소제곱 근사법을 사용하여 필터 계수를 계산한 후 window를 사용하여 임펄스 응답을 평탄화합니다. 윈도우 및 해당 속성에 대한 개요는 윈도우 항목을 참조하십시오. fir1은 저역통과, 대역통과, 고역통과, 대역저지의 표준 대역 구성에서 필터를 설계하도록 제작된 IIR 필터 설계 함수와 비슷합니다.

다음 명령문은

n = 50;
Wn = 0.4;
b = fir1(n,Wn);

차수가 n인 해밍 윈도우가 적용된 필터의 계수를 포함하는 행 벡터 b를 생성합니다. 이는 차단 주파수 Wn을 가지는 저역통과 선형 위상 FIR 필터입니다. Wn은 0에서 1 사이의 숫자입니다. 여기서 1은 샘플링 주파수의 절반인 나이퀴스트 주파수에 해당합니다. 다른 방법과 달리, 여기서 Wn은 6dB 지점에 해당합니다. 고역통과 필터의 경우, 함수의 파라미터 목록에 'high'를 추가하기만 하면 됩니다. 대역통과 필터나 대역저지 필터라면 통과대역 경계 주파수를 포함하는, 요소를 2개 가진 벡터로 Wn을 지정하십시오. 대역저지 구성의 경우에는 'stop'을 추가하십시오.

b = fir1(n,Wn,window)는 열 벡터 window에 지정된 윈도우를 설계에 사용합니다. 벡터 windown+1개 요소를 가져야 합니다. 윈도우를 지정하지 않을 경우 fir1은 해밍 윈도우를 적용합니다.

카이저 윈도우 차수 추정.  kaiserord 함수는 지정된 사양 세트를 충족하는 데 필요한 필터 차수, 차단 주파수, 카이저 윈도우 베타 파라미터를 추정합니다. 주파수 대역 경계 벡터와 이에 대응되는 크기 벡터, 그리고 허용 가능한 최대 리플이 주어진 경우, kaiserordfir1 함수에 대한 적절한 입력 파라미터를 반환합니다.

다중대역 FIR 필터 설계: fir2

fir2 함수도 윈도우가 적용된 FIR 필터를 설계하지만, 임의 형태의 조각별 선형 주파수 응답을 가지는 FIR 필터를 설계합니다. 이는 표준 저역통과, 고역통과, 대역통과, 대역저지 구성으로만 필터를 설계하는 fir1과는 대조적입니다.

다음 명령은

n = 50;
f = [0 .4 .5 1];
m = [1  1  0 0];
b = fir2(n,f,m);

주파수-크기 특성이 벡터 fm으로 지정된 특성과 일치하는, 차수가 n인 FIR 필터의 n+1개 계수를 포함하는 행 벡터 b를 반환합니다. f는 0부터 1까지의 범위에 속하는 주파수 점으로 구성된 벡터입니다(여기서 1은 나이퀴스트 주파수임). mf에 지정된 점에서 지정된 크기 응답을 포함하는 벡터입니다. 이 함수에 대응되는 IIR 함수는 yulewalk입니다. 이 IIR 함수도 임의 조각별 선형 크기 응답을 기반으로 하여 필터를 설계합니다. 자세한 내용은 IIR 필터 설계 항목을 참조하십시오.

천이 대역을 갖는 다중대역 FIR 필터 설계

firls 함수와 firpm 함수는 fir1 함수와 fir2 함수보다 지정된 이상적인 필터를 지정할 수 있는 더 일반적인 방법을 제공합니다. 이들 함수는 힐베르트 변환기, 미분기 및 기대칭 계수를 갖는 기타 필터(유형 III 및 유형 IV 선형 위상)를 설계합니다. 또한 이들 함수를 사용하면 천이 영역이나 “무관(Don't Care)” 영역(이 영역에서는 오차가 최소화되지 않음)을 포함시킬 수 있으며, 대역별로 최소화에 대한 가중치를 다르게 부여할 수도 있습니다.

firls 함수는 fir1 함수와 fir2 함수의 확장입니다. 이 함수는 지정된 주파수 응답과 실제 주파수 응답 사이의 오차 제곱에 대한 적분을 최소화합니다.

firpm 함수는 팍스-맥클렐란 알고리즘(Parks-McClellan Algorithm)을 구현합니다. 이 알고리즘은 레메즈 변환 알고리즘(Remez Exchange Algorithm)과 체비쇼프(Chebyshev) 근사 이론을 사용하여 지정된 주파수 응답과 실제 주파수 응답 사이에 최적으로 피팅되는 필터를 설계합니다. 이렇게 설계된 필터는 지정된 주파수 응답과 실제 주파수 응답 사이의 최대 오차를 최소화한다는 면에서 최적이라고 할 수 있습니다. 이런 필터를 최소최대(Minimax) 필터라고도 합니다. 이런한 방식으로 설계된 최적 필터는 주파수 응답에서 등리플 동작을 보입니다. 이에 따라 최적 필터는 등리플 필터인 것으로 알려져 있습니다. 팍스-맥클렐란 FIR 필터 설계 알고리즘은 아마도 가장 많이, 가장 널리 사용되는 FIR 필터 설계 방법론일 것입니다.

firls의 구문과 firpm 의 구문은 서로 동일합니다. 유일하게 다른 점은 최소화 방식입니다. 다음 예제에서는 firlsfirpm에 다양한 방식을 적용해 필터를 설계하는 방법을 보여줍니다.

기본 구성

firlsfirpm 연산의 기본 모드는 원하는 차수가 짝수인지 아니면 홀수인지에 따라 짝수면 유형 I 선형 위상 필터를, 홀수면 유형 II 선형 위상 필터를 설계하는 것입니다. 0Hz에서 0.4Hz까지는 근사 진폭이 1이고 0.5Hz에서 1.0Hz까지는 근사 진폭이 0인 저역통과 예제는 다음과 같습니다.

n = 20;                    % Filter order
f = [0 0.4 0.5 1];         % Frequency band edges
a = [1  1  0 0];           % Amplitudes
b = firpm(n,f,a);

0.4Hz ~ 0.5Hz 범위에서는 firpm이 오차 최소화를 수행하지 않습니다. 이것이 바로 천이 대역 또는 “무관” 영역입니다. 천이 대역은 관심 대역에서 더 많은 오차를 최소화합니다. 대신, 천이 속도는 느려집니다. 이런 식으로, 이 유형의 필터는 FIR 설계와 마찬가지로 윈도우 적용으로 인한 장단점을 내재하고 있습니다.

최소제곱을 등리플 필터 설계와 비교하려면 firls를 사용하여 유사한 필터를 생성하십시오. 다음을 입력하고

bb = firls(n,f,a);

FVTool을 사용하여 해당 주파수 응답을 비교합니다.

fvtool(b,1,bb,1)

참고로, 아래 그림에 표시된 y축은 크기 제곱을 나타냅니다. 이는 축 레이블을 마우스 오른쪽 버튼으로 클릭하고 메뉴에서 크기 제곱을 선택하여 설정할 수 있습니다.

firpm으로 설계된 필터는 등리플 동작을 보입니다. firls 필터는 대부분의 통과대역과 저지대역에서 더 나은 응답을 가집니다. 그러나 대역 경계(f = 0.4f = 0.5)에서는 firpm 필터에서보다 필터의 응답이 이상적인 응답과 더 크게 차이가 납니다. 이는 통과대역 및 저지대역에서 firpm 필터의 최대 오차가 더 작으며, 사실상 이 오차는 이 대역 경계 구성과 필터 길이에서 가능한 가장 작은 값임을 보여줍니다.

주파수 대역을 짧은 주파수 구간에 걸친 여러 선으로 생각해 보겠습니다. firpmfirls는 위 방식을 사용하여 임의의 천이 대역으로 조각별 선형 주파수-응답 함수를 나타냅니다. firlsfirpm은 저역통과 필터, 고역통과 필터, 대역통과 필터, 대역저지 필터를 설계합니다. 대역통과 필터에 대한 예제는 다음과 같습니다.

f = [0 0.3  0.4  0.7  0.8  1];   % Band edges in pairs
a = [0  0    1    1    0   0];   % Bandpass filter amplitude

이러한 f 벡터와 a 벡터는 다음과 같은 5개 대역을 정의합니다.

  • 저지대역 2개(범위: 0.0 ~ 0.3, 0.8 ~ 1.0)

  • 통과대역(범위: 0.4 ~ 0.7)

  • 천이 대역 2개(범위: 0.3 ~ 0.4, 0.7 ~ 0.8)

고역통과 필터와 대역저지 필터에 대한 예제는 다음과 같습니다.

f = [0 0.7  0.8  1];            % Band edges in pairs
a = [0  0    1   1];            % Highpass filter amplitude
f = [0 0.3  0.4  0.5  0.8  1];  % Band edges in pairs
a = [1  1    0    0    1   1];  % Bandstop filter amplitude

다중대역 대역통과 필터에 대한 예제는 다음과 같습니다.

f = [0 0.1 0.15 0.25 0.3 0.4 0.45 0.55 0.6 0.7 0.75 0.85 0.9 1];
a = [1  1   0    0    1   1   0    0    1   1   0    0    1  1];

또는 천이 영역으로서 통과대역과 저지대역을 연결하는 선을 가진 필터를 설계할 수도 있습니다. 이 필터는 넓은 천이 영역에서 “많이 벗어난(runaway)” 크기 응답을 제어하는 데 도움이 될 수 있습니다.

f = [0 0.4 0.42 0.48 0.5  1];
a = [1 1 0.8 0.2 0 0];   % Passband, linear transition, 
                         %  stopband

가중 벡터

firlsfirpm 모두 다른 주파수 대역에 비해 특정 주파수 대역의 오차를 최소화하는 데 더 많이 또는 더 적게 중점을 둘 수 있습니다. 이렇게 하려면 주파수 벡터와 진폭 벡터 다음에 가중 벡터를 지정하십시오. 통과대역보다 저지대역의 리플이 10배 더 작은 저역통과 등리플 필터에 대한 예제는 다음과 같습니다.

n = 20;              % Filter order
f = [0 0.4 0.5 1];   % Frequency band edges
a = [1  1   0  0];   % Amplitudes
w = [1 10];          % Weight vector
b = firpm(n,f,a,w);

올바른 가중 벡터는 항상 f 벡터와 a 벡터 길이의 절반입니다. 대역당 정확히 하나의 가중 벡터가 있어야 합니다.

반대칭 필터/힐베르트 변환기

후행 'h' 옵션 또는 'Hilbert' 옵션을 사용하여 호출된 경우, firpmfirls는 기대칭을 가지는 FIR 필터, 즉 유형 III(짝수 차수의 경우) 또는 유형 IV(홀수 차수의 경우) 선형 위상 필터를 설계합니다. 이상적인 힐베르트 변환기는 전체 주파수 범위에 걸쳐 진폭이 1이며 이러한 반대칭 속성을 가집니다. 다음과 같은 근사 힐베르트 변환기를 시도해 보고 FVTool을 사용하여 플로팅합니다.

b = firpm(21,[0.05 1],[1 1],'h');       % Highpass Hilbert
bb = firpm(20,[0.05 0.95],[1 1],'h');   % Bandpass Hilbert
fvtool(b,1,bb,1)

이러한 필터에 신호 x를 통과시켜 이 신호에 대한 지연된 힐베르트 변환을 구할 수 있습니다.

fs = 1000;            % Sampling frequency
t = (0:1/fs:2)';      % Two second time vector
x = sin(2*pi*300*t);  % 300 Hz sine wave example signal
xh = filter(bb,1,x);  % Hilbert transform of x

x에 대응되는 해석적 신호는 실수부로 x를 가지고 허수부로 x의 힐베르트 변환을 가지는 복소 신호입니다. 이 FIR 방법(hilbert 함수에 대한 대안)의 경우 x를 필터 차수의 절반 만큼 지연시켜 해석적 신호를 생성해야 합니다.

xd = [zeros(10,1); x(1:length(x)-10)];	    % Delay 10 samples
xa = xd + j*xh;                            % Analytic signal

이 방법은 차수가 홀수이고 지연값이 정수가 아닌 필터에는 바로 적용할 수 없습니다. 그 경우에는 힐베르트 변환에 설명되어 있는 hilbert 함수를 사용하여 해석적 신호를 추정해야 합니다. 또는, resample 함수를 사용하여 정수가 아닌 개수의 샘플 만큼 신호를 지연시키십시오.

미분기

시간 영역에서 신호를 미분하는 것은 신호의 푸리에 변환을 허수 램프 함수와 곱하는 것과 동일합니다. 즉, 신호를 미분하려면 응답 H(ω) = jω를 가지는 필터에 이 신호를 통과시켜야 합니다. 'd' 옵션이나 'differentiator' 옵션과 함께 firpm 또는 firls를 사용하여 지연을 갖는 이상적인 미분기를 근사합니다.

b = firpm(21,[0 1],[0 pi],'d');

유형 III 필터의 경우에는 미분 대역이 나이퀴스트 주파수 바로 전에서 중지되어야 하고 진폭 벡터는 이러한 변경 사항을 반영하여 올바른 기울기를 보장해야 합니다.

bb = firpm(20,[0 0.9],[0 0.9*pi],'d');

'd' 모드의 경우 firpm은 0이 아닌 진폭 대역에서 오차에 1/ω의 가중치를 적용하여 최대 상대 오차를 최소화합니다. firls'd' 모드의 경우 0이 아닌 진폭 대역에서 오차에 (1/ω)2의 가중치를 적용합니다.

다음 플롯은 위에 나와 있는 미분기의 크기 응답을 보여줍니다.

fvtool(b,1,bb,1)
legend('Odd order','Even order','Location','best')

제약된 최소제곱 FIR 필터 설계

제약된 최소제곱(CLS) FIR 필터 설계 함수는 크기 응답에 대한 천이 대역을 명시적으로 정의하지 않고 FIR 필터를 설계할 수 있는 기법을 구현합니다. 천이 대역의 사양을 생략할 수 있는 기능은 여러 가지 상황에 유용합니다. 예를 들어, 엄격히 정의된 천이 대역을 표시해야 하는데 잡음과 신호 정보가 동일한 주파수 대역에 모두 표시되는 경우 천이 대역이 명확하게 표시되지 않을 수 있습니다. 마찬가지로, 필터 응답에 나타나는 깁스 현상(Gibbs phenomena)의 결과를 제어하기 위한 용도로만 천이 대역이 표시되는 경우 천이 대역의 사양을 생략하는 것이 적절할 수 있습니다. 이 방법에 대한 자세한 내용은 셀레스닉(Selesnick), 랭(Lang), 부루스(Burrus) [2]를 참조하십시오.

통과대역, 저지대역, 천이 영역을 정의하는 대신, CLS 방법은 지정하는 응답에 대해 차단 주파수(고역통과, 저역통과, 대역통과 또는 대역저지의 경우) 또는 통과대역 경계 및 저지대역 경계(다중대역의 경우)를 받습니다. 이런 방법으로, CLS 방법은 천이 영역을 명시적이 아닌 암묵적으로 정의합니다.

CLS 방법의 주요 특징은 크기 응답에서 허용 가능한 최대 리플을 포함하는 상한 임계값과 하한 임계값을 정의할 수 있다는 점입니다. 이 제약 조건이 주어진 경우, 이 기법은 특정 대역이 아니라 필터 응답의 주파수 범위에 최소제곱 오차 최소화 기법을 적용합니다. 이 오차 최소화에서는 이상적인 "벽돌담(Brick Wall)" 응답에 포함된 불연속 영역을 모두 포함합니다. 추가적으로, 이 기법을 사용하면 깁스 현상으로 인해 나타나는 임의의 작은 피크를 지정할 수 있습니다.

이 설계 기법을 구현하는 툴박스 함수가 두 개 있습니다.

설명

함수

제약된 최소제곱 다중대역 FIR 필터 설계

fircls

저역통과 및 고역통과 선형 위상 필터용 제약된 최소제곱 필터 설계

fircls1

이러한 함수의 구문을 호출하는 방법에 대한 자세한 내용은 함수 도움말에서 해당 도움말 설명을 참조하십시오.

기본 저역통과 및 고역통과 CLS 필터 설계

CLS 설계 함수 중 가장 기본적인 함수인 fircls1은 이 기법을 사용하여 저역통과 및 고역통과 FIR 필터를 설계합니다. 이에 대한 예로, 임펄스 응답 차수 61과 0.3의 차단 주파수(정규화됨)를 갖는 필터를 설계한다고 가정해 보겠습니다. 이와 더불어, 다음과 같이 설계를 제한하는 상한과 하한을 정의합니다.

  • 1에서의 최대 통과대역 편차(통과대역 리플): 0.02.

  • 0에서의 최대 저지대역 편차(저지대역 리플): 0.008.

fircls1을 사용하여 이 설계 문제를 처리하려면 다음 명령을 사용하십시오.

n = 61;
wo = 0.3;
dp = 0.02;	
ds = 0.008;
h = fircls1(n,wo,dp,ds);
fvtool(h,1)

참고로, 아래 표시되어 있는 y축은 크기 제곱을 나타냅니다. 이는 축 레이블을 마우스 오른쪽 버튼으로 클릭하고 메뉴에서 크기 제곱을 선택하여 설정할 수 있습니다.

다중대역 CLS 필터 설계

fircls는 동일한 기법을 사용하여 지정된 조각별 일정한 크기 응답을 가지는 FIR 필터를 설계합니다. 이 경우, 대역 경계 벡터와 이에 대응되는 대역 진폭 벡터를 지정할 수 있습니다. 또한, 각 대역에 대해 최대 리플 크기를 지정할 수도 있습니다.

예를 들어, 다음에 대한 필터 호출 사양을 가정해 보겠습니다.

  • 0 ~ 0.3(정규화됨): 진폭 0, 상한 0.005, 하한 –0.005

  • 0.3 ~ 0.5: 진폭 0.5, 상한 0.51, 하한 0.49

  • 0.5 ~ 0.7: 진폭 0, 상한 0.03, 하한 –0.03

  • 0.7 ~ 0.9: 진폭 1, 상한 1.02, 하한 0.98

  • 0.9 ~ 1: 진폭 0, 상한 0.05, 하한 –0.05

이러한 사양을 충족하는, 임펄스 응답 차수 129를 갖는 CLS 필터를 설계합니다.

n = 129;
f = [0 0.3 0.5 0.7 0.9 1];
a = [0 0.5 0 1 0];
up = [0.005 0.51 0.03 1.02 0.05];
lo = [-0.005 0.49 -0.03 0.98 -0.05];
h = fircls(n,f,a,up,lo);
fvtool(h,1)

참고로, 아래 표시되어 있는 y축은 크기 제곱을 나타냅니다. 이는 축 레이블을 마우스 오른쪽 버튼으로 클릭하고 메뉴에서 크기 제곱을 선택하여 설정할 수 있습니다.

가중 CLS 필터 설계

가중 CLS 필터 설계를 통해 각 대역별로 오차 최소화에 상대적인 가중치가 적용된 저역통과 또는 고역통과 FIR 필터를 설계할 수 있습니다. fircls1 함수를 사용하면 최소제곱 가중치 함수에 대한 통과대역 경계와 저지대역 경계뿐만 아니라, 통과대역에 대한 저지대역 가중치 비를 지정하는 상수 k도 지정할 수 있습니다.

예를 들어, 55의 임펄스 응답 차수와 0.3의 차단 주파수(정규화됨)를 가진 FIR 필터를 호출하는 사양을 가정해 보겠습니다. 또한, 허용 가능한 최대 통과대역 리플이 0.02이고, 허용 가능한 최대 저지대역 리플이 0.004라고 가정하겠습니다. 이와 더불어, 다음과 같은 가중 요구 사항을 추가합니다.

  • 가중치 함수의 통과대역 경계: 0.28(정규화됨)

  • 가중치 함수의 저지대역 경계: 0.32

  • 저지대역에서 오차 최소화에 통과대역 대비 10배 가중치 적용

fircls1을 사용하여 이를 처리하려면 다음을 입력하십시오.

n = 55;
wo = 0.3;
dp = 0.02;
ds = 0.004;
wp = 0.28;
ws = 0.32;
k = 10;
h = fircls1(n,wo,dp,ds,wp,ws,k);
fvtool(h,1)

참고로, 아래 표시되어 있는 y축은 크기 제곱을 나타냅니다. 이는 축 레이블을 마우스 오른쪽 버튼으로 클릭하고 메뉴에서 크기 제곱을 선택하여 설정할 수 있습니다.

임의 응답 필터 설계

cfirpm 필터 설계 함수는 임의 복소 응답을 가진 FIR 필터를 설계하기 위한 툴을 제공합니다. 이 함수가 필터의 주파수 응답을 지정하는 방식은 다른 필터 설계 함수와 다릅니다. 이 함수는 주파수 그리드에서 계산된 필터 응답을 반환하는 함수 이름을 받습니다. 따라서 cfirpm은 필터 설계를 위한 고도로 유연하고 강력한 기법으로 사용됩니다.

이 설계 기법은 비선형 위상 FIR 필터, 비대칭 주파수-응답 필터(복소 계수를 가짐) 또는 사용자 지정 주파수 응답을 가지는 더욱 대칭적인 필터를 생성하는 데 사용할 수 있습니다.

설계 알고리즘은 초기 추정값에 대해 확장된 레메즈 변환 알고리즘(Remez Exchange Algorithm)을 사용하여 체비쇼프(또는 최소최대) 오차를 최적화합니다. 이 교환 방법이 최적의 필터를 구하지 못할 경우, 이 알고리즘은 상승-하강 알고리즘으로 전환됩니다. 그러면 그 알고리즘이 작업을 인계하여 최적해로의 수렴을 마무리합니다.

다중대역 필터 설계

다음과 같은 특수한 주파수 영역 특성을 가지는 다중대역 필터가 있다고 가정해 보겠습니다.

대역

진폭

최적화 가중치

[–1 –0.5]

[5 1]

1

[–0.4 +0.3]

[2 2]

10

[+0.4 +0.8]

[2 1]

5

선형 위상 다중대역 필터는 다음과 같이 미리 정의된 주파수-응답 함수 multiband를 사용하여 설계할 수 있습니다.

b = cfirpm(38, [-1 -0.5 -0.4 0.3 0.4 0.8], ...
               {'multiband', [5 1 2 2 2 1]}, [1 10 5]);

특별한 다중대역 필터의 경우 다음과 같이 firpm의 구문과 유사한 축약된 필터 설계 표기법을 사용할 수 있습니다.

b = cfirpm(38,[-1 -0.5 -0.4 0.3 0.4 0.8], ...
              [5 1 2 2 2 1], [1 10 5]);

firpm과 마찬가지로, 대역 경계 벡터가 cfirpm으로 전달됩니다. 이 벡터는 최적화가 수행되는 주파수 대역을 정의합니다. 참고로, 여기에서는 –0.5 ~ –0.4와 0.3 ~ 0.4가 천이 대역입니다.

어느 경우든, FVTool에서 선형 스케일을 사용하여 주파수 응답을 구하고 플로팅할 수 있습니다.

fvtool(b,1)

아래에 표시되어 있는 데이터 범위는 (-pi,pi)입니다.

이 다중대역 필터의 필터 응답은 복소수입니다. 주파수 영역의 비대칭으로 인해 이는 예상된 결과입니다. 아래에 임펄스 응답이 나와 있습니다. 임펄스 응답은 FVTool 도구 모음에서 선택할 수 있습니다.

감소된 지연을 사용한 필터 설계

차단 주파수가 나이퀴스트 주파수의 절반인 62탭의 저역통과 필터를 설계한다고 가정하겠습니다. lowpass 필터 설계 함수에 음의 오프셋 값을 지정하면 표준 선형 위상 설계에서 얻은 것보다 군지연 오프셋이 훨씬 더 작아집니다. 이 필터 설계는 다음과 같이 계산할 수 있습니다.

b = cfirpm(61,[0 0.5 0.55 1],{'lowpass',-16});

결과로 생성되는 크기 응답은 다음과 같습니다.

fvtool(b,1)

y축은 크기 제곱을 나타냅니다. 이는 축 레이블을 마우스 오른쪽 버튼으로 클릭하고 메뉴에서 크기 제곱을 선택하여 설정할 수 있습니다.

필터의 군지연은 오프셋이 N/2에서 N/2-16으로(즉, 30.5에서 14.5로) 감소되었음을 나타냅니다. 그러나 이제 군지연이 통과대역 영역에서 더 이상 평탄하지 않습니다. 아래 플롯을 생성하려면 도구 모음에서 군지연 응답 버튼을 클릭하십시오.

이 비선형 위상 필터를 정확히 14.5개 샘플의 군지연을 가진 선형 위상 필터와 비교한다면 그 필터의 차수는 2*14.5, 즉 29일 것입니다. b = cfirpm(29,[0 0.5 0.55 1],'lowpass')를 사용해 확인해 보면 통과대역 리플과 저지대역 리플이 차수 29 필터에서 훨씬 더 큽니다. 이 비교를 통해 특정 응용 사례에 더 적합한 필터가 무엇인지를 더욱 쉽게 결정할 수 있습니다.