利用 SCILAB 设计 iir 滤波器设计(模拟滤波器双线性变换法)

最后更新于:2022-04-01 07:32:04

IIR 滤波器的设计方法有很多种,一种比较简单的方法是先设计对应的模拟滤波器,然后将模拟滤波器转换为对应的数字滤波器。模拟滤波器到数字滤波器的转换最常见的方法是双线性变换法。下面就介绍一下怎么利用SCILAB提供的函数利用这种方法设计一个IIR 滤波器。   hz=iir(n,ftype,fdesign,frq,delta) [p,z,g]=iir(n,ftype,fdesign,frq,delta) Arguments N : 滤波器的阶数 Ftype 滤波器的类型,’lp’ 表示低通,'hp' 表示高通,'bp' 表示带通,'sb' 表示带阻。 Fdesign:指定模拟滤波器的类型,可以为 'butt', 'cheb1', 'cheb2' ,'ellip' Frq: 长度为2的向量,指定滤波器的截止频率,这里的频率为归一化的频率,采样频率归一化为1。对于低通和高通滤波器,只有第一个参数有用,带通和带阻滤波器这两个截止频率都要用到。   Delta:长度为2的向量,对于cheb1型滤波器,只有第一个参数有用, 对于cheb2 型滤波器,只用到第二个参数,ellip 滤波器这两个参数都用到了 0<delta(1),delta(2)<1 对cheb1 型滤波器:1-delta(1)<ripple<1 ,限定了通带的波动 对cheb2 型滤波器: 0<ripple<delta(2) ,限定了阻带的波动 对ellip 型滤波器: 在通带,1-delta(1)<ripple<1  在阻带,0<ripple<delta(2)    Hz:计算出的系统函数 P:给出了滤波器的各个零点 z:给出了滤波器的各个极点 G:增益   下面给个具体的例子: hz=iir(3,'bp','ellip',[.15 .25],[.08 .03]);   这个例子设计的是一个 3 阶带通椭圆滤波器。通带截止频率为 0.15 和 0.25,通带允许波动为 0.08, 阻带允许波动为 0.03。   计算出的滤波器传递函数为: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-01-24_56a42342ecd84.jpg) 下面画出频响曲线: [hzm,fr]=frmag(hz,256); plot2d(fr',hzm') xtitle('Discrete IIR filter band pass  0.15 < fr < 0.25 ',' ',' '); ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-01-24_56a4234305da6.jpg) 如果我们需要零极点信息的话,可以这样计算: [p,z,g]=iir(3,'bp','ellip',[.15 .25],[.08 .03]);   Z 给出的是零点的位置,q是极点位置: z  =       0.7632657 + 0.6460848i       0.7632657 - 0.6460848i       1.                         - 0.3182662 - 0.9480014i     - 0.3182662 + 0.9480014i     - 1.                           p  =       0.5561319 - 0.7583880i       0.5561319 + 0.7583880i       0.2703756 + 0.7688681i     - 0.0034896 + 0.9267011i     - 0.0034896 - 0.9267011i       0.2703756 - 0.7688681i 
';