Main Content

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

fir2

주파수 샘플링을 기반으로 한 FIR 필터 설계

설명

예제

b = fir2(n,f,m)은 벡터 fm에 지정된 주파수-크기 특성을 갖는 n차 FIR 필터를 반환합니다. 이 함수는 원하는 주파수 응답을 조밀한 그리드로 선형 보간한 후 푸리에 역변환과 해밍 윈도우를 사용하여 필터 계수를 구합니다.

예제

b = fir2(n,f,m,npt,lap)은 보간 그리드에 포함된 점의 개수를 나타내는 npt와, 주파수 응답에서 계단을 지정하는 중복된 주파수 점 주위에 fir2가 삽입할 영역의 길이 lap을 지정합니다.

예제

b = fir2(___,window)는 위에 열거된 구문의 입력 인수와 함께, 설계에 사용할 윈도우 벡터를 지정합니다.

참고: 윈도우 기반 표준 저역통과, 대역통과, 고역통과, 대역저지, 다중대역 구성에는 fir1을 사용하십시오.

예제

모두 축소

MAT 파일 chirp를 불러옵니다. 이 파일은 주파수 Fs = 8192Hz로 샘플링된 신호 y를 포함합니다. 신호의 대부분의 전력은 Fs/4 = 2048Hz, 즉 나이퀴스트 주파수의 절반보다 높은 영역에 존재합니다. 랜덤 잡음을 신호에 추가합니다.

load chirp
y = y + randn(size(y))/25;
t = (0:length(y)-1)/Fs;

Fs/4 미만인 신호 성분을 감쇠하는 34차 FIR 고역통과 필터를 설계합니다. 정규화된 차단 주파수를 0.48로 지정합니다. 이는 약 1966Hz에 대응됩니다. 필터의 주파수 응답을 시각화합니다.

f = [0 0.48 0.48 1];
mhi = [0 0 1 1];
bhi = fir2(34,f,mhi);

freqz(bhi,1,[],Fs)

Figure contains 2 axes objects. Axes object 1 with title Phase, xlabel Frequency (Hz), ylabel Phase (degrees) contains an object of type line. Axes object 2 with title Magnitude, xlabel Frequency (Hz), ylabel Magnitude (dB) contains an object of type line.

처프 신호에 필터를 적용합니다. 필터를 적용하기 전과 후의 신호를 플로팅합니다.

outhi = filter(bhi,1,y);

figure
subplot(2,1,1)
plot(t,y)
title('Original Signal')
ylim([-1.2 1.2])

subplot(2,1,2)
plot(t,outhi)
title('Highpass Filtered Signal')
xlabel('Time (s)')
ylim([-1.2 1.2])

Figure contains 2 axes objects. Axes object 1 with title Original Signal contains an object of type line. Axes object 2 with title Highpass Filtered Signal, xlabel Time (s) contains an object of type line.

필터를 고역통과 필터에서 저역통과 필터로 변경합니다. 동일한 차수와 차단 주파수를 사용합니다. 신호에 필터를 다시 적용합니다. 결과는 대부분 잡음입니다.

mlo = [1 1 0 0];
blo = fir2(34,f,mlo);
outlo = filter(blo,1,y);

subplot(2,1,1)
plot(t,y)
title('Original Signal')
ylim([-1.2 1.2])

subplot(2,1,2)
plot(t,outlo)
title('Lowpass Filtered Signal')
xlabel('Time (s)')
ylim([-1.2 1.2])

Figure contains 2 axes objects. Axes object 1 with title Original Signal contains an object of type line. Axes object 2 with title Lowpass Filtered Signal, xlabel Time (s) contains an object of type line.

0.6π rad/sample의 정규화된 차단 주파수를 갖는 30차 저역통과 필터를 설계합니다. 이상적인 주파수 응답을 실제 주파수 응답에 겹쳐서 플로팅합니다.

f = [0 0.6 0.6 1];
m = [1 1 0 0];

b1 = fir2(30,f,m);
[h1,w] = freqz(b1,1);

plot(f,m,w/pi,abs(h1))
xlabel('\omega / \pi')
lgs = {'Ideal','fir2 default'};
legend(lgs)

Figure contains an axes object. The axes object with xlabel omega blank / blank pi contains 2 objects of type line. These objects represent Ideal, fir2 default.

64개 점으로 구성된 보간 그리드를 사용하여 필터를 다시 설계합니다.

b2 = fir2(30,f,m,64);
h2 = freqz(b2,1);

hold on
plot(w/pi,abs(h2))
lgs{3} = 'npt = 64';
legend(lgs)

Figure contains an axes object. The axes object with xlabel omega blank / blank pi contains 3 objects of type line. These objects represent Ideal, fir2 default, npt = 64.

64개 점으로 구성된 보간 그리드를 사용하고 차단 주파수 주위에 13개 점으로 구성된 간격을 주어 필터를 다시 설계합니다.

