1. % %% 巴特沃斯带通滤波器
2. % %设计带通滤波器
3. % %巴特沃斯、切比雪夫I型、切比雪夫II型、椭圆型滤波器
4. % %wp和ws分别是通带和阻带的频率(截止频率)。当wp和ws为二元矢量时,为带通或带阻滤波器,这时求出的Wn也是二元矢量;当wp和ws为一元矢量时,为低通或高通滤波器:当wp<ws时为低通滤波器,当wp>ws时为高通滤波器。
5. % %wp和ws为二元矢量
6. wp=0.6 ; %设置通带频率
7. ws=0.8; %设置阻带频率
8. Rp=1; %设置通带波纹系数
9. Rs=20; %设置阻带波纹系数
10. %巴特沃斯滤波器设计
11. [N,Wn]=buttord(wp,ws,Rp,Rs,'s'); %求巴特沃斯滤波器阶数,输出参数N代表满足设计要求的滤波器的最小阶数,Wn是等效低通滤波器的截止频率
12. %无论是高通、带通和带阻滤波器,在设计中最终都等效于一个截止频率为Wn的低通滤波器(我现在也不是很理解为啥是这样,毕竟我也是刚接触滤波器)
13. fprintf('巴特沃斯滤波器 N= %4d\n',N); %显示滤波器阶数
14. [b,a]=butter(N,Wn,'s'); %求巴特沃斯滤波器系数,即求传输函数的分子和分母的系数向量
15. W=0:0.01:2; %设置模拟频率
16. [Hb,wb]=freqs(b,a,W); %求巴特沃斯滤波器频率响应
17. plot(wb/pi,20*log10(abs(Hb)),'b'); %作图
18. hold on
19. %切比雪夫I型滤波器设计
20. [N,Wn]=cheb1ord(wp,ws,Rp,Rs,'s'); %求切比雪夫I型滤波器阶数
21. fprintf('切比雪夫I型滤波器 N= %4d\n',N); %显示滤波器阶数
22. [bc1,ac1]=cheby1(N,Rp,Wn,'s'); %求切比雪夫I型滤波器系数,即求传输函数的分子和分母的系数向量
23. [Hc1,wc1]=freqs(bc1,ac1,W); %求切比雪夫I型滤波器频率响应
24. plot(wc1/pi,20*log10(abs(Hc1)),'k'); %作图
25. %切比雪夫II型滤波器设计
26. [N,Wn]=cheb2ord(wp,ws,Rp,Rs,'s'); %求切比雪夫II型滤波器阶数
27. fprintf('切比雪夫II型滤波器 N= %4d\n',N);%显示滤波器阶数
28. [bc2,ac2]=cheby2(N,Rs,Wn,'s'); %求切比雪夫II型滤波器系数,即求传输函数的分子和分母的系数向量
29. [Hc2,wc2]=freqs(bc2,ac2,W); %求切比雪夫II型滤波器频率响应
30. plot(wc2/pi,20*log10(abs(Hc2)),'r'); %作图
31. %椭圆型滤波器设计
32. [N,Wn]=ellipord(wp,ws,Rp,Rs,'s'); %求椭圆型滤波器阶数
33. fprintf('椭圆型滤波器 N= %4d\n',N); %显示滤波器阶数
34. [be,ae]=ellip(N,Rp,Rs,Wn,'s'); %求椭圆型滤波器系数,即求传输函数的分子和分母的系数向量
35. [He,we]=freqs(be,ae,W); %求椭圆型滤波器频率响应
36. %作图
37. plot(we/pi,20*log10(abs(He)),'g');
38. axis([0 max(we/pi) -30 2]);
39. legend('巴特沃斯滤波器','切比雪夫I型滤波器','切比雪夫II型滤波器','椭圆型滤波器');
40. xlabel('角频率{\omega}/{\pi}');
41. ylabel('幅值/dB');
42. line([0 max(we/pi)],[-20 -20],'color','k','linestyle','--');%在画布上画线
43. line([0 max(we/pi)],[-1 -1],'color','k','linestyle','--');
44. line([0.2 0.2],[-30 2],'color','k','linestyle','--');
45. line([0.3 0.3],[-30 2],'color','k','linestyle','--');