概述
class=“Button ColumnPageHeader-MenuToggler Button–plain”>
几种常见窗函数的特性
![greedyhao](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047301564149.png)
解决一下上一篇的遗留问题
上一篇谈了FIR滤波器的加窗是什么,但是自觉得还是有些地方没有说明白,就好比模拟加窗过程都没有讲明白。
不过今天再看书时,又有所得,忽然明白了为什么模拟加窗过程出了问题,这是由于我之前对于数字滤波器的设计过程还很模糊。
窗函数设计法的设计思路:
- 给定要求的理想频响
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047309913145.png)
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047307238924.png)
,一般为分段常数
- 转为时域设计,所以需要求出
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047308126067.png)
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047309094202.png)
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047305577513.jpg)
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047314293516.jpg)
- 由于
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047308126067.png)
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047309094202.png)
是无限时长的,所以需要加窗截断为
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047314997890.png)
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047317104918.png)
,窗的长度为N
因为窗函数是在时域内截断,所以需要将理想滤波器转换到时域来处理。
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047317011293.png)
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047318674501.png)
- 求出加窗后的实际频响
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047316849326.png)
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047312363908.png)
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047311914856.jpg)
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047318187140.jpg)
- 检查
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047316849326.png)
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047312363908.png)
是否满足
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047309913145.png)
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047307238924.png)
,不满足就重复3、4步骤
我使用的子程序是书上提供的,可以产生一个理想滤波器。
今天突然对这个程序有了新的理解。因为这个是子程序产生的时域的滤波器,为了能够在电脑中存储,本来就已经加了一个矩形窗,因此它的频域波形存在波纹;而我又加一个矩形窗,对这个已经加了矩形窗的滤波器当然是一点效果都没有咯。
几种常见窗函数
回到今天的主题,今天探讨一下几种常见滤波器的特性和使用场景。
翻了很多遍书,发现对于滤波器的设计,主要关心的是过渡带宽(Transition bandwidth)、通带边沿衰减(Passband ripple)、阻带最小衰减(Minimum stopband attenuation),而且大部分的参数都是用dB作单位。
使用dB做单位的好处有:
- 数值变小。由于分贝是取对数值,所以能很方便的表示大的数量的变化
- 运算方便。放大器级联时,总的放大倍数是各级相乘。用分贝做单位时,总增益就是相加。
- 方便感知。人对强度(光照、声音)的感知,接近于于强度的对数的正比。
至于为什么要这么多种窗呢?那是因为不同的窗特性不一样,比如最简单的矩形窗,虽然完成了截断工作,但是通带衰减大、阻带衰减小,导致能量的浪费;而之后的多种窗则或多或少的弥补了这些缺点。
矩形窗
矩形窗的定义为
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047321341974.jpg)
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047324876050.jpg)
频率响应函数为
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047328351360.png)
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047324726531.png)
因此
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047327340814.jpg)
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047325380692.jpg)
下面分析窗函数的主要参数:
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047326159118.jpg)
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047321715183.jpg)
- 幅度响应
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047323901970.png)
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047329504836.png)
第一个零点在
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047324046078.png)
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047333084548.png)
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047338639049.jpg)
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047331735629.jpg)
因此,主瓣宽度为为
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047339374841.png)
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047334246821.png)
,因此传输带宽近似于
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047331785982.png)
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047332047090.png)
- 第一个旁瓣大概在
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047336330407.png)
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047332573146.png)
的位置,因此它的幅值为
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047334861012.png)
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047331118320.png)
对比主瓣的幅值,旁瓣幅值峰值为
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047339584753.jpg)
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047335303126.jpg)
三角形窗
由于吉布斯现象,矩形窗存在一个0到1的越变;而三角形窗则提供了一个比较缓慢的变化,它的定义式为:
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047349488980.jpg)
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047342761718.jpg)
谱密度函数表达式如下,'≈’仅当
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047343445219.png)
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047341211349.png)
时成立
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047345642343.jpg)
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047343768857.jpg)
主瓣宽度为
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047344229321.png)
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047345583322.png)
,旁瓣峰值衰减为25dB
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047349471315.jpg)
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047341110548.jpg)
汉宁窗(Hanning)
这是一个升余弦窗,被定义为
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047341690024.png)
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047342209881.png)
主瓣宽度为
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047344229321.png)
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047345583322.png)
,旁瓣峰值衰减为31dB
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047358329661.jpg)
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047353090065.jpg)
海明窗(Hamming)
海明窗和汉宁窗很像,不同的是它有一部分是不连续的,被定义为
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047359354730.png)
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047355554509.png)
主瓣宽度为
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047344229321.png)
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047345583322.png)
,旁瓣峰值衰减为41dB
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047359528558.jpg)
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047354429387.jpg)
布莱克曼窗(Blackman)
这个窗函数和前两个窗函数很像,不过增加了升余弦的二次谐波分量,被定义为
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047356352025.png)
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047353086288.png)
主瓣宽度为
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047357058714.png)
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047351338718.png)
,旁瓣峰值衰减为57dB
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047363946110.jpg)
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047365592508.jpg)
凯泽窗(Kaiser)
这是一个非常有用的窗函数,它可以同时调整主瓣宽度与旁瓣宽度,这是其他窗函数不具备的,被定义为
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047362469896.jpg)
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047368046134.jpg)
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047369354249.png)
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047368310583.png)
是第一类零阶贝塞尔函数,
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047364420769.png)
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047368708902.png)
是用来调整窗函数性能的参数
本人使用的
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047369763927.png)
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047362624736.png)
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047366178131.jpg)
![](https://file2.kaopuke.com:8081/files_image/2023060300/202306030047368101031.jpg)
如何选择窗函数
选择窗函数可以参考前文中的窗函数设计法
先确定自己的需求,然后根据窗函数的极限性能,做出选择,最后再验证这个窗函数是否符合需求
本文中的代码已上传本人的 github
github参考书籍:
- Digital Signal Processing Using Matlab v4.0 John G. Proakis
- 《数字信号处理教程》 程佩青
推荐阅读
-
数字信号处理:FIR滤波器和IIR滤波器
FIR滤波器的加窗是什么
窗函数法是一种设计FIR滤波器的方法,FIR全称为Finite impulse response,即有限冲激响应滤波器。通带为的理想低通滤波器的系统函数为 反变换求它的冲激响应为 可以看出,这是一个sinc函数…
如何快速设计一个FIR滤波器(二)
如何学好《数字信号处理》?
最后
以上就是呆萌外套为你收集整理的几种常见窗函数及其特性几种常见窗函数的特性数字信号处理:FIR滤波器和IIR滤波器FIR滤波器的加窗是什么如何快速设计一个FIR滤波器(二)如何学好《数字信号处理》?的全部内容,希望文章能够帮你解决几种常见窗函数及其特性几种常见窗函数的特性数字信号处理:FIR滤波器和IIR滤波器FIR滤波器的加窗是什么如何快速设计一个FIR滤波器(二)如何学好《数字信号处理》?所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。