b3 = fir2(30,f,m,64,13);
h3 = freqz(b3,1);

plot(w/pi,abs(h3))
lgs{4} = 'lap = 13';
legend(lgs)

Figure contains an axes object. The axes object with xlabel omega blank / blank pi contains 4 objects of type line. These objects represent Ideal, fir2 default, npt = 64, lap = 13.

다음 주파수 응답을 갖는 FIR 필터를 설계합니다.

  • 0과 0.18π rad/sample 사이의 정현파.

F1 = 0:0.01:0.18;
A1 = 0.5+sin(2*pi*7.5*F1)/4;
  • 0.2π rad/sample과 0.78π rad/sample 사이의 조각별 선형 섹션.

F2 = [0.2 0.38 0.4 0.55 0.562 0.585 0.6 0.78];
A2 = [0.5 2.3 1 1 -0.2 -0.2 1 1];
  • 0.79π rad/sample과 나이퀴스트 주파수 사이의 2차 섹션.

F3 = 0.79:0.01:1;
A3 = 0.2+18*(1-F3).^2;

해밍 윈도우를 사용하여 필터를 설계합니다. 필터 차수를 50으로 지정합니다.

N = 50;

FreqVect = [F1 F2 F3];
AmplVect = [A1 A2 A3];

ham = fir2(N,FreqVect,AmplVect);

형태 파라미터 값을 3으로 하는 카이저 윈도우를 사용하여 계산을 반복합니다.

kai = fir2(N,FreqVect,AmplVect,kaiser(N+1,3));

designfilt 함수를 사용하여 필터를 다시 설계합니다. designfilt는 기본적으로 사각 윈도우를 사용합니다. 1024개 점에 대해 필터의 영위상 응답을 계산합니다.

d = designfilt('arbmagfir','FilterOrder',N, ...
    'Frequencies',FreqVect,'Amplitudes',AmplVect);

[zd,wd] = zerophase(d,1024);

세 개 필터의 영위상 응답을 표시합니다. 이상적인 응답을 겹쳐 놓습니다.

zerophase(ham,1)
hold on
zerophase(kai,1)
plot(wd/pi,zd)
plot(FreqVect,AmplVect,'k:')
legend('Hamming','Kaiser','designfilt','ideal')

Figure contains an axes object. The axes object with title Zero-Phase Response, xlabel Normalized Frequency ( times blank pi blank rad/sample), ylabel Amplitude contains 4 objects of type line. These objects represent Hamming, Kaiser, designfilt, ideal.

입력 인수

모두 축소

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

나이퀴스트 주파수에서 통과대역을 갖는 구성의 경우, fir2는 항상 짝수 차수를 사용합니다. 이러한 구성 중 하나에 대해 홀수 값을 가지는 n을 지정하는 경우 fir2n을 1씩 증가시킵니다.

데이터형: double

주파수-크기 특성으로, 동일한 길이의 벡터로 지정됩니다.

  • f는 0에서 1 사이의 범위에 속하는 주파수 점으로 구성된 벡터이며, 여기서 1은 나이퀴스트 주파수에 해당합니다. f의 첫 번째 점은 0이어야 하고 마지막 점은 1이어야 합니다. f는 오름차순으로 정렬되어야 합니다. 중복된 주파수 점이 허용되며, 이는 주파수 응답에서 계단으로 처리됩니다.

  • mf에 지정된 각 점에서 원하는 크기 응답을 포함하는 벡터입니다.

데이터형: double

그리드 점의 개수로, 양의 정수 스칼라로 지정됩니다. npt는 필터 차수의 절반보다 커야 합니다. 즉, npt > n/2이어야 합니다.

데이터형: double

중복된 주파수 점 주위 영역의 길이로, 양의 정수 스칼라로 지정됩니다.

데이터형: double

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

나이퀴스트 주파수에서 통과대역을 갖는 홀수 차수의 필터를 설계하려고 하면 fir2window의 길이를 자동으로 늘리지 않습니다.

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

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

데이터형: double

출력 인수

모두 축소

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

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

알고리즘

fir2는 주파수 샘플링을 사용하여 필터를 설계합니다. 이 함수는 길이가 npt인 균일한 간격의 조밀한 그리드로 원하는 주파수 응답을 선형 보간합니다. fir2는 또한 f의 값이 반복되는 주위에 lap개 점으로 구성된 영역을 설정함으로써 가파르지만 매끄러운 천이 영역도 제공합니다. 이 함수는 필터 계수를 구하기 위해 고속 푸리에 역변환을 그리드에 적용하고 window를 곱합니다.

참고 문헌

[1] Jackson, L. B. Digital Filters and Signal Processing. 3rd Ed. Boston: Kluwer Academic Publishers, 1996.

[2] Mitra, Sanjit K. Digital Signal Processing: A Computer Based Approach. New York: McGraw-Hill, 1998.

확장 기능

버전 내역

R2006a 이전에 개발됨