本文主要是介绍【DSP数字信号处理学习笔记】——FIR数字滤波器设计攻略:基于加窗傅里叶级数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
我们在上一篇Blog中详细介绍了如何设计IIR滤波器,对于此类滤波器,我们还必须得保证所设计出来的滤波器是稳定的。然而在FIR滤波器中,由于整个系统函数是 z − 1 z^{-1} z−1 的多项式,因此传输函数必然是稳定的,所以在设计FIR滤波器时,稳定性就不是一个需要考虑的问题了。此外,与数字IIR滤波器不同,FIR滤波器的设计与模拟滤波器没有任何关系,其中一种FIR滤波器的设计方法就是对给定的频率响应在时域上进行截短。我们下面重点看看这种方法。
由低通FIR滤波器的设计开始
首先,我们现在需要设计一个低通FIR滤波器。那么怎么做呢?首先,对于理想低通滤波器的频率响应我们是很熟悉的了,它的频域和时域长下面这样:
那么我们发现,这个时域信号 x ( t ) x(t) x(t) 很明显是无限长的,因此我们就需要对它进行截短,也就是说取 x ( t ) x(t) x(t) 的一部分去逼近 x ( t ) x(t) x(t) 的频域响应。那么,这个“截短”操作就大有讲究了,到底怎么截就是一个值得研究的问题。
“截短”可以基于两个准则—— 1. 最小积分平方误差准则;2. 一致逼近准则(一致逼近准则的物理意义就是波纹最小)。使用不同的准则,就会得到不同的加窗方式,这里我们不再赘述,教材中都对此有详细的解释。我们下面就简单看看都能用什么样的窗函数对这个时域信号进行截短。
这里需要说明一下的是,下面对各种窗的介绍,我们将给出时频图,其中,时域图表示我们的窗函数;而频域图窗的增益响应,显示了窗函数的主瓣和旁瓣。
【1】矩形窗
(值得注意的是:矩形窗虽然总的误差能量最小,但是单点的波纹较大)
【2】汉宁窗(下图中粉色线)
【3】布莱克曼窗(下图粉色线)
还有许许多多各种样式的窗函数,我们也就不一一列举了。下面我们重点来看看:窗函数的主瓣和旁瓣对所截得的滤波器有什么影响。
我们首先看看如何对 x ( t ) x(t) x(t) 加矩形窗,结果会是怎么样:
那么频域上就是他们两者频谱的卷积,所以得出的最终信号的频谱是:
也就是说,直接的截短并不能完美地拟合原来的频谱,而是会出现波纹,也就是吉布斯现象。
吉布斯现象的特点:
- 最大波纹仅取决于窗函数的类型
- 最大波纹与滤波器的长度无关
- 与间断点的跳变幅度有关
- 矩形窗的最大波纹≈通带和阻带幅度差的11%
减小吉布斯现象的方法:
- 时域上:尽量避免出现时域上的跳变,使用渐变窗函数
- 频域上:增加过渡带带宽。
同时也会出现过渡带(也就是幅度需要一个时间去变化). 下面我们给出结论:窗函数的主瓣宽度越窄,那么过渡带就会越窄;窗函数的旁瓣高度越小,那么波纹就会越小。
【小Tips:过渡带带宽近似等于窗函数主瓣宽度】
【小Tips:2 在相同窗函数长度下,主瓣宽度有下面的关系:矩形窗<汉宁窗=汉明窗<布莱克曼窗】
主瓣宽度与窗函数类型以及窗长度有关;而旁瓣高度仅仅与窗函数类型有关。
FIR滤波器的设计步骤
首先,我们可以得到所需要的滤波器指标,包括通带截止频率 ω p \omega_p ωp;阻带截止频率 ω s \omega_s ωs,以及通带波纹,阻带波纹 δ s δ_s δs等。
接下来我们需要计算阻带衰减: 20 l g ( δ s ) 20lg(δ_s) 20lg(δs)
然后,我们根据考试中给出的各种窗的表格(如下图),选出合适的窗:(找一个小于,且最接近所算出来的阻带衰减的类型即可)
然后计算过渡带,求出 M。(2M+1就是窗函数的长度)
最后计算一下窗函数的中心频率 ω c \omega_c ωc ; ω c = ω p + ω s 2 \omega_c = \frac{\omega_p+\omega_s}{2} ωc=2ωp+ωs
带入公式: h w [ n ] = s i n ω c n π n h_w[n] = \frac{sin \omega_c n }{\pi n} hw[n]=πnsinωcn
就可以得到窗函数的时域表达式,拿他经过M的时移信号跟IIR的时域(也时移M个单位)相乘,就可以得到FIR滤波器的时域函数,如下所示。
h w [ n − M ] ⋅ x [ n − M ] h_w[n-M]\sdot x[n-M] hw[n−M]⋅x[n−M]
补充1:其他几种类型的FIR滤波器的相关设计要点
四种理想滤波器的时域函数形式应该还是需要记一下的,指不定考试就考到哪个了呢:
-
理想低通滤波器: h [ n ] = { s i n ( ω c n ) π n 0 ≤ n ≤ N − 1 0 e l s e h[n]= \begin{cases} \frac{sin(\omega_cn)}{\pi n}\quad 0≤n≤N-1\\ 0\quad else \end{cases} h[n]={πnsin(ωcn)0≤n≤N−10else
-
理想高通滤波器:
h [ n ] = { 1 − ω c π n = 0 ; − s i n ( ω c n ) π n ∣ n ∣ > 0 h[n]= \begin{cases} 1-\frac{\omega_c}{\pi}\quad n=0;\\ -\frac{sin(\omega_cn)}{\pi n}\quad\quad |n|>0 \end{cases} h[n]={1−πωcn=0;−πnsin(ωcn)∣n∣>0 -
理想带通滤波器
h [ n ] = s i n ( ω c 2 n ) π n − s i n ( ω c 1 n ) π n ∣ n ∣ ≥ 0 h[n]=\frac{sin(\omega_{c2}n)}{\pi n}-\frac{sin(\omega_{c1}n)}{\pi n}\quad |n|≥0 h[n]=πnsin(ωc2n)−πnsin(ωc1n)∣n∣≥0 -
理想带阻滤波器
h [ n ] = { 1 − ω c 2 − ω c 1 π n = 0 ; s i n ( ω c 1 n ) π n − s i n ( ω c 2 n ) π n ∣ n ∣ ≥ 0 h[n]= \begin{cases} 1-\frac{\omega_{c2}-\omega_{c1}}{\pi}\quad n=0;\\ \frac{sin(\omega_{c1}n)}{\pi n}-\frac{sin(\omega_{c2}n)}{\pi n}\quad |n|≥0 \end{cases} h[n]={1−πωc2−ωc1n=0;πnsin(ωc1n)−πnsin(ωc2n)∣n∣≥0
如果涉及到像带通带阻这样有多个截止频率的,如何设计呢?
【第一步】还是先计算出阻带衰减,选择合适的窗函数类型
【第二步】计算通频带,比如一个带通滤波器,那么它应该有两个通频带: ω s 1 − ω p 1 \omega_{s1}-\omega_{p1} ωs1−ωp1; ω s 2 − ω p 2 \omega_{s2}-\omega_{p2} ωs2−ωp2
【第三步】:我们选择最小的那个通频带带入公式,算出M。
【第四步】:计算出对应的中心频率,此时应该是: ω s 1 + ω p 1 2 \frac{\omega_{s1}+\omega_{p1}}{2} 2ωs1+ωp1 和 ω s 2 + ω p 2 2 \frac{\omega_{s2}+\omega_{p2}}{2} 2ωs2+ωp2
补充2:关于FIR与IIR
FIR滤波器的优点:易于实现现象相位,且稳定。缺点:在满足相同指标的前提下,FIR所需要的阶数比IIR要高,逼近效率较低。
IIR滤波器优点:阶数低,逼近效率高;缺点:难以实现线性相位,不一定稳定。
这篇关于【DSP数字信号处理学习笔记】——FIR数字滤波器设计攻略:基于加窗傅里叶级数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!