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

kaiserord

카이저 윈도우 FIR 필터 설계 추정 파라미터

설명

[n,Wn,beta,ftype] = kaiserord(f,a,dev)fir1 함수와 함께 사용할 카이저 윈도우를 지정하는 필터 차수 n, 정규화 주파수 대역 경계 Wn, 형태 인자 beta를 반환합니다. f, a, dev로 지정된 사양을 근사하는 FIR 필터 b를 설계하려면 b = fir1(n,Wn,kaiser(n+1,beta),ftype,'noscale')을 사용하십시오.

예제

[n,Wn,beta,ftype] = kaiserord(f,a,dev,fs)는 샘플 레이트 fs(단위: Hz)를 사용합니다.

예제

c = kaiserord(f,a,dev,fs,'cell')fir1에 대한 파라미터를 요소로 갖는 셀형 배열을 반환합니다.

예제

모두 축소

0kHz부터 1kHz까지 정의된 통과대역과 1500Hz부터 4kHz까지 정의된 저지대역을 갖는 저역통과 필터를 설계합니다. 통과대역 리플을 5%로 지정하고 저지대역 감쇠량을 40dB로 지정합니다.

fsamp = 8000;
fcuts = [1000 1500];
mags = [1 0];
devs = [0.05 0.01];

[n,Wn,beta,ftype] = kaiserord(fcuts,mags,devs,fsamp);
hh = fir1(n,Wn,ftype,kaiser(n+1,beta),'noscale');

freqz(hh,1,1024,fsamp)

홀수 길이의 대역통과 필터를 설계합니다. 참고로, 홀수 길이는 짝수 차수를 의미합니다. 따라서 fir1에 대한 입력값은 짝수여야 합니다.

fsamp = 8000;
fcuts = [1000 1300 2210 2410];
mags = [0 1 0];
devs = [0.01 0.05 0.01];

[n,Wn,beta,ftype] = kaiserord(fcuts,mags,devs,fsamp);
n = n + rem(n,2);
hh = fir1(n,Wn,ftype,kaiser(n+1,beta),'noscale');

[H,f] = freqz(hh,1,1024,fsamp);
plot(f,abs(H))
grid

통과대역 차단 주파수가 1500Hz이고 저지대역 차단 주파수가 2000Hz이며 통과대역 리플이 0.01, 저지대역 리플이 0.1, 샘플 레이트가 8000Hz인 저역통과 필터를 설계합니다. 'cell' 옵션을 사용하여 동일한 필터를 설계합니다.

fs = 8000;
[n,Wn,beta,ftype] = kaiserord([1500 2000],[1 0],...
    [0.01 0.1],fs);
b = fir1(n,Wn,ftype,kaiser(n+1,beta),'noscale');

c = kaiserord([1500 2000],[1 0],[0.01 0.1],fs,'cell');
bcell = fir1(c{:});

hfvt = fvtool(b,1,bcell,1,'Fs',fs);
legend(hfvt,'b','bcell')

입력 인수

모두 축소

대역 경계로, 벡터로 지정됩니다. f의 길이는 2*length(a)-2 길이의 두 배입니다.

대역 진폭으로, 벡터로 지정됩니다. 진폭은 f로 정의된 대역에 대해 지정됩니다. fa는 조각별 상수 응답 함수를 정의합니다.

허용 가능한 최대 편차로, 벡터로 지정됩니다. dev는 각 대역에 대해 출력 필터의 주파수 응답과 이에 대한 대역 진폭 사이의 허용 가능한 최대 편차를 지정하는, a와 크기가 동일한 벡터입니다. dev의 요소는 통과대역 리플과 저지대역 감쇠량을 지정합니다. dev의 각 요소는 양수로 지정해야 합니다. 이는 절대 필터 이득(단위 없음)을 나타냅니다.

샘플 레이트로, 양의 스칼라로 지정됩니다(단위: Hz). 인수 fs를 지정하지 않거나 이 인수를 빈 벡터 []로 지정하는 경우 샘플 레이트는 2Hz가 디폴트 값으로 설정되며, 나이퀴스트 주파수는 1Hz입니다. 이 구문을 사용하여 특정 응용 사례의 샘플 레이트로 스케일링된 대역 경계를 지정할 수 있습니다. f의 주파수 대역 경계는 0부터 fs/2까지여야 합니다.

