滤波器介绍及系数设计

描述

在数字信号处理领域中,数字滤波器占有非常重要的地位。根据其计算方式可以分为FIR(有限脉冲响应)滤波器,和IIR(无限脉冲响应)滤波器两种。

FIR滤波器根据如下公式进行计算:

y[m] = b[0]x[m] + b[1]x[m-1] + …. + b[p]x[m-p]

IIR滤波器:

y[m] = b[0]x[m] + b[1]x[m-1] + …. + b[p]x[m-p]

-a[1]y[m-1] – a2y[m-2]- … - a[Q]y[m-Q]

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]的乘积和.

FIR滤波器是IIR滤波器的一种特殊情况.

滤波器的作用:改变信号频谱,实现频域滤波。

低通滤波器参数特征:

数字信号处理

比如,设计一个归一化为0.2通带的低通滤波器,其频谱响应为:

数字信号处理

生成一个随机信号将其作为输入经过上述滤波器,结果如下,蓝线是随机信号的频谱,橙线为经过滤波器后的频谱。

数字信号处理

再比如一个双音信号,经过该滤波器,输入信号频谱:

数字信号处理

经过滤波器滤波后的频谱:

数字信号处理

数字滤波器的设计,最常用的是MATLAB的 filterDesigner工具根据需求直接配置参数,即可生成滤波器系数,同时给出滤波器的频谱响应,使用特别方便:

数字信号处理

使用python的话可以用scipy库的signal.remez函数:

import scipy.signal as signal
signal.remez(numtaps, bands, desired,
weight=None, Hz=1, type='bandpass', maxiter=25, grid_density=16)

其中:

numtaps : 所设计的FIR滤波器的长度

bands :一个递增序列,它包括频率响应中的所有频带的边界,其值在0到Hz/2之间,如果参数Hz为缺省值1的话,那么可以把它当作是以取样频率正规化的频率

desired : 长度为bands的一半的增益序列,它给出频率响应在bands中的每个频带的增益值

weight : 长度和desired一样的权重序列,它给出desired中的每个增益所占的权重,即给出desired中的每个增益的重要性,值越大表示其越重要

type : 'bandpass'或者'differentiator'

比如设计一个归一化为0.1的低通滤波器,截止频率0.11,系数长度701的滤波器:

len_h=701
bands = np.array([0., 0.1, .11, .5])
h = signal.remez(len_h, bands, [1,0], [100,1])

滤波器的频谱响应为:

数字信号处理

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分