解决一下上一篇的遗留问题
上一篇谈了FIR滤波器的加窗是什么,但是自觉得还是有些地方没有说明白,就好比模拟加窗过程都没有讲明白。
不过今天再看书时,又有所得,忽然明白了为什么模拟加窗过程出了问题,这是由于我之前对于数字滤波器的设计过程还很模糊。
窗函数设计法的设计思路:
- 给定要求的理想频响
![ed930c1da9f91b18f3c7ee608da3ec1a.png](https://i-blog.csdnimg.cn/blog_migrate/8c826f5647216d985fc3a23d1dccf6f9.png)
,一般为分段常数
- 转为时域设计,所以需要求出
![2b71374976fb65ee5cebbd68e9cd9e20.png](https://i-blog.csdnimg.cn/blog_migrate/7b9d46f5c8d409c6d771fdd1b9a47c6e.png)
![189cc841485dd2c54c821c3db3ba3aeb.png](https://i-blog.csdnimg.cn/blog_migrate/4b9009f1700568864bd7e25925ed6040.jpeg)
- 由于
![2b71374976fb65ee5cebbd68e9cd9e20.png](https://i-blog.csdnimg.cn/blog_migrate/7b9d46f5c8d409c6d771fdd1b9a47c6e.png)
是无限时长的,所以需要加窗截断为
![a4b867322eb3c2169954a0fd86aa40c9.png](https://i-blog.csdnimg.cn/blog_migrate/4a55247706ce4045d67a199f1d9d71f3.png)
,窗的长度为N
因为窗函数是在时域内截断,所以需要将理想滤波器转换到时域来处理。
![d9fcbf2050debc1faf49f0798a279134.png](https://i-blog.csdnimg.cn/blog_migrate/7294448783accc8f8da438da27816f22.png)
- 求出加窗后的实际频响
![a78457665c869958fcf51f8d6c08b48a.png](https://i-blog.csdnimg.cn/blog_migrate/c93c19d2ba6750418a87adfad455e2c1.png)
![c545fdaa2363de5dad7e4f650e1d8d10.png](https://i-blog.csdnimg.cn/blog_migrate/efc13175f9271825bfe7b159d23845a1.jpeg)
- 检查
![a78457665c869958fcf51f8d6c08b48a.png](https://i-blog.csdnimg.cn/blog_migrate/c93c19d2ba6750418a87adfad455e2c1.png)
是否满足
![ed930c1da9f91b18f3c7ee608da3ec1a.png](https://i-blog.csdnimg.cn/blog_migrate/8c826f5647216d985fc3a23d1dccf6f9.png)
,不满足就重复3、4步骤
我使用的子程序是书上提供的,可以产生一个理想滤波器。
今天突然对这个程序有了新的理解。因为这个是子程序产生的时域的滤波器,为了能够在电脑中存储,本来就已经加了一个矩形窗,因此它的频域波形存在波纹;而我又加一个矩形窗,对这个已经加了矩形窗的滤波器当然是一点效果都没有咯。
几种常见窗函数
回到今天的主题,今天探讨一下几种常见滤波器的特性和使用场景。
翻了很多遍书,发现对于滤波器的设计,主要关心的是过渡带宽(Transition bandwidth)、通带边沿衰减(Passband ripple)、阻带最小衰减(Minimum stopband attenuation),而且大部分的参数都是用dB作单位。
使用dB做单位的好处有:
- 数值变小。由于分贝是取对数值,所以能很方便的表示大的数量的变化
- 运算方便。放大器级联时,总的放大倍数是各级相乘。用分贝做单位时,总增益就是相加。
- 方便感知。人对强度(光照、声音)的感知,接近于于强度的对数的正比。
至于为什么要这么多种窗呢?那是因为不同的窗特性不一样,比如最简单的矩形窗,虽然完成了截断工作,但是通带衰减大、阻带衰减小,导致能量的浪费;而之后的多种窗则或多或少的弥补了这些缺点。
矩形窗
矩形窗的定义为
![e99050e187ff4ab0ba42d57a265905cb.png](https://i-blog.csdnimg.cn/blog_migrate/b4a650abb598f6b02e10067deac14e7a.jpeg)
频率响应函数为
![83b94e013f9d7a8ebdfce2a774f372fd.png](https://i-blog.csdnimg.cn/blog_migrate/910d89328e4353d7920b732ccc1c8466.png)
因此
![d72fb96d81e3f922dd19c547f11a163e.png](https://i-blog.csdnimg.cn/blog_migrate/eabae5a3306d47d6300166feba3d437e.jpeg)
下面分析窗函数的主要参数:
![81461bdc1cc97f1ff3e3dbf47c75a232.png](https://i-blog.csdnimg.cn/blog_migrate/a2207c2a29cf057e923b754ec8d5b9b5.jpeg)
- 幅度响应
![a8a456d930fe77ed9a9151fd895a6c88.png](https://i-blog.csdnimg.cn/blog_migrate/a0d9da85c02f617b51edf4311a3a141a.png)
第一个零点在
![07057edc90e15e0ed1c4fb8eb71ffb88.png](https://i-blog.csdnimg.cn/blog_migrate/70c7f64deedfe19bc1467a891a4413b4.jpeg)
![fa5b716247d3f5c9fdc253d0d98f0313.png](https://i-blog.csdnimg.cn/blog_migrate/c5ef86332a466f836d8325cf43fe8952.jpeg)
因此,主瓣宽度为为
![87b9c5f144c99581529e88fbe55f3e77.png](https://i-blog.csdnimg.cn/blog_migrate/39171411a2d139e12b5cffa791bb9fc3.png)
,因此传输带宽近似于
![e7e0ef895be60ee79c8378665570d1f9.png](https://i-blog.csdnimg.cn/blog_migrate/c8b632ed303afb2cb571d3703ecc1c52.png)
- 第一个旁瓣大概在
![db956619547798d9718790bb429679a9.png](https://i-blog.csdnimg.cn/blog_migrate/2cafb985135e979a9fd4882da985373c.png)
的位置,因此它的幅值为
![b7a8c77cec09b9e689c46d2984d1b175.png](https://i-blog.csdnimg.cn/blog_migrate/982e91d51f3382bf9c66261b6b7869dc.png)
对比主瓣的幅值,旁瓣幅值峰值为
![eafa8cca8eb64c0de11eb7dc72e8460f.png](https://i-blog.csdnimg.cn/blog_migrate/354ac6651cc7d73e39a1de7e61a7bcfd.jpeg)
三角形窗
由于吉布斯现象,矩形窗存在一个0到1的越变;而三角形窗则提供了一个比较缓慢的变化,它的定义式为:
![2b9a404ece0bc61c93eda017908799b7.png](https://i-blog.csdnimg.cn/blog_migrate/c17230a42149136eb093be49a56366bc.jpeg)
谱密度函数表达式如下,'≈'仅当
![4f9ca42d330283c2de63a6e5480eb5b0.png](https://i-blog.csdnimg.cn/blog_migrate/75227c2044e604a24c4f0726f4d14bf3.png)
时成立
![ebb230cca745e977ae25a33f30cdadfe.png](https://i-blog.csdnimg.cn/blog_migrate/8012204dfd866f427535b48bf4a71a6f.jpeg)
主瓣宽度为
![7cfd95a0e8158f56c0b8aa9efe8ce15a.png](https://i-blog.csdnimg.cn/blog_migrate/c426f4aa529a312373a4ead7467d2664.png)
,旁瓣峰值衰减为25dB
![08a2a2bbff3752d490ec3876a0a054e1.png](https://i-blog.csdnimg.cn/blog_migrate/4cdb27d1b9f1d3b14264fc056a21ee65.jpeg)
汉宁窗(Hanning)
这是一个升余弦窗,被定义为
![d6b4ab2977e538d25bb1a600c0c33823.png](https://i-blog.csdnimg.cn/blog_migrate/751a8f36db15faf10b3db24d658d9a01.png)
主瓣宽度为
![7cfd95a0e8158f56c0b8aa9efe8ce15a.png](https://i-blog.csdnimg.cn/blog_migrate/c426f4aa529a312373a4ead7467d2664.png)
,旁瓣峰值衰减为31dB
![ea10957c1810c59479fca02bb0c2b3f7.png](https://i-blog.csdnimg.cn/blog_migrate/9ccd58e5fd80a01950bd8706880ba121.jpeg)
海明窗(Hamming)
海明窗和汉宁窗很像,不同的是它有一部分是不连续的,被定义为
![d945eb4f14a85626eb38c33ebd7eae74.png](https://i-blog.csdnimg.cn/blog_migrate/d1760e7a8cfbca58f1477d6d89aa373c.png)
主瓣宽度为
![7cfd95a0e8158f56c0b8aa9efe8ce15a.png](https://i-blog.csdnimg.cn/blog_migrate/c426f4aa529a312373a4ead7467d2664.png)
,旁瓣峰值衰减为41dB
![b90f47532e704ec2d652d538e7deeb2b.png](https://i-blog.csdnimg.cn/blog_migrate/12b2d5533051a241604bc951eeb222dd.jpeg)
布莱克曼窗(Blackman)
这个窗函数和前两个窗函数很像,不过增加了升余弦的二次谐波分量,被定义为
![c28850a44f0cacb58b6f33c5b8316ae6.png](https://i-blog.csdnimg.cn/blog_migrate/ee132799dc00552c1bb84e882a68692d.png)
主瓣宽度为
![72519c169bfce41565a21d7e9c4925e5.png](https://i-blog.csdnimg.cn/blog_migrate/4e90fe8c391da0ff6e03623ba0b63132.png)
,旁瓣峰值衰减为57dB
![3c8cdba6f698375ceed59ba0e8763707.png](https://i-blog.csdnimg.cn/blog_migrate/f8d1bad8d09c6d133dfbd93522bd3b09.jpeg)
凯泽窗(Kaiser)
这是一个非常有用的窗函数,它可以同时调整主瓣宽度与旁瓣宽度,这是其他窗函数不具备的,被定义为
![7c4d832b2f9f645b75c70d4c493ba74f.png](https://i-blog.csdnimg.cn/blog_migrate/fb9ebca62b47ca2a36de0fab0b64a1a9.jpeg)
![9edf330e4dc725d8ee508b4073e12b48.png](https://i-blog.csdnimg.cn/blog_migrate/2e7f9800bf1f0fe2c2ac9767f5307eee.png)
是第一类零阶贝塞尔函数,
![55da960cdf2b75f0d94cbc2719cde1f6.png](https://i-blog.csdnimg.cn/blog_migrate/0badd78ad5366899bfbbcae5b48bee2d.png)
是用来调整窗函数性能的参数
本人使用的
![9ec617e6173e4da42082df808f17e8cb.png](https://i-blog.csdnimg.cn/blog_migrate/bb9d4dcb1691b87fe9fae691f0394ffb.png)
![462369d72b20c8fe790efc67b626e337.png](https://i-blog.csdnimg.cn/blog_migrate/0723824f10c9564843353b918da884f0.jpeg)
如何选择窗函数
选择窗函数可以参考前文中的窗函数设计法
先确定自己的需求,然后根据窗函数的极限性能,做出选择,最后再验证这个窗函数是否符合需求
本文中的代码已上传本人的 github
githubgithub.com参考书籍:
- Digital Signal Processing Using Matlab v4.0 John G. Proakis
- 《数字信号处理教程》 程佩青