Main Content

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

fir1

윈도우 기반 FIR 필터 설계

설명

예제

b = fir1(n,Wn)은 해밍 윈도우를 사용하여 선형 위상을 갖는 n차 저역통과, 대역통과 또는 다중대역 FIR 필터를 설계합니다. 필터 유형은 Wn의 요소 개수에 따라 결정됩니다.

예제

b = fir1(n,Wn,ftype)ftype의 값과 Wn의 요소 개수에 따라 저역통과 필터, 고역통과 필터, 대역통과 필터, 대역저지 필터 또는 다중대역 필터를 설계합니다.

예제

b = fir1(___,window)window에 지정된 벡터와 위에 열거된 구문에 나와 있는 인수를 사용하여 필터를 설계합니다.

b = fir1(___,scaleopt)는 필터의 크기 응답이 정규화되는지 여부를 추가로 지정합니다.

참고: 임의 주파수 응답을 갖는 윈도우가 적용된 필터를 설계하려면 fir2를 사용하십시오.

예제

모두 축소

통과대역 0.35πω0.65π rad/sample을 갖는 48차 FIR 대역통과 필터를 설계합니다. 필터의 크기와 위상 응답을 시각화합니다.

b = fir1(48,[0.35 0.65]);
freqz(b,1,512)

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.

chirp.mat를 불러옵니다. 이 파일에는 전력의 대부분이 Fs/4, 즉 나이퀴스트 주파수의 절반보다 큰 영역에 존재하는 신호 y가 포함되어 있습니다. 샘플 레이트는 8192Hz입니다.

Fs/4 미만인 신호 성분을 감쇠하는 34차 FIR 고역통과 필터를 설계합니다. 차단 주파수는 0.48으로 하고 리플이 30dB인 체비쇼프 윈도우를 사용합니다.

load chirp

t = (0:length(y)-1)/Fs;

bhi = fir1(34,0.48,'high',chebwin(35,30));
freqz(bhi,1)

신호에 필터를 적용합니다. 원래 신호와 고역통과 필터가 적용된 신호를 표시합니다. 두 플롯 모두에 동일한 y축 스케일을 사용합니다.

outhi = filter(bhi,1,y);

subplot(2,1,1)
plot(t,y)
title('Original Signal')
ys = ylim;

subplot(2,1,2)
plot(t,outhi)
title('Highpass Filtered Signal')
xlabel('Time (s)')
ylim(ys)

동일한 사양을 갖는 저역통과 필터를 설계합니다. 신호에 필터를 적용하고 그 결과를 원래 신호와 비교합니다. 두 플롯 모두에 동일한 y축 스케일을 사용합니다.

blo = fir1(34,0.48,chebwin(35,30));

outlo = filter(blo,1,y);

subplot(2,1,1)
plot(t,y)
title('Original Signal')
ys = ylim;

subplot(2,1,2)
plot(t,outlo)
title('Lowpass Filtered Signal')
xlabel('Time (s)')
ylim(ys)

0.4π rad/sample 미만 및 0.6π rad/sample과 0.9π rad/sample 사이의 정규화 주파수를 감쇠하는 46차 FIR 필터를 설계합니다. 이를 bM이라고 명명합니다. 필터의 주파수 응답을 계산합니다.

ord = 46;

low = 0.4;
bnd = [0.6 0.9];

bM = fir1(ord,[low bnd]);
[hbM,f] = freqz(bM,1);

이전에 감쇠하던 대역을 통과시키고 나머지 주파수를 저지하도록 bM을 다시 설계합니다. 이 새로운 필터를 bW로 명명합니다. 필터의 주파수 응답을 표시합니다.

bW = fir1(ord,[low bnd],"DC-1");

[hbW,~] = freqz(bW,1);
plot(f/pi,mag2db(abs(hbM)),f/pi,mag2db(abs(hbW)))
legend("bM","bW",Location="best")
ylim([-75 5])
grid

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent bM, bW.

핸 윈도우를 사용하여 bM을 다시 설계합니다. ("DC-0"은 선택 사항입니다.) 해밍 설계와 핸 설계의 크기 응답을 비교합니다.

hM = fir1(ord,[low bnd],'DC-0',hann(ord+1));

hhM = freqz(hM,1);
plot(f/pi,mag2db(abs(hbM)),f/pi,mag2db(abs(hhM)))
legend("Hamming","Hann",Location="northwest")
ylim([-75 5])
grid

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent Hamming, Hann.

튜키 윈도우를 사용하여 bW를 다시 설계합니다. 해밍 설계와 튜키 설계의 크기 응답을 비교합니다.

