Main Content

주파수 응답

디지털 영역

freqz는 FFT 기반 알고리즘을 사용하여 디지털 필터의 Z 변환 주파수 응답을 계산합니다. 특히, 다음 명령문은

[h,w] = freqz(b,a,p)

디지털 필터의 p개 점을 가진 복소 주파수 응답 H(e)를 반환합니다.

H(ejω)=b(1)+b(2)ejω+...+b(n+1)ejωna(1)+a(2)ejω+...+a(m+1)ejωm

가장 간단한 구문의 경우 freqz는 필터 계수 벡터 ba, 주파수 응답을 계산할 점의 개수를 지정하는 정수 p를 받습니다. freqz는 벡터 h에 복소 주파수 응답을 반환하고 벡터 w에 실제 주파수 점(단위: rad/s)을 반환합니다.

freqz는 샘플링 주파수 또는 임의 주파수 점으로 구성된 벡터와 같은 다른 파라미터를 받을 수 있습니다. 아래 예제에서는 12차 체비쇼프 유형 I 필터에 대해 256개 점을 가진 주파수 응답을 구합니다. 샘플링 주파수 fs는 1000Hz로 지정하여 freqz를 호출합니다.

[b,a] = cheby1(12,0.5,200/500);
[h,f] = freqz(b,a,256,1000);

파라미터 목록에 샘플링 주파수가 포함되어 있으므로 freqz는 0과 fs/2 사이에서 256개 주파수 점을 주파수 응답으로서 계산하여 벡터 f에 반환합니다.

참고

이 툴박스에 나오는 단위 주파수는 기본적으로 나이퀴스트 주파수입니다. 나이퀴스트 주파수는 샘플링 주파수의 절반으로 정의됩니다. 모든 기본 필터 설계 함수에 대한 차단 주파수 파라미터는 나이퀴스트 주파수에 의해 정규화됩니다. 예를 들어, 1000Hz의샘플링 주파수를 가진 시스템의 경우 300Hz는 300/500 = 0.6입니다. 정규화 주파수를 단위원 원주상의 각주파수로 변환하려면 π을 곱하십시오. 정규화 주파수를 헤르츠로 다시 변환하려면 샘플 주파수의 절반을 곱하십시오.

출력 인수 없이 freqz를 호출하면 주파수의 크기와 주파수의 위상이 플로팅됩니다. 예를 들어, 2000Hz의 샘플링 주파수를 가진 시스템의 경우 400Hz의 차단 주파수를 갖는 9차 버터워스 저역통과 필터는 다음과 같습니다.

[b,a] = butter(9,400/1000);

freqz를 사용하여 이 필터에 대한 256개 점을 가진 복소 주파수 응답을 계산하고 크기와 위상을 플로팅하려면 다음을 입력하십시오.

freqz(b,a,256,2000)

freqz는 또한 주파수 응답 계산에 사용하기 위해 임의의 주파수 점으로 구성된 벡터를 받을 수도 있습니다. 예를 들면 다음과 같습니다.

w = linspace(0,pi);
h = freqz(b,a,w);

벡터 ba로 정의된 필터에 대해 w에 있는 주파수 점에서 복소 주파수 응답을 계산합니다. 주파수 점의 범위는 0에서 2π 사이일 수 있습니다. 범위가 0에서 샘플링 주파수 사이인 주파수 벡터를 지정하려면 주파수 벡터와 샘플링 주파수 값을 모두 파라미터 목록에 포함시키십시오.

이 예제에서는 디지털 주파수 응답을 계산하고 표시하는 방법을 보여줍니다.

전달 함수의 주파수 응답

다음 전달 함수로 표현되는 3차 IIR 저역통과 필터의 크기 응답을 계산하고 표시합니다.

H(z)=0.05634(1+z-1)(1-1.0166z-1+z-2)(1-0.683z-1)(1-1.4461z-1+0.7957z-2).

다항식 컨벌루션으로 분자와 분모를 표현합니다. 전체 단위원에 걸쳐 있는 2001개 점에서 주파수 응답을 구합니다.

b0 = 0.05634;
b1 = [1  1];
b2 = [1 -1.0166 1];
a1 = [1 -0.683];
a2 = [1 -1.4461 0.7957];

b = b0*conv(b1,b2);
a = conv(a1,a2);

[h,w] = freqz(b,a,'whole',2001);

데시벨을 단위로 하는 크기 응답을 플로팅합니다.

plot(w/pi,20*log10(abs(h)))
ax = gca;
ax.YLim = [-100 20];
ax.XTick = 0:.5:2;
xlabel('Normalized Frequency (\times\pi rad/sample)')
ylabel('Magnitude (dB)')

Figure contains an axes object. The axes object with xlabel Normalized Frequency ( times pi blank rad/sample), ylabel Magnitude (dB) contains an object of type line.

FIR 대역통과 필터의 주파수 응답

0.35π rad/sample과 0.8π rad/sample 사이의 통과대역과 3dB의 리플을 갖는 FIR 대역통과 필터를 설계합니다. 첫 번째 저지대역은 0 rad/sample부터 0.1π rad/sample까지이며 40dB의 감쇠량을 가집니다. 두 번째 저지대역은 0.9π rad/sample부터 나이퀴스트 주파수까지이며 30dB의 감쇠량을 가집니다. 주파수 응답을 계산합니다. 주파수 응답의 크기를 선형 단위와 데시벨로 플로팅합니다. 통과대역을 강조 표시합니다.

sf1 = 0.1;
pf1 = 0.35;
pf2 = 0.8;
sf2 = 0.9;
pb = linspace(pf1,pf2,1e3)*pi;

