首先,先明白几个概念。通带,阻带,过渡带,通带纹波和阻带纹波分别是什么?看下图,
范围称为通带,对于允许误差而言,这个范围,称为通带纹波。同样的,对于范围则是阻带,这个范围,称为阻带纹波。中间的黑色部分是过度带。角频率称为通带边缘频率,角频率则被称为阻带起始频率。
通常的滤波器的设计,都会指明这几个参数,最后设计的滤波器,必须满足这几个参数。当然,这里举得例子是低通滤波器的,高通或者带通,就与之相反了。
首先,先由理想低通滤波器为出发点开始考虑。理想低通滤波器的频响如下所示
先由理想的滤波器出发,求其理想滤波器的单位冲击响应。得到了单位冲击响应,也就得到了滤波器的系数。这样,我们就设计出了一个理想的滤波器。这是一个完美的想法,那么开始动手吧,寻找他的单位冲击响应。运用离散时间的傅里叶逆变换,有如下的式子。
由此,我们得到了一个单位冲击响应的表达式(sinc是辛格函数),到这我们就可以设计出一个理想的滤波器了吗?好吧,让我们再确认一遍。第一,这个式子是离散的。对于单位冲击响应,本来就应该是离散的,没有错,很好,我们距离理想滤波器又近了一步。第二,这个式子所求出的单位冲击响应的个数,很不幸!个数是无限的。到这里,我们基本可以确定了,理想滤波器是实现不了的。
虽然理想滤波器是实现不了的,但是我们可以退一步,从无限的理想滤波器的单位冲击响应中,在选择一部分冲击响应,构成一个不太理想的,但又达到一定标准的滤波器。我们只能“将就”着使用这个不太理想的滤波器,那么接下来还有一个问题,我们要如何从无限的数列中选择出有限的一部分,从而达到我们的设计要求。
首先,我们先考虑最简单的情况。对于理想单位冲击响应而言,其形状大概和一个高斯分布很像(当然,只是很像,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]
以上说了很多有关于窗函数的原理,现在来整理一下设计的步骤。
1.根据设计的规格,参数要求,我们选择一个适合的窗函数。这里主要我们还是看阻带衰减,阻带衰减要大于给定的值。一般,若没有给定阻带衰减,我们则需要通过通带纹波和阻带纹波去求,如下。
2.根据要求的通带边缘频率和阻带起始频率,计算过度区的大小,从而计算出窗函数的长度。
3.最后,根据窗函数和理想滤波器的单位冲击响应,计算出我们所需要的滤波器的单位冲击响应。
现在,我们来实战一下,假设我们需要设计如下滤波器。
规格中,没有给定阻带衰减,我们只能自己计算。
这里,阻带衰减为40.8[dB],我们选择的窗的阻带衰减不能比这个小,这里其实汉宁窗就可以做到。但我还是选择用汉明窗去做。然后,计算窗长度。
窗长度有了,计算单位冲击响应吧。
这样,我们就得到了一个FIR滤波器。下面是我们计算出来的这个滤波器的单位冲击响应。
到此,我们“设计”出了一个滤波器,我们也顺利的得出了它的单位脉冲响应。
但是,滤波器真的可以实现么?真的可以设计出这样一个滤波器么?
我觉得要拿着这个单位脉冲响应结果,去实际计算一下,才能发现,这样的滤波器是实现不了的!拿教科书上的话来说,这个滤波器是非因果的!
这个问题的解决方法,和窗函数的FIR设计代码的实现在下一节[数字信号处理]单位冲击响应的频响与FIR的实现代码(C语言)。
博客地址:http://blog.csdn.net/thnh169/