tW = fir1(ord,[low bnd],'DC-1',tukeywin(ord+1));

htW = freqz(tW,1);
plot(f/pi,mag2db(abs(hbW)),f/pi,mag2db(abs(htW)))
legend("Hamming","Tukey",Location="best")
ylim([-75 5])
grid

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent Hamming, Tukey.

입력 인수

모두 축소

필터 차수로, 정수 스칼라로 지정됩니다.

고역통과 구성과 대역저지 구성의 경우, fir1이 항상 짝수 필터 차수를 사용합니다. 홀수 차수 대칭 FIR 필터는 나이퀴스트 주파수에서 영이득(Zero Gain)을 가져야 하므로 차수는 짝수여야 합니다. 고역통과 필터나 대역저지 필터에 홀수 n을 지정하는 경우 fir1n을 1씩 증가시킵니다.

데이터형: double

주파수 제약 조건으로, 스칼라, 요소를 2개 가진 벡터 또는 요소를 여러 개 가진 벡터로 지정됩니다. Wn의 모든 요소는 0보다 크고 1보다 작아야 합니다. 여기서 1은 나이퀴스트 주파수에 해당합니다. 즉, 0 < Wn < 1이어야 합니다. 나이퀴스트 주파수는 샘플 레이트의 절반, 즉 π rad/sample입니다.

  • Wn이 스칼라이면 fir1은 차단 주파수 Wn을 갖는 저역통과 필터나 고역통과 필터를 설계합니다. 차단 주파수는 필터의 정규화된 이득이 –6dB인 주파수입니다.

  • Wn이 요소를 2개 가진 벡터 [w1 w2](여기서 w1 < w2)이면 fir1은 하한 경계 주파수 w1과 상한 경계 주파수 w2를 갖는 대역통과 필터나 대역저지 필터를 설계합니다.

  • Wnw1<w2 < … < wn을 충족하는 요소를 여러 개 가진 벡터 [w1 w2 ... wn]이면 fir1은 대역이 0 < ω < w1, w1 < ω < w2, …, wn < ω < 1인 n차 다중대역 필터를 반환합니다.

데이터형: double

필터 유형으로, 다음 중 하나로 지정됩니다.

  • 'low'는 차단 주파수 Wn을 갖는 저역통과 필터를 지정합니다. 'low'는 스칼라 Wn의 디폴트 값입니다.

  • 'high'는 차단 주파수 Wn을 갖는 고역통과 필터를 지정합니다.

  • 'bandpass'Wn이 요소를 2개 가진 벡터인 경우 대역통과 필터를 지정합니다. 'bandpass'Wn이 두 개의 요소를 갖는 경우 디폴트 값입니다.

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

  • 'DC-0'은 다중대역 필터의 첫 번째 대역이 저지대역임을 지정합니다. 'DC-0'Wn이 3개 이상의 요소를 갖는 경우 디폴트 값입니다.

  • 'DC-1'은 다중대역 필터의 첫 번째 대역이 통과대역임을 지정합니다.

윈도우로, 벡터로 지정됩니다. 윈도우 벡터는 n + 1개 요소를 가져야 합니다. window를 지정하지 않으면 fir1은 해밍 윈도우를 사용합니다. 사용 가능한 윈도우 목록은 윈도우 항목을 참조하십시오.

홀수 차수의 고역통과 필터 또는 대역저지 필터를 설계하려고 하면 fir1window의 길이를 자동으로 늘리지 않습니다.

예: kaiser(n+1,0.5)는 차수가 n인 필터에 사용할 형태 파라미터 값이 0.5인 카이저 윈도우를 지정합니다.

예: hamming(n+1)은 윈도우를 지정하지 않은 상태와 동일합니다.

데이터형: double

정규화 옵션으로, 'scale'이나 'noscale'로 지정됩니다.

  • 'scale'은 통과대역의 중앙에서 필터의 크기 응답이 1(0dB)이 되도록 계수를 정규화합니다.

  • 'noscale'은 계수를 정규화하지 않습니다.

출력 인수

모두 축소

필터 계수로, 길이가 n + 1인 행 벡터로 반환됩니다. 계수는 다음과 같이 Z 변환 변수 z의 거듭제곱 내림차순으로 정렬됩니다.

B(z) = b(1) + b(2)z + … + b(n+1)z–n.

알고리즘

fir1은 최소제곱 근사법을 사용하여 필터 계수를 계산한 후 window를 사용하여 임펄스 응답을 평탄화합니다.

참고 문헌

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

확장 기능

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

버전 내역

R2006a 이전에 개발됨