联系matlab用双线性变换法设计Butterworth低通滤波器m
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了联系matlab用双线性变换法设计Butterworth低通滤波器m相关的知识,希望对你有一定的参考价值。
用双线性变换法分别设计数字Butterworth低通滤波器(IIR),使用MATLAB或者C语言编程实现数字Butterworth滤波器,性能要求如下:
低通数字滤波器:采样频率为10Hz,其中通带临界频率 ,通带内衰减小于1dB,阻带临界频率 ,阻带内衰减大于20dB。求这个数字滤波器的传递函数H(Z),输出它的幅频和相位特性曲线,观察其通带衰减和阻带衰减是否满足要求。
请写出matlab程序
%1.用Butterworth低通模拟滤波器原型%%%%%%%%%%%%%%%%%%%%%%%%%%%%数字滤波器指标
Wp=0.3*pi; %通带边界频率(归一化):wp=fp*2*pi/fs
Ws=0.5*pi; %阻带边界频率(归一化):ws=fr*2*pi/fs
Rp=0.5; %通带波纹
As=40; %阻带衰减
%转换为模拟滤波器指标(预畸);
Ts=0.000125;fs=8000;
OmegaP=(2/Ts)*tan(Wp/2); %模拟低通原型滤波器通带频率
OmegaS=(2/Ts)*tan(Ws/2); %模拟低通原型滤波器阻带频率
[N,OmegaC]=buttord(OmegaP,OmegaS,Rp,As,'s'); %模拟巴特沃斯滤波器的阶数和-3dB截止频率计算,这时要加字符's'。
[z0,p0,k0]=buttap(N); %设计归一化巴特沃兹滤波器低通原型
%进行非归一化处理
p=p0*OmegaC; z=z0*OmegaC;
k=k0*OmegaC^N;
ba=k*real(poly(z));
aa=real(poly(p));
[bd,ad]=bilinear(ba,aa,fs); %双线性变换
[h,w]=freqz(bd,ad); %计算频率响应
am=20*log10(abs(h));
ph=angle(h);
%绘图
subplot(2,1,1);plot(w/pi,am);
axis([0 1 -250 5]);
xlabel('w(以pi为单位)');ylabel('|H(ejw)|以dB为单位');
set(gca,'XTickMode','manual','XTick',[0 0.3 0.5 1]);
set(gca,'YTickMode','manual','YTick',[ -40 0]);grid;
subplot(2,1,2);plot(w/pi,ph/pi);xlabel('w(以pi为单位)');ylabel('相位以pi为单位'); 参考技术A 楼上的程序没问题,把这句改改subplot(2,1,1);plot(w/pi,am);
顺序有点反了哦 参考技术B 同学,你是信院哪个班的,晚上出来喝茶!
Matlab c2d()函数的用法
1.c2d()函数的用法
c2d()函数的作用是将s域的表达式转化成z域的表达式,s=0对应z=1。
c2d()函数转化的方法有多种:
①zoh, 零阶保持器法,又称阶跃响应不变法;
②foh ,一阶保持器法
③tustin ,双线性变换法
④ imp, 脉冲响应不变法。
根据不同的场合,使用不同的方法,生成的参数也不一样。在具体的应用场合,需针对不同的具体应用问题采用适当的方法的问题!比如滤波器设计多采用脉冲响应不变法;控制器设计多采用双线性变换法(‘tustin‘)、零极点配置法(‘matched‘)、后向差分法(这个c2d函数不包含)等;如果是控制系统仿真或控制器的直接数字化设计,被控对象离散化则多采用加零阶保持器方法(‘zoh‘,又称阶跃响应不变法)。
若根据s函数直接求z变换,用c2d(k,0.02,‘imp‘)就可以了!‘imp‘称为“脉冲响应不变法”,实为直接求Z变换!当然还有其他办法!事实上,所有教科书所予“Z变换表”就是直接求Z变换(这种解释有点像“同意反复”),而c2d函数并非如此!比如c2d(k,0.02),尽管没有指明采用何种方法离散化,但事实上默认的是‘zoh‘!
————————————————
版权声明:本文为CSDN博主「tuxinbang1989」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/tuxinbang1989/article/details/80480953
以上是关于联系matlab用双线性变换法设计Butterworth低通滤波器m的主要内容,如果未能解决你的问题,请参考以下文章