bp = designfilt('bandpassfir', ...
    'StopbandAttenuation1',40, 'StopbandFrequency1',sf1,...
    'PassbandFrequency1',pf1,'PassbandRipple',3,'PassbandFrequency2',pf2, ...
    'StopbandFrequency2',sf2,'StopbandAttenuation2',30);

[h,w] = freqz(bp,1024);
hpb = freqz(bp,pb);

subplot(2,1,1)
plot(w/pi,abs(h),pb/pi,abs(hpb),'.-')
axis([0 1 -1 2])
legend('Response','Passband','Location','South')
ylabel('Magnitude')

subplot(2,1,2)
plot(w/pi,db(h),pb/pi,db(hpb),'.-')
axis([0 1 -60 10])
xlabel('Normalized Frequency (\times\pi rad/sample)')
ylabel('Magnitude (dB)')

Figure contains 2 axes objects. Axes object 1 with ylabel Magnitude contains 2 objects of type line. These objects represent Response, Passband. Axes object 2 with xlabel Normalized Frequency (\times\pi rad/sample), ylabel Magnitude (dB) contains 2 objects of type line.

고역통과 필터의 크기 응답

0.5π rad/sample의 정규화된 3dB 주파수를 갖는 3차 고역통과 버터워스 필터를 설계합니다. 필터의 주파수 응답을 계산합니다. 크기 응답을 데시벨 단위로 표현하고 플로팅합니다.

[b,a] = butter(3,0.5,'high');
[h,w] = freqz(b,a);

dB = mag2db(abs(h));

plot(w/pi,dB)
xlabel('\omega / \pi')
ylabel('Magnitude (dB)')
ylim([-82 5])

Figure contains an axes object. The axes object with xlabel omega blank / blank pi, ylabel Magnitude (dB) contains an object of type line.

아날로그 영역

freqs는 두 개의 입력 계수 벡터 ba로 정의된 아날로그 필터에 대한 주파수 응답을 계산합니다. 이 동작은 freqz 동작과 비슷합니다. 사용할 여러 주파수 점을 지정하고, 임의 주파수 점으로 구성된 벡터를 제공하고, 필터의 크기 응답과 위상 응답을 플로팅할 수 있습니다. 이 예제에서는 아날로그 주파수 응답을 계산하고 표시하는 방법을 보여줍니다.

아날로그 IIR 저역통과 필터 비교

2GHz의 차단 주파수를 갖는 5차 아날로그 버터워스 저역통과 필터를 설계합니다. 2π를 곱하여 주파수를 초당 라디안 값으로 변환합니다. 4096개 점에서 필터의 주파수 응답을 계산합니다.

n = 5;
fc = 2e9;

[zb,pb,kb] = butter(n,2*pi*fc,"s");
[bb,ab] = zp2tf(zb,pb,kb);
[hb,wb] = freqs(bb,ab,4096);

동일한 경계 주파수와 3dB의 통과대역 리플을 갖는 5차 체비쇼프 유형 I 필터를 설계합니다. 필터의 주파수 응답을 계산합니다.

[z1,p1,k1] = cheby1(n,3,2*pi*fc,"s");
[b1,a1] = zp2tf(z1,p1,k1);
[h1,w1] = freqs(b1,a1,4096);

동일한 경계 주파수와 30dB의 저지대역 감쇠량을 갖는 5차 체비쇼프 유형 II 필터를 설계합니다. 필터의 주파수 응답을 계산합니다.

[z2,p2,k2] = cheby2(n,30,2*pi*fc,"s");
[b2,a2] = zp2tf(z2,p2,k2);
[h2,w2] = freqs(b2,a2,4096);

동일한 경계 주파수, 3dB의 통과대역 리플, 30dB의 저지대역 감쇠량을 갖는 5차 타원 필터를 설계합니다. 필터의 주파수 응답을 계산합니다.

[ze,pe,ke] = ellip(n,3,30,2*pi*fc,"s");
[be,ae] = zp2tf(ze,pe,ke);
[he,we] = freqs(be,ae,4096);

동일한 경계 주파수를 갖는 5차 베셀 필터를 설계합니다. 필터의 주파수 응답을 계산합니다.

[zf,pf,kf] = besself(n,2*pi*fc);
[bf,af] = zp2tf(zf,pf,kf);
[hf,wf] = freqs(bf,af,4096);

감쇠량(단위: 데시벨)을 플로팅합니다. 주파수를 기가헤르츠 단위로 표현합니다. 필터를 비교합니다.

plot([wb w1 w2 we wf]/(2e9*pi), ...
    mag2db(abs([hb h1 h2 he hf])))
axis([0 5 -45 5])
grid
xlabel("Frequency (GHz)")
ylabel("Attenuation (dB)")
legend(["butter" "cheby1" "cheby2" "ellip" "besself"])

Figure contains an axes object. The axes object with xlabel Frequency (GHz), ylabel Attenuation (dB) contains 5 objects of type line. These objects represent butter, cheby1, cheby2, ellip, besself.

버터워스 필터와 체비쇼프 유형 II 필터는 평탄한 통과대역과 넓은 천이 대역을 가집니다. 체비쇼프 유형 I 필터와 타원 필터는 더 빨리 롤오프되지만 통과대역 리플을 가집니다. 체비쇼프 유형 II 설계 함수에 대한 주파수 입력값은 통과대역의 끝값이 아니라 저지대역의 시작값을 설정합니다. 베셀 필터는 통과대역에서 거의 일정한 군지연을 가집니다.