matlab设计模拟带通滤波器

简单记录下在matlab上如何设计出模拟的带通滤波器,包括:巴特沃斯滤波器、切比雪夫I型滤波器、切比雪夫II型滤波器、椭圆型滤波器。
代码如下:

%设计带通滤波器
%巴特沃斯、切比雪夫I型、切比雪夫II型、椭圆型滤波器


clear all;

%wp和ws分别是通带和阻带的频率(截止频率)。当wp和ws为二元矢量时,为带通或带阻滤波器,这时求出的Wn也是二元矢量;当wp和ws为一元矢量时,为低通或高通滤波器:当wp<ws时为低通滤波器,当wp>ws时为高通滤波器。

%wp和ws为二元矢量
wp=[0.1*2*pi 0.15*2*pi];                %设置通带频率
ws=[0.05*2*pi 0.2*2*pi];                %设置阻带频率

Rp=1;                                   %设置通带波纹系数
Rs=20;                                  %设置阻带波纹系数        

%巴特沃斯滤波器设计
[N,Wn]=buttord(wp,ws,Rp,Rs,'s');        %求巴特沃斯滤波器阶数,输出参数N代表满足设计要求的滤波器的最小阶数,Wn是等效低通滤波器的截止频率
%无论是高通、带通和带阻滤波器,在设计中最终都等效于一个截止频率为Wn的低通滤波器(我现在也不是很理解为啥是这样,毕竟我也是刚接触滤波器)
fprintf('巴特沃斯滤波器 N= %4d\n',N);    %显示滤波器阶数
[bb,ab]=butter(N,Wn,'s');               %求巴特沃斯滤波器系数,即求传输函数的分子和分母的系数向量
W=0:0.01:2;                             %设置模拟频率
[Hb,wb]=freqs(bb,ab,W);                 %求巴特沃斯滤波器频率响应
plot(wb/pi,20*log10(abs(Hb)),'b');      %作图
hold on

%切比雪夫I型滤波器设计
[N,Wn]=cheb1ord(wp,ws,Rp,Rs,'s');       %求切比雪夫I型滤波器阶数
fprintf('切比雪夫I型滤波器 N= %4d\n',N); %显示滤波器阶数
[bc1,ac1]=cheby1(N,Rp,Wn,'s');          %求切比雪夫I型滤波器系数,即求传输函数的分子和分母的系数向量
[Hc1,wc1]=freqs(bc1,ac1,W);             %求切比雪夫I型滤波器频率响应
plot(wc1/pi,20*log10(abs(Hc1)),'k');    %作图

%切比雪夫II型滤波器设计
[N,Wn]=cheb2ord(wp,ws,Rp,Rs,'s');       %求切比雪夫II型滤波器阶数
fprintf('切比雪夫II型滤波器 N= %4d\n',N);%显示滤波器阶数
[bc2,ac2]=cheby2(N,Rs,Wn,'s');          %求切比雪夫II型滤波器系数,即求传输函数的分子和分母的系数向量
[Hc2,wc2]=freqs(bc2,ac2,W);             %求切比雪夫II型滤波器频率响应
plot(wc2/pi,20*log10(abs(Hc2)),'r');    %作图

%椭圆型滤波器设计
[N,Wn]=ellipord(wp,ws,Rp,Rs,'s');       %求椭圆型滤波器阶数
fprintf('椭圆型滤波器 N= %4d\n',N);      %显示滤波器阶数
[be,ae]=ellip(N,Rp,Rs,Wn,'s');          %求椭圆型滤波器系数,即求传输函数的分子和分母的系数向量
[He,we]=freqs(be,ae,W);                 %求椭圆型滤波器频率响应
%作图
plot(we/pi,20*log10(abs(He)),'g');
axis([0 max(we/pi) -30 2]);
legend('巴特沃斯滤波器','切比雪夫I型滤波器','切比雪夫II型滤波器','椭圆型滤波器');
xlabel('角频率{\omega}/{\pi}');
ylabel('幅值/dB');
line([0 max(we/pi)],[-20 -20],'color','k','linestyle','--');%在画布上画线
line([0 max(we/pi)],[-1 -1],'color','k','linestyle','--');
line([0.2 0.2],[-30 2],'color','k','linestyle','--');
line([0.3 0.3],[-30 2],'color','k','linestyle','--');

运行结果如下:

巴特沃斯滤波器 N=    4
切比雪夫I型滤波器 N=    3
切比雪夫II型滤波器 N=    3
椭圆型滤波器 N=    2

在这里插入图片描述

注:
1、求各种滤波器的传输函数的分子和分母向量系数的函数,例如:

[bc1,ac1]=cheby1(N,Rp,Wn,'s');          %求切比雪夫I型滤波器系数,即求传输函数的分子和分母的系数向量

这里的函数cheby1()中的参数为

cheby1(N,Rp,Wn,'type','s');

其中注意’type’可为高通:'high’或带阻:‘stop’,如果不填的话,默认是低通或者带通,至于是低通还是带通,主要看你前面的wp和ws是二元矢量还是一元矢量:二元矢量对应带通,一元矢量对应低通。

2、matlab中的line()函数简单介绍:
https://blog.csdn.net/qq_36554582/article/details/83352155

  • 48
    点赞
  • 260
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Matlab 有许多内置的函数和工具箱可以用来模拟滤波器,下面是一些常用的方法: 1. 使用 `filter` 函数:可以使用 `filter` 函数对信号进行滤波。该函数接受三个参数:滤波器系数,输入信号,输出信号。例如,可以使用以下代码来实现一个低通滤波器: ```matlab % 生成信号 t = 0:0.001:1; x = sin(2*pi*50*t) + sin(2*pi*120*t); % 设计低通滤波器 Fs = 1000; % 采样率 fc = 60; % 截止频率 [b,a] = butter(6,fc/(Fs/2),'low'); % 6阶巴特沃斯低通滤波器 % 进行滤波 y = filter(b,a,x); % 绘制信号和滤波后的信号 subplot(2,1,1); plot(t,x); title('原始信号'); subplot(2,1,2); plot(t,y); title('滤波后的信号'); ``` 2. 使用 `fdatool` 工具箱:`fdatool` 是 Matlab 中一个交互式的数字滤波器设计工具箱,可以使用该工具箱设计各种类型的数字滤波器。打开 `fdatool` 工具箱后,可以选择需要的滤波器类型、滤波器系数、滤波器参数等,然后生成滤波器函数并应用到需要的信号上。 3. 使用 `bode` 函数:可以使用 `bode` 函数绘制频率响应图,从而了解滤波器的性能和特点。例如,可以使用以下代码来绘制一个二阶低通滤波器的频率响应图: ```matlab % 设计二阶低通滤波器 Fs = 1000; % 采样率 fc = 60; % 截止频率 [b,a] = butter(2,fc/(Fs/2),'low'); % 2阶巴特沃斯低通滤波器 % 绘制频率响应图 h = fvtool(b,a); ``` 以上是几种常用的 Matlab 模拟滤波器的方法,您可以根据需要选择适合自己的方法进行模拟

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值