利用matlab进行IIR数字滤波器设计

最近处理语音信号用到了数字滤波器,自己稍微做了下总结,上传上来,以备以后不时之需。
下面这两张图片,从滤波器类型选择,具体每步如何进行都记录了个人的一些学习过程,如有不对,欢迎各位大神批评指正。

滤波的基本过程个人总结为以下几步:
1.根据个人需求选择合适的滤波器类型。
2.根据通带阻带频率、通带波纹、阻带衰减等参数确定滤波器的阶数和截止频率;
3.根据阶数与截止频率设计滤波器,得到滤波器传递函数的系数。
4.根据滤波器系数与原始信号进行卷积计算,即对原始信号实现了滤波。

1.滤波器的选择:

利用matlab进行IIR数字滤波器设计

2.滤波器设计过程:

利用matlab进行IIR数字滤波器设计

其中,滤波器的阶次也可按照手工的方式计算,计算公式如下图所示:
利用matlab进行IIR数字滤波器设计

3.进行滤波

y=filter(b,a,x);,输入x为滤波前序列,y为滤波结果序列,b/a 提供滤波器系数,b为分子, a为分母
整个滤波过程是通过下面差分方程实现的:
a(1)*y(n) = b(1)*x(n) + b(2)*x(n-1) + … + b(nb+1)*x(n-nb)- a(2)*y(n-1) - … - a(na+1)*y(n-na)
na,nb分别为抽头数目,幂次依次降低。

4.一些基本的概念

通带纹波:在滤波器的频响中通带的最大幅值和最小幅值的差,正常的滤波器一般通带纹波小于1db,不过也视情况而定。
通带纹波会导致通带内的信号幅值大小有变化,对一些要求高的系统,纹波越小越好。通带纹波和滤波器的阶数有关系,阶数越大纹波越小。

阻带纹波道理应该是一样的,不过好像没有人去关注阻带的纹波,主要关注的阻带参数是阻带衰减。

抽头:可以简单地理解为滤波器系数的个数。比如一个4抽头的滤波器(1, - 5, 20, 20 ),若输入为变量A,B,C,D,则该滤波器的输出为A-5*B+20*C+20*D。这里的系数类似于加权的权值。

5.滤波器的C实现

目前c语言实现滤波器最佳的方法是:
首先采用matlab 现有的函数或者工具箱,设计好滤波器,得到滤波器阶数、抽头系数等数据;然后根据小节3中的滤波器公式,对原始信号进行滤波即可。