Main Content

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

firpm

팍스-맥클렐란(Parks-McClellan) 최적 FIR 필터 설계

설명

b = firpm(n,f,a)n차 FIR 필터의 n+1개 계수를 포함하는 행 벡터 b를 반환합니다. 결과로 생성되는 필터의 주파수 및 진폭 특성은 벡터 fa로 지정된 특성과 일치합니다.

예제

b = firpm(n,f,a,w)w를 사용하여 주파수 Bin에 가중치를 적용합니다.

예제

b = firpm(n,f,a,ftype)'ftype'으로 지정된 필터 유형을 사용합니다.

b = firpm(n,f,a,lgrid)는 정수 lgrid를 사용하여 주파수 그리드의 밀도를 제어합니다.

[b,err] = firpm(___)err에 최대 리플 높이를 반환합니다. 이 구문은 위에 열거된 모든 입력 구문과 함께 사용할 수 있습니다.

[b,err,res] = firpm(___)은 주파수 응답 특성을 구조체 res로 반환합니다.

b = firpm(n,f,fresp,w)는 함수 핸들 fresp로 반환된 응답에 가장 가까운 주파수-진폭 특성을 가지는 FIR 필터를 반환합니다.

b = firpm(n,f,fresp,w,ftype)은 반대칭(홀수) 필터를 설계합니다. 여기서 ftype은 필터를 미분기 또는 힐베르트 변환기로 지정합니다. ftype을 지정하지 않으면 fresp에 대한 호출이 수행되어 디폴트 대칭 속성 을 결정합니다.

예제

모두 축소

팍스-맥클렐란 알고리즘을 사용하여 차수가 17인 FIR 대역통과 필터를 설계합니다. 정규화된 저지대역 주파수를 0.3π rad/sample과 0.7π rad/sample로 지정하고 정규화된 통과대역 주파수를 0.4π rad/sample과 0.6π rad/sample로 지정합니다. 이상적인 크기 응답과 실제 크기 응답을 플로팅합니다.

f = [0 0.3 0.4 0.6 0.7 1];
a = [0 0 1 1 0 0];
b = firpm(17,f,a);

[h,w] = freqz(b,1,512);
plot(f,a,w/pi,abs(h))
legend('Ideal','firpm Design')
xlabel 'Radian Frequency (\omega/\pi)', ylabel 'Magnitude'

통과대역 차단 주파수가 1500Hz고 저지대역 차단 주파수가 2000Hz인 저역통과 필터를 설계합니다. 샘플링 주파수를 8000Hz로 지정합니다. 최대 저지대역 진폭은 0.01이어야 하고 최대 통과대역 오차(리플)는 0.001이어야 한다고 지정합니다. firpmord를 사용하여 필요한 필터 차수, 정규화 주파수 대역 경계, 주파수 대역 진폭 및 가중치를 구합니다.

[n,fo,ao,w] = firpmord([1500 2000],[1 0],[0.001 0.01],8000);
b = firpm(n,fo,ao,w);
freqz(b,1,[],8000)

팍스-맥클렐란 알고리즘을 사용하여 1kHz로 샘플링된 신호에 사용할 50차 등리플 FIR 대역통과 필터를 생성합니다.

N = 50;
Fs = 1e3;

통과대역이 200Hz와 300Hz 사이의 주파수에 있고 통과대역 양쪽의 천이 영역이 50Hz의 폭을 갖도록 지정합니다.

Fstop1 = 150;
Fpass1 = 200;
Fpass2 = 300;
Fstop2 = 350;

최적화 피팅이 저주파수 저지대역에 가중치 3을 적용하고, 통과대역에는 가중치 1을 적용하고, 고주파수 저지대역에는 가중치 100을 적용하도록 필터를 설계합니다. 필터의 크기 응답을 표시합니다.

Wstop1 = 3;
Wpass = 1;
Wstop2 = 100;

b = firpm(N,[0 Fstop1 Fpass1 Fpass2 Fstop2 Fs/2]/(Fs/2), ...
    [0 0 1 1 0 0],[Wstop1 Wpass Wstop2]);

freqz(b,1)

입력 인수

모두 축소

필터 차수로, 양의 실수형 스칼라로 지정됩니다.

정규화 주파수 점으로, 실수 값 벡터로 지정됩니다. 인수는 범위 [0, 1] 내에 있어야 합니다. 여기서 1은 나이퀴스트 주파수에 해당합니다. 벡터의 요소 개수는 항상 2의 배수입니다. 주파수는 오름차순이어야 합니다.

f에 지정된 점에서 원하는 진폭으로, 벡터로 지정됩니다. fa는 길이가 동일해야 합니다. 길이는 짝수여야 합니다.

  • k가 홀수인 경우 점의 쌍 (f(k), f(k+1)) 간의 주파수에서 원하는 진폭은 점 (f(k), a(k))와 (f(k+1), a(k+1))을 연결하는 선분입니다.

  • k가 짝수인 경우 점의 쌍 (f(k), f(k+1)) 사이의 주파수에서 원하는 진폭은 지정되지 않습니다. 이러한 점 사이의 영역은 천이 영역이거나 특정 응용 사례에서 중요하지 않은 영역입니다.

