zoukankan      html  css  js  c++  java
  • 阻带窗函数[数字信号处理]使用窗函数设计FIR滤波器

    在写这篇文章之前,xxx已经写过了几篇关于改阻带窗函数主题的文章,想要了解的朋友可以去翻一下之前的文章

        

    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.写在最后的话

               到此,我们“计划”出了一个滤波器,我们也顺遂的得出了它的单位脉冲响应。

               但是,滤波器真的可以实现么?真的可以计划出这样一个滤波器么?

               我觉得要拿着这个单位脉冲响应结果,去现实盘算一下,才能发明,这样的滤波器是实现不了的!拿教科书上的话来讲,这个滤波器是非因果的!

               

        

            

    文章结束给大家分享下程序员的一些笑话语录: 系统程序员
      1、头皮经常发麻,在看见一个蓝色屏幕的时候比较明显,在屏幕上什幺都看不见的时候尤其明显;
      2、乘电梯的时候总担心死机,并且在墙上找reset键;
      3、指甲特别长,因为按F7到F12比较省力;
      4、只要手里有东西,就不停地按,以为是Alt-F、S;
      5、机箱从来不上盖子,以便判断硬盘是否在转;
      6、经常莫名其妙地跟踪别人,手里不停按F10;
      7、所有的接口都插上了硬盘,因此觉得26个字母不够;
      8、一有空就念叨“下辈子不做程序员了”;
      9、总是觉得9号以后是a号;
      10、不怕病毒,但是很害怕自己的程序;

    --------------------------------- 原创文章 By
    响应和单位
    ---------------------------------

  • 相关阅读:
    从Pycharm说起
    前端工程师小A学习JS的旅程
    模板引擎开发(一)
    Bootstrap01
    Passbook详解与开发案例
    DLL文件知多少?
    C#中的索引器的简单理解和用法
    python 的列表遍历删除
    Node.js与Golang使用感受与小结1
    解决设计中的两难问题
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3098176.html
Copyright © 2011-2022 走看看