FIR滤波器设计中的窗函数

使用窗函数的作用在于减少频谱泄漏,由于在实际应用中,通常都是FIR滤波器,这就不能使滤波器的系数达到sinc函数上的无限大的抽样,从而实现在频域的方波形状的低通滤波,人们想到使用窗函数的方法对输入的采样点进行加窗处理。

常用的窗函数有汉宁窗,汉明窗,布莱克慢窗,凯泽窗等。它们的评价指标就在于过渡带宽度,通带纹波,主瓣与旁瓣比,阻带衰减。

如果不加窗的话,就相当于加一个矩形窗。

写这个文章的原由是要解释一个疑问,用matlab得到的窗函数序列和书本上以及实际程序代码里的都有出入。

这里就用汉宁窗来举例吧。

在matlab里输入hanning(8)回车得到的是:

>> hanning(8)

ans =

    0.1170
    0.4132
    0.7500
    0.9698
    0.9698
    0.7500
    0.4132
    0.1170

你会发现上下对称的结果。

关于窗函数的表达式,我在一本书上看到是这样的w(n)=0.5[1-cos(2*pi*n/(N-1))], n = 0,1,...N-1.这样计算出来的结果就是:

0.000000
0.188255
0.611260
0.950484
0.950484
0.611260
0.188255
0.000000

也是上下对称的,这就把第一个和最后一个都去掉了,因为等于0

而我在程序代码里看到的却是另一种表达式,即w(n)=0.5[1-cos(2*pi*n/N)], n = 0,1,...N-1.这样计算出来的结果就是:

0.000000
0.146447
0.500000
0.853553
1.000000
0.853553
0.500000
0.146447

这个结果的上下都不对称了。

问题来了,同一个问题有三个不同的答案,究竟它们谁错了,谁是对的,我考虑之后觉得他们都是对的,因为窗函数只是对输出的频谱的一种改善,当然这种改善也会付出代价,比如使频率分辨率降低。

那么matlab使用的是什么表达式呢,我猜出来的结果是w(n)=0.5[1-cos(2*pi*n/(N+1))], n = 1,2,...N.验证后果然如此。可能是因为matlab要去掉那个首尾计算出来的零值才这么做的吧。

在计算汉明窗的时候,matlab使用的表达式是和书上的一样的,都是w(n)=0.54 - 0.46*cos(2*pi*n/(N-1)), n = 0,1,...N-1.

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值