출력 인수

모두 축소

필터 차수로, 양의 정수로 반환됩니다.

정규화 주파수 대역 경계로, 실수형 벡터로 반환됩니다.

형태 인자로, 양의 실수형 스칼라로 반환됩니다. 파라미터 beta는 윈도우의 푸리에 변환에 대한 사이드로브 감쇠량에 영향을 미칩니다.

fir1에 사용할 필터 유형으로, 다음으로 반환됩니다.

  • 'low' — 차단 주파수 Wn을 갖는 저역통과 필터.

  • 'high' — 차단 주파수 Wn을 갖는 고역통과 필터.

  • 'bandpass'Wn이 요소를 2개 가진 벡터인 경우 대역통과 필터.

  • 'stop'Wn이 요소를 2개 가진 벡터인 경우 대역저지 필터.

  • 'DC-0' — 다중대역 필터의 첫 번째 대역이 저지대역입니다.

  • 'DC-1' — 다중대역 필터의 첫 번째 대역이 통과대역입니다.

FIR 파라미터로, 셀형 배열로 반환됩니다.

  • 필터 길이와 필터 차수의 의미를 주의하여 구분하십시오. 필터 길이는 FIR 필터의 임펄스 응답 샘플 개수입니다. 일반적으로, 임펄스 응답은 n = 0부터 n = L–1까지 인덱싱됩니다. 여기서 L은 필터 길이입니다. 필터 차수는 필터의 Z 변환 표현에서 최고차항의 지수입니다. FIR 전달 함수의 경우, 이 표현은 z에 관한 다항식입니다. 여기서 최고차항은 zLL–1이고, 최저차항은 z0입니다. 필터 차수는 필터의 길이보다 하나가 작으며(L–1) z 다항식의 영점 개수와 동일합니다.

  • 벡터 dev에 대역 간 동일하지 않은 편차를 지정하면 지정된 편차 중 가장 작은 편차가 사용됩니다. 그 이유는 카이저 윈도우 방법이 모든 대역에서 최소 편차를 사용하여 필터를 생성하도록 제한되기 때문입니다.

  • 경우에 따라, kaiserord는 차수 n을 작게 또는 높게 추정합니다. 필터가 사양을 충족하지 않는 경우 n+1, n+2 등과 같이 더 높은 차수를 사용해 보거나 더 낮은 차수를 사용해 보십시오.

  • 차단 주파수가 0 또는 나이퀴스트 주파수에 가깝거나 dev가 큰 경우(10%보다 큼) 결과가 부정확합니다.

알고리즘

주파수 영역에서 주어진 사양을 이용하여 kaiserord는 사양을 근사하는 최소 FIR 필터 차수를 추정합니다. kaiserord는 주어진 필터 사양을 통과대역 리플과 저지대역 리플로 변환하고 차단 주파수를 윈도우가 적용된 FIR 필터 설계에 필요한 형식으로 변환합니다.

kaiserord는 저역통과 필터와 미분기, 그리고 힐베르트 변환기의 차수를 추정하는 데 경험적으로 도출된 공식을 사용합니다. 다중대역 필터(예: 대역통과 필터)에 대한 추정값은 저역통과 설계 공식에서 도출됩니다.

카이저 윈도우와 이를 FIR 필터 설계에 응용하는 기반이 되는 설계 공식은 다음과 같습니다.

β={0.1102(α8.7),α>500.5842(α21)0.4+0.07886(α21),21α500,α<21

여기서 α = –20log10δ는 저지대역 감쇠량(단위: 데시벨)입니다.

n=α7.952.285(Δω)

여기서 n은 필터 차수이고 Δω는 가장 작은 천이 영역의 폭입니다.

참고 문헌

[1] Kaiser, James F. “Nonrecursive Digital Filter Design Using the I0-sinh Window Function.” Proceedings of the 1974 IEEE International Symposium on Circuits and Systems. 1974, pp. 20–23.

[2] 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.

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

확장 기능

C/C++ 코드 생성
MATLAB® Coder™를 사용하여 C 코드나 C++ 코드를 생성할 수 있습니다.

참고 항목

| |

R2006a 이전에 개발됨