zoukankan      html  css  js  c++  java
  • 【转】FIR学习1

    转至:http://www.cnblogs.com/northking/p/4432317.html

    FIR数字滤波器的设计要点


    在信号处理中,滤波器的设计是非常重要的一个环节。滤波器的作用是什么?滤波器的作用就是把噪音去掉,把感兴趣的信号从大量信号中提取出来。

    滤波器分两大类,一种是模拟(ANALOG)滤波器,另外一种是数字(DIGITAL)滤波器。模拟(ANALOG)滤波器是由模拟电路构成,而数字(DIGITAL)滤波器是由数字处理集成电路模块(DSP)和相应的软件构成。

    数字(DIGITAL)滤波器是可编程的,所以相对于模拟(ANALOG)滤波器有很多优点。其中最大的优点是通过改变程序或改变程序变量就可设计出不同特点的滤波器,而且数字滤波器可以精确的处理低频率信号。

    数字(DIGITAL)滤波器又分为两大类,一类是FIR(Finite Impulse Response)数字滤波器,也就是我们平时说的有限冲激响应滤波器。另一类是IIR(Infinite Impulse Response)数字滤波器,也就是我们平时说的无限冲激响应滤波器。

    FIR数字滤波器和IIR数字滤波器的区别在于:前者是非递归(No-Recursive)型,后者是递归(Recursive)型的数字滤波器。也就是说FIR数字滤波器的输出只和当前及以前的输入信号有关。而IIR数字滤波器的输出不仅和当前及以前的输入信号有关,而且还和以前的输出信号有关。即,IIR数字滤波器还采用了以前的输出作为反馈来得到当前的输出。

    FIR数字滤波器和IIR数字滤波器比较,最大的优点在于FIR数字滤波器的稳定性和它的线性相位特性。稳定性容易理解,那么什么是线性相位特性?线性相位特性就是对于延时输入信号,其输出并不扭曲其相位。

    在FIR数字滤波器的设计中,另外还有个非常重要的概念,那就是FIR数字滤波器的阶数(ORDER)。什么是FIR数字滤波器的阶数呢?我们把用来计算当前输出所采用的输入信号个数叫着FIR数字滤波器的阶数。譬如说,当前时间以前的输入信号如果有10个,我们用了其中最近的2个信号来计算当前输出,那么这个FIR数字滤波器的阶数就是2。

    设计FIR数字滤波器的方法大致归纳为三类:

    • 窗函数法
    • 频率取样法
    • 优选法

    这里我们主要讨论最常用的窗函数法。

    前面我们提到,什么是滤波器?滤波器就是把噪音去掉,把感兴趣的信号,或者说我们感兴趣的频率信号,从大量信号中提取出来。这如果要用数学语言来表达,那么就是用一个期望的频率特征函数H(f)去乘以输入信号频率X(f)。我们知道,输入信号是有时间性的,它是随着时间的改变而改变。就是说信号是发生在时间空间(时空,TIME DOMAIN)里的,那么,“期望的频率特征函数H(f)去乘以输入信号频率X(f)”这个数学表达在时间空间里是怎样的一个表达式呢?根据傅立叶变换定律,“期望的频率特征函数H(f)去乘以输入信号频率X(f)”在时间空间里就是“这个期望的频率特征函数H(f)在时间空间里的表达式h(t)去和输入信号x(t)做一个卷积”。如下图所示:

    FIR数字滤波器的设计要点




    注:傅立叶,法国数学家、物理学家。9岁父母双亡,被当地教堂收养。12岁由一主教送入地方军事学校读书。17岁回乡教数学,1794到巴黎,成为高等师范学校的第一批学员,次年到巴黎综合工科学校执教。后来当选为科学院院士。

    注:卷积,两个函数f(x)和h(x)之间的一种运算,卷积是f(x)与经过翻转和平移的h(x)的重叠部分的累积,如下图所示:

    FIR数字滤波器的设计要点



    为进一步理解以上的FIR数字滤波器的数学表达,我们将举例来说明。我们以最简单的FIR数字滤波器“移动平均数”为例子来说明。

    “移动平均数”就是按我们事先设定的信号个数将输入信号加以平均。譬如,如果我们按每4个信号就做一次平均,那么这个4点的“移动平均数”滤波器就如下图所示:

    FIR数字滤波器的设计要点

    下图是经过11点和51点“移动平均数”滤波器过滤的信号图:

    FIR数字滤波器的设计要点

    “移动平均数”滤波器的频率响应如下图所示:

    FIR数字滤波器的设计要点

    如上图所示,随着点数的增加,滚降(ROLLOFF)变陡了,但对旁瓣(sidelobe,衰减部分)的高低影响不大。但是如果我们考虑对滤波器的每个系数采用不同的权重(加权),而不是像“移动平均数”滤波器那样,用相同的权重(1/4,对4点“移动平均数”滤波器来说),那么可以期待旁瓣的大小会大大的降低。

    对系数采用不同权重的滤波器,我们可以用下面的数学公式来表达:

    FIR数字滤波器的设计要点


    这就是FIR数字滤波器的一般表达式。

    下面我们以设计一个低通滤波器(LPF)为例,来说明FIR数字滤波器窗函数法的设计要点。

    假设采样频率为Fs,滤波器的截止(CUT-OFF)频率为Fco,滤波器的长度为Nfir,那么用图形表示出来就如下图所示:
    FIR数字滤波器的设计要点

    假设Nfir=128,Nco=13 注:Fco=Fs*(Nco/Nfir),h(t)的计算为:

    FIR数字滤波器的设计要点

    那么这个低通滤波器的有限冲激响应就如下图所示:

    FIR数字滤波器的设计要点

    这样我们就设计出了一个FIR低通滤波器。为了检测这个滤波器的性能,我们用信号发生器产生包含从直流到频率为采样频率的一组信号,如下图所示:

    FIR数字滤波器的设计要点


    我们把这组信号与前面设计的FIR低通滤波器做卷积运算,并将结果(输出)进行快速傅立叶变换(FFT),得到的频率响应如下图所示:

    FIR数字滤波器的设计要点



    其中滤波器的截止频率Fco=8192*13/128=832。从上图可以看出滚降的“肩”在800左右,与832相当接近。但是,通带和阻带的波动相当明显,而且阻带的第一个旁瓣抑制只有-17dB(第一个旁瓣比较大),所以这个滤波器并不理想。为了改善这个滤波器的性能,我们考虑采用边缘渐趋为零的窗函数。为什么要采用边缘渐趋为零的窗函数?那是因为FIR滤波器的特征就是边缘应该渐趋为零。下面是几个常用的窗函数:

    FIR数字滤波器的设计要点

    它们的形状如下图所示:

    FIR数字滤波器的设计要点


    将这些窗函数应用于前面的FIR低通滤波器,那么我们就得到加权后的FIR低通滤波器,如下图所示:

    FIR数字滤波器的设计要点

    我们分别把经过加权后的FIR低通滤波器与前面那组信号做卷积运算,并将结果(输出)进行快速傅立叶变换(FFT),得到的频率响应如下图所示:

    FIR数字滤波器的设计要点



    而下图是这些加权后的FIR低通滤波器的增益和相位响应:

    FIR数字滤波器的设计要点


    从上图可见,对低通滤波来说,Blackman-Harris FIR具有极好的通带阻带过渡和阻带旁瓣抑制。对低通滤波来说,这几个滤波器的相位响应都完全是线性的。

    归纳起来:
    • 选择适当的窗函数;
    • 窗口长度Nfir可以为任意值,但应为2的n次方;
    • Nfir愈大,滚降愈陡,但(卷积)运算量会大大增加,所以应选择适当的Nfir;
    • 调整窗口长度Nfir可以控制过渡带的宽度,但不能减小尖峰的大小;
    • 改变窗的形状可以减小带内波动和加大阻带衰减;
    • FIR滤波器所需的计算时间加上系统所需的额外时间应该小于采样的间隔时间;
    以上我们是以低通FIR滤波器为例,对设计高通或带通FIR滤波器,设计要点完全一样。
  • 相关阅读:
    Unix/Linux环境C编程入门教程(23) 字符数字那些事儿
    Unix/Linux环境C编程入门教程(22) C/C++如何获取程序的运行时间
    如何定义函数模板
    Unix/Linux环境C编程入门教程(21) 各个系统HelloWorld跑起来效果如何?
    为什么使用模板
    CC++初学者编程教程(16) 搭建Xcode cocos2dx开发环境
    delete noprompt archivelog 报错ORA-00245,RMAN-08132
    RMAN-03002、RMAN-06059
    RAC RMAN 备份 RMAN-03009 ORA-19504 ORA-27040 RMAN-06012 channel c3 not allocated 错误分析
    RMAN备份到NFS,报错 ORA-27054
  • 原文地址:https://www.cnblogs.com/houxiliang/p/9124948.html
Copyright © 2011-2022 走看看