16.1 FIR和IIR滤波器
在数字信号处理领域中,数字滤波器占有非常重要的地位。根据其计算方式可以分为FIR(有限脉冲响
应)滤波器,和IIR(无限脉冲响应)滤波器两种。
FIR滤波器根据如下公式进行计算:
y[m] = b[0]x[m] + b[1]x[m− 1] + · · ·+ b[P ]x[n− P ]
IIR滤波器根据如下公式(直接1型)进行计算:
y[m] = b[0]x[m] + b[1]x[m− 1] + · · ·+ b[P ]x[m− P ]
− a[1]y[m− 1]− a[2]y[m− 2]− · · · − a[Q]y[m−Q]
其中x是输入信号,数组a和b是滤波器的系数,y是滤波器的输出。我们可以把FIR滤波器看作是IIR滤
波器的一种特殊情况:当系数a都为0时就从IIR滤波器变为了FIR滤波器了。
根据FIR滤波器的计算公式我们可以知道,时刻m的输出y[m]由时刻m的输入x[m]以及之前的输入x
[m-1] ... x[m-P]和滤波器的系数b[0] ... b[P]求乘积和而得。而IIR滤波器只不过是再减去之前的输出y
[m-1] ... y[m-Q]和系数a[1] ... a[m-Q]的乘积和。
总之,数字滤波器的计算方法并不复杂,仅仅是数组对应元素的乘积和求和而已。然而其计算量对
于Python来说是相当大的:通常FIR滤波器的系数长度都上百,而CD音质的数字声音信号一秒钟有
44100个取样值,假设滤波器的长度是100,那么一秒钟需要计算4百万次以上的乘积和加法。这对于
Python这样的动态语言来说是很困难的。
199
2022-11-29 00:23:59
6.06MB
numpy
1