滤波器设计
matlab
滤波器的设计过程,滤波器设计方法一般有三种:(1)简单滤波器零级点位置累试法(2)利用模拟滤波器设计IIR数字滤波器(3)利用最优化技术方法来设计数字滤波器 常见的经典法设计滤波器主要有4种,巴特沃斯滤波器,切比雪夫I型滤波器,切比雪夫II型滤波器,椭圆滤波器。
巴特沃斯滤波器设计巴特沃斯滤波器可以用于设计低通、高通、带通、带阻滤波器,其设计方法如下: (1)得到滤波器最小滤波器阶数和截止频率,调用buttord函数,其调用格式如下: [n,wn]=buttord(Wp,Ws,Rp,Rs);Wp,Ws分别表示归一化通带截至频率和归一化阻带截至频率,Rp,Rs分别表示通带和阻带的波纹系数 巴特沃斯各种滤波器设计对应的Wp,Ws的对应的规则不同 高通滤波器:Wp,Ws都是一元矢量,Wp>Ws 低通滤波器:Wp,Ws都是一元矢量,Wp
切比雪夫I型滤波器设计(1)得到滤波器最小滤波器阶数和截止频率,调用cheb1ord函数,其调用格式如下: [n,wn]=cheb1ord(Wp,Ws,Rp,Rs);Wp,Ws分别表示归一化通带截至频率和归一化阻带截至频率,Rp,Rs分别表示通带和阻带的波纹系数(2)计算滤波器的系数,调用cheby1函数,调用格式如下: [b,a]=cheby1(n,Rp,Wn,’ftype’); n表示滤波器阶数,Wn归一化截至频率,Rp表示通带波纹系数,ftype:滤波器类型,b,a表示滤波器系数示例:采样频率为1000HZ,通带内(0-30HZ)波动不超过2dB,在120HZ处至少衰减50dB,设计切比雪夫I型滤波器编写对应m文件如下: Fs=1000; Wp=30/Fs; Ws=120/Fs; Rp=2; Rs=50; [n,Wn]=cheb1ord(Wp,Ws,Rp,Rs); [b,a]=cheby1(n,Rp,Wn); [h,f]=freqz(b,a,512,Fs); f=Fs*(0:length(f)-1)/length(f); subplot(2,1,1) plot(f(1:length(f)/2),20*log(abs(h(1:length(f)/2)))); title('切比雪夫I型低通滤波器'); xlabel('频率/HZ'); ylabel('幅值/dB'); grid on; subplot(2,1,2) plot(f(1:length(f)/2),phase(h(1:length(f)/2))*180/pi); xlabel('频率/HZ'); ylabel('相位/度'); grid on;程序运行结果如下图:
切比雪夫II型滤波器设计(1)得到滤波器最小滤波器阶数和截止频率,调用cheb2ord函数,其调用格式如下: [n,wn]=cheb2ord(Wp,Ws,Rp,Rs);Wp,Ws分别表示归一化通带截至频率和归一化阻带截至频率,Rp,Rs分别表示通带和阻带的波纹系数(2)计算滤波器的系数,调用cheby1函数,调用格式如下: [b,a]=cheby2(n,Rs,Wn,’ftype’); n表示滤波器阶数,Wn归一化截至频率,Rs表示阻带波纹系数,ftype:滤波器类型,b,a表示滤波器系数示例:采样频率为1000HZ,通带内(0-30HZ)波动不超过2dB,在120HZ处至少衰减50dB,设计切比雪夫II型滤波器编写对应m文件如下: Fs=1000; Wp=30/Fs; Ws=120/Fs; Rp=2; Rs=50; [n,Wn]=cheb2ord(Wp,Ws,Rp,Rs); [b,a]=cheby2(n,Rs,Wn); [h,f]=freqz(b,a,512,Fs); f=Fs*(0:length(f)-1)/length(f); subplot(2,1,1) plot(f(1:length(f)/2),20*log(abs(h(1:length(f)/2)))); title('切比雪夫II型低通滤波器'); xlabel('频率/HZ'); ylabel('幅值/dB'); grid on; subplot(2,1,2) plot(f(1:length(f)/2),phase(h(1:length(f)/2))*180/pi); xlabel('频率/HZ'); ylabel('相位/度'); grid on; 程序运行结果如下图:
椭圆滤波器设计 (1)得到滤波器最小滤波器阶数和截止频率,调用ellipord函数,其调用格式如下: [n,wn]=ellipord(Wp,Ws,Rp,Rs);Wp,Ws分别表示归一化通带截至频率和归一化阻带截至频率,Rp,Rs分别表示通带和阻带的波纹系数 (2)计算滤波器的系数,调用cheby1函数,调用格式如下: [b,a]=ellip(n,Rp,Rs,Wn,’ftype’); n表示滤波器阶数,Wn归一化截至频率,ftype:滤波器类型,b,a表示滤波器系数示例:采样频率为1000HZ,通带内(0-30HZ)波动不超过2dB,在120HZ处至少衰减50dB,设计椭圆滤波器 编写对应m文件如下: Fs=1000; Wp=30/Fs; Ws=120/Fs; Rp=2; Rs=50; [n,Wn]=ellipord(Wp,Ws,Rp,Rs); [b,a]=ellip(n,Rp,Rs,Wn); [h,f]=freqz(b,a,512,Fs); f=Fs*(0:length(f)-1)/length(f); subplot(2,1,1) plot(f(1:length(f)/2),20*log(abs(h(1:length(f)/2)))); title('椭圆低通滤波器'); xlabel('频率/HZ'); ylabel('幅值/dB'); grid on; subplot(2,1,2) plot(f(1:length(f)/2),phase(h(1:length(f)/2))*180/pi); xlabel('频率/HZ'); ylabel('相位/度'); grid on;程序运行结果如下图:
直接法IIR滤波器设计 直接法滤波器设计是直接针对滤波器频率响应进行设计,实现直接法滤波器设计函数为yulewalk,其调用格式如下: [b,a]=yulewalk(n,f,m);其中,f为归一化频率点数,m为频率点处响应,两者长度一致示例:设计一个5阶低通滤波器,并将其频率响应函数与设计目标响应做对比编写对应m文件如下: f=[0 0.2 0.4 0.6 0.8 1]; m=[1 1 1 1 0 0]; [b,a]=yulewalk(5,f,m); [h,w]=freqz(b,a,256); plot(f,m,'r',w/pi,abs(h),'b'); legend('设计目标响应','滤波器响应');程序运行结果如下图: