📄 iir_impulse_butterworth.m
字号:
%用脉冲响应不变法设计IIR数字滤波器
%滤波器的原形用BUTTERWORTH滤波器
%首先定义数字滤波器的参数
wp=pi*0.2 ;
ws=pi*0.3 ;
ap=1 ;
as=15 ;
%将数字滤波器的参数转为滤波器滤波器的参数
T=0.001 ;
Fs=1/T;
omegap=wp*Fs;
omegas=ws*Fs;
%计算模拟滤波器的阶数和在ap=3dB时的omgeac
a=10^(abs(as)/10)-1;
b=10^(abs(ap)/10)-1;
c=log10(omegas/omegap);
N=ceil(log10(sqrt(a/b))/c); %计算阶数N的值(四舍五入)
if(ap==3)
omegac=omegap;
else
omegac=omegap/((10^(0.1*abs(ap))-1)^(1/(2*N)));
end %计算3dB是的omegac
%计算极点p、零点z和增益k
[z0,p0,k0]=buttap(N);
z=z0*omegac;
p=p0*omegac;
k=k0*omegac^N;
%计算模拟滤波器传递函数的H(z)中b和a的值
ba=k*real(poly(z));
aa=real(poly(p));
%进行脉冲响应变换
[ra,pa,ca]=residue(ba,aa); %用分部分式计算模拟滤波器的C,P和R
%数字滤波器的脉冲采样序列为:
%h(n)=h(t)*T=T*∑R*e^(P*T*n)
%H(z)=∑(T*R)/(1-e^(P*T*n)*z^-1)
pd=exp(pa*T);
[bd,ad]=residuez(T*ra,pa,ca); %得出数字滤波器传递函数的分子和分母系数
bd=real(bd); %real()消除虚部
ad=real(ad);
%impz(bd,ad);
%[h,w]=freqz(bd,ad);
%subplot(322);
%plot(w,20*log10(abs(h)));
%subplot(323);
%plot(w,angle(h)*180/pi);
%subplot(324);
zplane(bd,ad);
%gd=grpdelay(bd,ad);
%subplot(325);
%plot(gd)
%[H,w]=freqz(bd,ad);
%subplot(221),plot(w,abs(H))
%subplot(222),plot(w,angle(H))
%subplot(223),zplane(bd,ad)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -