0阶贝塞尔函数_几种常见窗函数的特性

解决一下上一篇的遗留问题

上一篇谈了FIR滤波器的加窗是什么,但是自觉得还是有些地方没有说明白,就好比模拟加窗过程都没有讲明白。

不过今天再看书时,又有所得,忽然明白了为什么模拟加窗过程出了问题,这是由于我之前对于数字滤波器的设计过程还很模糊。

窗函数设计法的设计思路:

  • 给定要求的理想频响

ed930c1da9f91b18f3c7ee608da3ec1a.png

,一般为分段常数

  • 转为时域设计,所以需要求出

2b71374976fb65ee5cebbd68e9cd9e20.png

189cc841485dd2c54c821c3db3ba3aeb.png
  • 由于

2b71374976fb65ee5cebbd68e9cd9e20.png

是无限时长的,所以需要加窗截断为

a4b867322eb3c2169954a0fd86aa40c9.png

,窗的长度为N

因为窗函数是在时域内截断,所以需要将理想滤波器转换到时域来处理。

d9fcbf2050debc1faf49f0798a279134.png
  • 求出加窗后的实际频响

a78457665c869958fcf51f8d6c08b48a.png

c545fdaa2363de5dad7e4f650e1d8d10.png
  • 检查

a78457665c869958fcf51f8d6c08b48a.png

是否满足

ed930c1da9f91b18f3c7ee608da3ec1a.png

,不满足就重复3、4步骤

我使用的子程序是书上提供的,可以产生一个理想滤波器。

今天突然对这个程序有了新的理解。因为这个是子程序产生的时域的滤波器,为了能够在电脑中存储,本来就已经加了一个矩形窗,因此它的频域波形存在波纹;而我又加一个矩形窗,对这个已经加了矩形窗的滤波器当然是一点效果都没有咯。

几种常见窗函数

回到今天的主题,今天探讨一下几种常见滤波器的特性和使用场景。

翻了很多遍书,发现对于滤波器的设计,主要关心的是过渡带宽(Transition bandwidth)通带边沿衰减(Passband ripple)阻带最小衰减(Minimum stopband attenuation),而且大部分的参数都是用dB作单位。

使用dB做单位的好处有:

  • 数值变小。由于分贝是取对数值,所以能很方便的表示大的数量的变化
  • 运算方便。放大器级联时,总的放大倍数是各级相乘。用分贝做单位时,总增益就是相加。
  • 方便感知。人对强度(光照、声音)的感知,接近于于强度的对数的正比。

至于为什么要这么多种窗呢?那是因为不同的窗特性不一样,比如最简单的矩形窗,虽然完成了截断工作,但是通带衰减大、阻带衰减小,导致能量的浪费;而之后的多种窗则或多或少的弥补了这些缺点。

矩形窗

矩形窗的定义为

e99050e187ff4ab0ba42d57a265905cb.png

频率响应函数为

83b94e013f9d7a8ebdfce2a774f372fd.png

因此

d72fb96d81e3f922dd19c547f11a163e.png

下面分析窗函数的主要参数:

81461bdc1cc97f1ff3e3dbf47c75a232.png
  1. 幅度响应

a8a456d930fe77ed9a9151fd895a6c88.png

第一个零点在

07057edc90e15e0ed1c4fb8eb71ffb88.png

fa5b716247d3f5c9fdc253d0d98f0313.png


因此,主瓣宽度为为

87b9c5f144c99581529e88fbe55f3e77.png

,因此传输带宽近似于

e7e0ef895be60ee79c8378665570d1f9.png
  1. 第一个旁瓣大概在

db956619547798d9718790bb429679a9.png

的位置,因此它的幅值为

b7a8c77cec09b9e689c46d2984d1b175.png

对比主瓣的幅值,旁瓣幅值峰值为

eafa8cca8eb64c0de11eb7dc72e8460f.png

三角形窗

由于吉布斯现象,矩形窗存在一个0到1的越变;而三角形窗则提供了一个比较缓慢的变化,它的定义式为:

2b9a404ece0bc61c93eda017908799b7.png

谱密度函数表达式如下,'≈'仅当

4f9ca42d330283c2de63a6e5480eb5b0.png

时成立

ebb230cca745e977ae25a33f30cdadfe.png

主瓣宽度为

7cfd95a0e8158f56c0b8aa9efe8ce15a.png

,旁瓣峰值衰减为25dB

08a2a2bbff3752d490ec3876a0a054e1.png

汉宁窗(Hanning)

这是一个升余弦窗,被定义为

d6b4ab2977e538d25bb1a600c0c33823.png

主瓣宽度为

7cfd95a0e8158f56c0b8aa9efe8ce15a.png

,旁瓣峰值衰减为31dB

ea10957c1810c59479fca02bb0c2b3f7.png

海明窗(Hamming)

海明窗和汉宁窗很像,不同的是它有一部分是不连续的,被定义为

d945eb4f14a85626eb38c33ebd7eae74.png

主瓣宽度为

7cfd95a0e8158f56c0b8aa9efe8ce15a.png

,旁瓣峰值衰减为41dB

b90f47532e704ec2d652d538e7deeb2b.png

布莱克曼窗(Blackman)

这个窗函数和前两个窗函数很像,不过增加了升余弦的二次谐波分量,被定义为

c28850a44f0cacb58b6f33c5b8316ae6.png

主瓣宽度为

72519c169bfce41565a21d7e9c4925e5.png

,旁瓣峰值衰减为57dB

3c8cdba6f698375ceed59ba0e8763707.png

凯泽窗(Kaiser)

这是一个非常有用的窗函数,它可以同时调整主瓣宽度与旁瓣宽度,这是其他窗函数不具备的,被定义为

7c4d832b2f9f645b75c70d4c493ba74f.png

9edf330e4dc725d8ee508b4073e12b48.png

是第一类零阶贝塞尔函数,

55da960cdf2b75f0d94cbc2719cde1f6.png

是用来调整窗函数性能的参数

本人使用的

9ec617e6173e4da42082df808f17e8cb.png

462369d72b20c8fe790efc67b626e337.png

如何选择窗函数

选择窗函数可以参考前文中的窗函数设计法

先确定自己的需求,然后根据窗函数的极限性能,做出选择,最后再验证这个窗函数是否符合需求


本文中的代码已上传本人的 github

github​github.com

参考书籍:

  • Digital Signal Processing Using Matlab v4.0 John G. Proakis
  • 《数字信号处理教程》 程佩青
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值