概述
我之前学习滤波器实现的时候做的一篇笔记,当时参考了一个英文pdf文件,现在忘了,所以没法给出出处。最近突然发现自己忘了这块内容,于是翻开笔记重新温习了一遍,也顺便在这里分享给大家。
1.FIR 是指有限冲击响应,属于线性时不变系统(LTI),也是IIR的特例。FIR滤波器在时域可表达为公式
y(n)=∑(b(i)*x(n-i) i=[0,K] ——(1)
这里,b(i)表示滤波系数,K-1 是b的长度。FIR 滤波器频域的传输函数可以表达为:
H(z)=Y(z)/X(z)=∑b(i)z^i,i=[0,-K] ——(2)
此FIR滤波器是稳定的,因为所有的极点都在z平面上的原点。该 FIR滤波器的操作只涉及滤波器的当前和过去的输入,在此实施 实时滤波很简单。
我们现在要做的是寻找一组合适的滤波系数来表示b(i)。因为时域的卷积就是频域的乘积,所以我们可以在频域上设计一组系数,然后转为时域系数。这是下面要介绍的。
2.傅里叶变化设计
逆傅里叶变化公式:
h(n)=1/(2pi)*∫( H(e^jw)*e^jwn )dw, w=[-pi,pi],n=[-,+ ]
根据z=e^jw 公式可简化为
h(n)=1/(2pi)*∫H(z)*z^ndw ————(3)
现在通过截断高频率Wc,(Wc>0)来达到低频滤波的目标
if |w| > Wc
H(z)=0
else
H(z) = 1
end
如图所示(Ω与w同义)。
通过对(3)式的计算得到冲激响应函数:
h(n)=sin(wn)/(npi).————(4)
上式是低通滤波器系数,还有其他几种滤波器类型可依此推倒出来,这里给出表格:
注意到,以上的冲激响应都是无限且对称的,我们通过截断头尾,使得他变成有限长2M+1,即从-M到M,这个区间保留了大部分信息量,以便于计算机处理。
这样在频域来看,通过附加H(z)来截断高频的传输函数如下
H(z)=h(M)z^M+h(M-1)z^M-1+ .. + h(0)+h(1)z+...h(M)z^(-M)
也就是说,我们设计了一组系数来截断高频数据。
对比开头给出的公式,我们需要延时M个单位。
H(z)=b(0)+b(1)z^-1+...+b(2M)z^-2M, 其中 b(n) = h(n- M), n = 0, 1,..,2M.
下面我们来设计一组系数
例子1,对于一组采样率为8000Hz的样本,请设计一组3阶低通滤波系数,截断频率为800Hz。
解答:
w=2pi*800/8000=0.1pi %归一化
h(-1)=h(1)=sin(w)/pi %对称性
h(0)=w/pi
代入得
b(0)=h(-1)=0.0984
b(1)=h(0)=0.1
b(2)=h(1)=0.0984
H(z)=0.0984+0.1z^-1+0.0985z^-2
以上算法可通过matlab的firls函数验证正确性。
matlab输入
>> firls(2,[0 0.1 0.1 1], [1 1 0 0])
ans =
0.0984 0.1000 0.0984
第一个参数是阶数-1。第二个参数是归一化的频率响应点,第三个参数是第二个参数对应的节点上的归一化频率幅度响应值。
最后
以上就是机灵钢笔为你收集整理的fir滤波器的设计和实现的全部内容,希望文章能够帮你解决fir滤波器的设计和实现所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复