⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 iir_impulse_butterworth.m

📁 这是一个基于MATLAB编写的BUTTERWORTH滤波器的程序.其中从s域到z域的变换是自己编写的,代替了MATLAB中的系统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 + -