[数字信号处理]使用窗函数设计FIR滤波器
2013-05-24 14:25
127 查看
1.设计参数
首先,先明白几个概念。通带,阻带,过渡带,通带纹波和阻带纹波分别是什么?看下图,范围
称为通带,对于允许误差而言,
这个范围,称为通带纹波。同样的,对于范围
则是阻带,
这个范围,称为阻带纹波。中间的黑色部分是过度带。角频率
称为通带边缘频率,
角频率则被称为阻带起始频率。
通常的滤波器的设计,都会指明这几个参数,最后设计的滤波器,必须满足这几个参数。当然,这里举得例子是低通滤波器的,高通或者带通,就与之相反了。
2.理想FIR低通滤波器
首先,先由理想低通滤波器为出发点开始考虑。理想低通滤波器的频响如下所示这里的
,表示截止频率。
先由理想的滤波器出发,求其理想滤波器的单位冲击响应。得到了单位冲击响应,也就得到了滤波器的系数。这样,我们就设计出了一个理想的滤波器。这是一个完美的想法,那么开始动手吧,寻找他的单位冲击响应。运用离散时间的傅里叶逆变换,有如下的式子。
由此,我们得到了一个单位冲击响应的表达式(sinc是辛格函数),到这我们就可以设计出一个理想的滤波器了吗?好吧,让我们再确认一遍。第一,这个式子是离散的。对于单位冲击响应,本来就应该是离散的,没有错,很好,我们距离理想滤波器又近了一步。第二,这个式子所求出的单位冲击响应的个数,很不幸!个数是无限的。到这里,我们基本可以确定了,理想滤波器是实现不了的。
虽然理想滤波器是实现不了的,但是我们可以退一步,从无限的理想滤波器的单位冲击响应中,在选择一部分冲击响应,构成一个不太理想的,但又达到一定标准的滤波器。我们只能“将就”着使用这个不太理想的滤波器,那么接下来还有一个问题,我们要如何从无限的数列中选择出有限的一部分,从而达到我们的设计要求。
3.窗函数
首先,我们先考虑最简单的情况。对于理想单位冲击响应而言,其形状大概和一个高斯分布很像(当然,只是很像,n=0时候,单位冲击响应的值最大,由两边慢慢减少。当然,可能也出现负值。)!所以,我们为了能使得滤波器的性能接近理想滤波器,那么,我们选择其最主要的部分,也就是,值较大的部分。其余部分则放弃。根据之前的叙述,我们可以使用如下式子表示。这个式子确实可以帮助我们选择一部分有限的数列。而这个式子,被称为矩形窗。可以看出,N越大,性能越街进理想滤波器。这里N称为窗函数的长度。
这就是我们选定的窗口,然后我们把窗口函数加上,也就是加窗!其实也就一个乘法,如下所示。
这样,也就完成了一个加窗。
但是,在实际的实践过程中,很少用矩形窗的。其原因是,矩形窗的阻带衰减不够,仅仅只有21[dB]。于是,各种各样的窗口就被提出了。各有各的特点,在我们所学的初步的设计中,我们就仅仅看阻带衰减就够了。各种窗函数的性能如下。
================================================
窗函数 过渡带大小 阻带衰减
================================================
矩形窗 1.8π/N 21[dB]
汉宁窗 6.2π/N 44[dB]
汉明窗 6.6π/N 53[dB]
布莱克曼窗 11π/N 74[dB]
4.用窗函数实现一个FIR滤波器
以上说了很多有关于窗函数的原理,现在来整理一下设计的步骤。1.根据设计的规格,参数要求,我们选择一个适合的窗函数。这里主要我们还是看阻带衰减,阻带衰减要大于给定的值。一般,若没有给定阻带衰减,我们则需要通过通带纹波和阻带纹波去求,如下。
2.根据要求的通带边缘频率和阻带起始频率,计算过度区的大小,从而计算出窗函数的长度。
3.最后,根据窗函数和理想滤波器的单位冲击响应,计算出我们所需要的滤波器的单位冲击响应。
现在,我们来实战一下,假设我们需要设计如下滤波器。
规格中,没有给定阻带衰减,我们只能自己计算。
这里,阻带衰减为40.8[dB],我们选择的窗的阻带衰减不能比这个小,这里其实汉宁窗就可以做到。但我还是选择用汉明窗去做。然后,计算窗长度。
窗长度有了,计算单位冲击响应吧。
这样,我们就得到了一个FIR滤波器。下面是我们计算出来的这个滤波器的单位冲击响应。
5.写在最后的话
到此,我们“设计”出了一个滤波器,我们也顺利的得出了它的单位脉冲响应。但是,滤波器真的可以实现么?真的可以设计出这样一个滤波器么?
我觉得要拿着这个单位脉冲响应结果,去实际计算一下,才能发现,这样的滤波器是实现不了的!拿教科书上的话来说,这个滤波器是非因果的!
这个问题的解决方法,和窗函数的FIR设计代码的实现在下一节[数字信号处理]单位冲击响应的频响与FIR的实现代码(C语言)。
博客地址:http://blog.csdn.net/thnh169/
相关文章推荐
- 阻带窗函数[数字信号处理]使用窗函数设计FIR滤波器
- 使用窗函数设计FIR滤波器
- 使用窗函数设计FIR滤波器
- 最佳FIR滤波器设计-使用remezord,remez
- 语音信号滤波去噪——使用FLATTOPWIN设计的FIR滤波器
- FIR滤波器设计中的窗函数
- iOS应用开发中使用设计模式中的观察者模式的实例
- app后端设计(2)--xmpp的使用(2014.01.14更新)
- OC利用类别对类进行模块化设计和使用类别来调用私有方法
- Atitit. html 使用js显示本地图片的设计方案.doc
- Java中ThreadLocal的设计与使用
- OC开发 --- 连式语法API设计 (使用block)
- 使用 ASP.NET 创建的 XML Web 服务的设计指南
- 如何使用PowerDesugner设计数据库
- kafka入门:简介、使用场景、设计原理、主要配置及集群搭建
- 使用设计模式改善程序结构(一)
- 设计数据库时是否使用外键
- 在使用SSIS设计脚本时候,出现的在PostExecute之外不能锁定变量集合进行读写访问的问题的解决
- 使用ASP.NET从零开始制作设计网站之十三
- 高性能可扩展mysql(用户模块设计,分区表使用)