각 주파수 대역의 피팅을 조정하는 데 사용되는 가중치로, 실수 값 벡터로 지정됩니다. w의 길이가 fa 길이의 절반이기 때문에 대역당 정확히 하나의 가중치가 있습니다.

기대칭을 갖는 선형 위상 필터의 필터 유형(유형 III 및 유형 IV)으로, 'hilbert' 또는 'differentiator'로 지정됩니다.

  • 'hilbert'b에 포함된 출력 계수는 관계 b(k) = –b(n + 2 – k), k = 1, ..., n + 1을 따릅니다. 이 필터 클래스는 힐베르트 변환기를 포함합니다. 힐베르트 변환기는 전체 대역에 걸쳐 원하는 진폭 1을 갖습니다.

    예를 들어, 다음 명령을 사용할 경우

    h = firpm(30,[0.1 0.9],[1 1],'hilbert');
    

    길이가 31인 근사 FIR 힐베르트 변환기가 설계됩니다.

  • 'differentiator' — 0이 아닌 진폭의 대역에 대해, 필터는 저주파수에서의 오차가 고주파수에서의 오차보다 훨씬 작도록 1/f의 인자로 오차에 가중치를 적용합니다. 주파수에 비례하는 진폭 특성을 갖는 FIR 미분기의 경우, 이러한 필터는 최대 상대 오차(원하는 진폭에 대한 오차 비율의 최댓값)를 최소화합니다.

대략 (lgrid*n)/(2*bw)개의 주파수 점을 갖는 주파수 그리드의 밀도를 제어합니다. 여기서 bwf가 포함하는 총 주파수 대역 구간 [0,1]의 분수 비율입니다. lgrid를 늘리면 등리플 필터와 더 정확히 일치하지만 계산에 시간이 더 소요되는 필터가 생성되는 경우가 많습니다. 디폴트 값 16lgrid에 지정되어야 하는 최솟값입니다.

주파수 응답으로, 함수 핸들로 지정됩니다. 이 함수는 다음 구문을 사용하여 firpm 내부에서 호출됩니다.

[dh,dw] = fresp(n,f,gf,w)

인수는 firpm의 인수와 유사합니다.

  • n은 필터 차수입니다.

  • f는 0과 1사이에서 단조적으로 나타나는 정규화 주파수 대역 경계로 구성된 벡터입니다. 여기서 1은 나이퀴스트 주파수입니다.

  • gffirpm으로 지정된 각 주파수 대역에 대해 선형으로 보간된 그리드 점으로 구성된 벡터입니다. gf는 응답 함수가 계산되어야 하는 주파수 그리드를 결정하고 opt 구조체의 fgrid 필드에 cfirpm에서 반환된 데이터와 동일한 데이터를 포함합니다.

  • w는 대역당 하나씩 있는 양의 실수형 가중치로 구성된 벡터이며, 최적화를 수행할 때 사용됩니다. wfirpm에 대한 호출에서 옵션이며, 지정하지 않을 경우 fresp로 전달되기 전에 단위 가중으로 설정됩니다.

  • dhdw는 각각 원하는 복소 주파수 응답 벡터와 대역 가중 벡터로, 그리드 gf의 각 주파수에서 계산됩니다.

출력 인수

모두 축소

필터 계수로, 길이가 n + 1인 행 벡터로 반환됩니다. 계수는 오름차순입니다.

최대 리플 높이로, 스칼라로 반환됩니다.

주파수 응답 특성으로, 구조체로 반환됩니다. 구조체 res에는 다음 필드가 들어 있습니다.

res.fgrid

필터 설계 최적화에 사용되는 주파수 그리드 벡터

res.des

res.fgrid의 각 점에 대해 원하는 주파수 응답

res.wt

opt.fgrid의 각 점에 대한 가중치

res.H

res.fgrid의 각 점에 대한 실제 주파수 응답

res.error

res.fgrid에 포함된 각 점의 오차(res.des-res.H)

res.iextr

극값 주파수의 경우 res.fgrid의 요소에 대한 인덱스 벡터

res.fextr

극값 주파수로 구성된 벡터

필터 설계가 수렴하지 않을 경우, 필터 설계가 올바르지 않은 것일 수 있습니다. 주파수 응답을 검사하여 설계를 확인하십시오.

필터 설계가 수렴하지 않고 결과로 생성되는 필터 설계가 올바르지 않을 경우에는 다음 방법을 시도하십시오.

  • 필터 차수를 늘립니다.

  • 저지대역의 감쇠량을 줄이거나 천이 영역을 넓히는 방식으로 필터 설계를 완화합니다.

알고리즘

