matlab设计模拟高通滤波器

版权声明:本文为博主原创文章,如需转载,请注明出处 https://blog.csdn.net/qq_36554582/article/details/83351438

简单记录下在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;                            %设置通带频率
ws=0.05*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,'high','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,'high','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,'high','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,'high','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','--');

运行结果如下:

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

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_36554582/article/details/83351438