多语言展示
当前在线:1146今日阅读:179今日分享:36

IIR数字滤波器设计

对信号进行滤波是信号处理的前提与基础,滤波的主要目的就是为了滤除无用的干扰信号,进而得到对我们有用的信号,为进一步信号的分析奠定基础。滤波器分为模拟滤波器和数字滤波器,数字滤波器相比较模拟滤波器而言,主要有以下优点:(1)滤波精度更高(2)稳定性好(3)灵活性强,数字滤波器又分为无限脉冲响应数字滤波器(IIR)和有限脉冲响应滤波器(FIR),本文主要介绍Matlab软件中IIR数字滤波器的设计与分析:
工具/原料
1

滤波器设计

2

matlab

方法/步骤
1

滤波器的设计过程,滤波器设计方法一般有三种:(1)简单滤波器零级点位置累试法(2)利用模拟滤波器设计IIR数字滤波器(3)利用最优化技术方法来设计数字滤波器       常见的经典法设计滤波器主要有4种,巴特沃斯滤波器,切比雪夫I型滤波器,切比雪夫II型滤波器,椭圆滤波器。

2

巴特沃斯滤波器设计巴特沃斯滤波器可以用于设计低通、高通、带通、带阻滤波器,其设计方法如下:   (1)得到滤波器最小滤波器阶数和截止频率,调用buttord函数,其调用格式如下:        [n,wn]=buttord(Wp,Ws,Rp,Rs);Wp,Ws分别表示归一化通带截至频率和归一化阻带截至频率,Rp,Rs分别表示通带和阻带的波纹系数       巴特沃斯各种滤波器设计对应的Wp,Ws的对应的规则不同       高通滤波器:Wp,Ws都是一元矢量,Wp>Ws       低通滤波器:Wp,Ws都是一元矢量,WpWs  (2)计算滤波器的系数,调用butter函数,调用格式如下:      [z,p,k]=butterap(n);      [b,a]=butter(n,Wn,’ftype’);      n表示滤波器阶数,Wn归一化截至频率,ftype:滤波器类型,z:零点,p:极点,k:增益,b,a表示滤波器系数示例:对含有20HZ和50HZ频率叠加谐波信号的低通滤波,使其只含有20HZ频率对应的m文件程序如下:       Fs=250;      T=1/Fs;      L=500;      N=0:L-1;      t=T*N;      f1=20;      f2=50;      x=sin(2*pi*f1*t)+sin(2*pi*f2*t);      subplot(2,3,1)      plot(t,x,'r')      title('原始信号');      xlabel('t/s');      ylabel('幅值');      Ndata=2^nextpow2(L);      y=fft(x,Ndata)*2/Ndata;      f=Fs*(0:Ndata-1)/Ndata;      subplot(2,3,2)      plot(f(1:Ndata/2),abs(y(1:Ndata/2)),'b');      title('原始信号频谱图');      xlabel('频率/HZ');      ylabel('幅值'); %%巴特沃斯低通滤波器设计%%      Wp=30/Fs;      Ws=100/Fs;      Rs=50;      Rp=1;      [n,Wn]=buttord(Wp,Ws,Rp,Rs);      [b,a]=butter(n,Wn);      [h,f]=freqz(b,a);      f=Fs*(0:length(f)-1)/length(f);%%频率转化%%      subplot(2,3,3)      plot(f(1:length(f)/2),abs(h(1:length(f)/2)));      title('巴特沃斯滤波器设计')      xlabel('频率/HZ');      ylabel('幅值');%%对原始信号进行滤波%%      x2=filter(b,a,x);      subplot(2,3,4)      plot(t,x2);      title('滤波后信号');      y2=fft(x2,Ndata)*2/Ndata;      f=Fs*(0:Ndata-1)/Ndata;      xlabel('t/s');      ylabel('幅值');      subplot(2,3,5)      plot(f(1:Ndata/2),abs(y2(1:Ndata/2)))      title('滤波后信号频谱图');      xlabel('频率/HZ');      ylabel('幅值');程序运行结果如下:

3

切比雪夫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;程序运行结果如下图:

4

切比雪夫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;     程序运行结果如下图:

5

椭圆滤波器设计   (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;程序运行结果如下图:

6

直接法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('设计目标响应','滤波器响应');程序运行结果如下图:

推荐信息