firpm은 팍스-맥클렐란 알고리즘[2]을 사용하여 선형 위상 FIR 필터를 설계합니다. 팍스-맥클렐란 알고리즘은 레메즈 교환 알고리즘(Remez Exchange Algorithm)과 체비쇼프 근사 이론을 사용하여 원하는 주파수 응답과 실제 주파수 응답 사이에 최적 피팅을 갖는 필터를 설계합니다. 이 필터는 원하는 주파수 응답과 실제 주파수 응답 간의 최대 오차가 최소화된다는 측면에서 가장 적합합니다. 이렇게 설계된 필터는 해당 주파수 응답에서 등리플 동작을 보이므로 등리플 필터라고도 합니다. firpm은 이러한 등리플 특성으로 인해 해당 임펄스 응답의 머리와 꼬리에서 불연속성을 보입니다.

이러한 필터는 유형 I(n이 홀수)과 유형 II(n이 짝수) 선형 위상 필터입니다. 벡터 fa는 필터의 주파수-진폭 특성을 지정합니다.

  • f는 0에서 1 사이의 범위에 지정된 주파수 점의 쌍으로 구성된 벡터입니다. 여기서 1은 나이퀴스트 주파수에 해당됩니다. 주파수는 오름차순이어야 합니다.

  • af에 지정된 점에서 원하는 진폭을 포함하는 벡터입니다.

    k가 홀수인 경우 점의 쌍 (f(k), f(k+1)) 간의 주파수에서 원하는 진폭 함수는 점 (f(k), a(k))와 (f(k+1), a(k+1))을 연결하는 선분입니다.

    k가 짝수인 경우 점의 쌍 (f(k), f(k+1)) 사이의 주파수에서 원하는 진폭 함수는 지정되지 않습니다. 이러한 영역은 천이 영역 또는 "무관(Don’t Care)" 영역입니다.

  • fa는 길이가 같습니다. 이 길이는 짝수여야 합니다.

아래 그림은 원하는 진폭 응답을 정의할 때 f 벡터와 a 벡터 간의 관계를 보여줍니다.

firpm은 나이퀴스트 주파수에서 우대칭과 0이 아닌 통과대역을 갖는 구성에 대해 항상 짝수 필터 차수를 사용합니다. 짝수 필터 차수를 사용하는 이유는 임펄스 응답이 우대칭과 홀수 차수를 보이는 경우 나이퀴스트 주파수에서 주파수 응답이 반드시 0이 되기 때문입니다. 홀수 값을 가지는 n을 지정하는 경우 firpm은 이를 1씩 증가시킵니다.

firpm은 유형 I, II, III, IV 선형 위상 필터를 설계합니다. 유형 I과 유형 II는 각각 짝수 n과 홀수 n에 대한 디폴트 필터이고, 유형 III(n이 짝수인 경우)과 유형 IV(n이 홀수인 경우)는 ftype 인수를 사용하여 각각 'hilbert' 또는 'differentiator'로 지정됩니다. 필터는 유형에 따라 각기 다른 대칭성과 해당 주파수 응답에 대한 특정한 제약 조건을 가집니다. (자세한 내용은 [3] 항목을 참조하십시오.)

선형 위상 필터 유형필터 차수계수의 대칭성응답 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

나이퀴스트 주파수에서 0이 아닌 통과대역을 갖는 유형 II 필터를 생성하려고 하면 firpm이 필터 차수를 1씩 증가시킵니다.

유형 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

제한 사항 없음

firpm을 사용하여 원하는 주파수 응답을 정의하는 함수를 작성할 수도 있습니다. firpm에 대해 미리 정의된 주파수 응답 함수 핸들은 @firpmfrf입니다. 이는 선형 위상 FIR 필터를 설계합니다.

참고

b = firpm(n,f,a,w)b = firpm(n,f,{@firpmfrf,a},w)와 동일합니다. 여기서 @firpmfrffirpm에 대한 미리 정의된 주파수 응답 함수 핸들입니다. 원하는 경우, 자신만의 고유한 응답 함수를 작성할 수 있습니다. 자세한 내용을 보려면 help private/firpmfrf를 사용하여 함수 핸들 생성하기 항목을 참조하십시오.

참고 문헌

[1] Digital Signal Processing Committee of the IEEE Acoustics, Speech, and Signal Processing Society, eds. Selected Papers in Digital Signal Processing. Vol. II. New York: IEEE Press, 1976.

[2] Digital Signal Processing Committee of the IEEE Acoustics, Speech, and Signal Processing Society, eds. Programs for Digital Signal Processing. New York: IEEE Press, 1979, algorithm 5.1.

[3] Oppenheim, Alan V., Ronald W. Schafer, and John R. Buck. Discrete-Time Signal Processing. Upper Saddle River, NJ: Prentice Hall, 1999, p. 486.

[4] Parks, Thomas W., and C. Sidney Burrus. Digital Filter Design. New York: John Wiley & Sons, 1987, p. 83.

[5] Rabiner, Lawrence R., James H. McClellan, and Thomas W. Parks. "FIR Digital Filter Design Techniques Using Weighted Chebyshev Approximation." Proceedings of the IEEE®. Vol. 63, Number 4, 1975, pp. 595–610.

확장 기능

버전 내역

R2006a 이전에 개발됨