您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > 第3节FIR数字滤波器设计
FIR滤波器应用Matlab/DSPBuilder可以对多种类型的电子线路模块和系统进行建模、仿真和硬件实现。使用Matlab/DSPBuilder进行DSP开发可以快速、高效地完成从算法模型的验证到硬件实现的完整的流程。最终在FPGA中的硬件实现可以独立地成为一个功能模块,也可以成为SOPC系统的一个组成部分,成为NiosII嵌入式系统的自定制指令或者硬件加速模块。FIR(FiniteImpulseResponse,有限冲激响应)滤波器在数字通信系统中有广泛的应用,如低通滤波、通带选择、抗混叠、抽取和内插等。DSPBuilder中FIR滤波器可以使用FIR的Megacore,即FIR的IP来设计,也可以使用模块来自己构建,重点介绍基于FIR的IP来设计FIR滤波器的方法。5.4.1FIR滤波器原理在这个滤波器中,存在3个延时单元,4个乘法器,一个4输入的加法器。如果采用数字信号处理器,如TI或AD公司的DSPProcessor来实现,只能用串行的方式顺序地执行延时、乘加操作,要用多个指令周期才能完成。采用FPGA来实现,则是并行的运算,在一个时钟周期就能得到FIR滤波器的输出。5.4.216阶FIR滤波器的设计对于直接I型的16阶或更高阶的FIR滤波器通常低阶的滤波器节进行级联而构成。这里设计一个4阶FIR滤波器节,然后通过将其级联来构成16阶的FIR滤波器。直接I型4阶FIR滤波器节的结构如图5-43所示,可以看到,其结构相对于上图的3阶FIR滤波器是在输入信号插入了一个延时单元,从而将3阶滤波器编程4阶的,但h(0)的值为0。将h(0)的值设成零,目的是为了在组成高阶的FIR滤波器时,进行滤波器节的级联。由于浮点小数在FPGA中实现比较困难,需要很多的资源。这里采用定点计算,为了省去小数点定标,使用整数运算来实现,如同5.2节正弦波发生器的情况一样,正弦查找表存储的是整数值。为了使滤波器参数可变,将FIR滤波器系数h(1)、h(2)、h(3)和h(4)也作为输入端口。图5-44为直接I型4阶FIR滤波器在Simulink中的模型。图5-44中的各模块的参数设置如下:xn、h1、h2、h3、h4模块:Altbus库:AlteraDSPBuilder中的IO&Bus子库BusType:SignedIntegerNodeType:InputPortNumberofbits:9yn模块:Altbus库:AlteraDSPBuilder中的IO&Bus子库BusType:SignedIntegerNodeType:OutputPortNumberofbits:20xn4模块:Altbus库:AlteraDSPBuilder中的IO&Bus子库BusType:SignedIntegerNodeType:OutputPortNumberofbits:9ParallelAdderSubtractor模块:ParallelAdderSubtractor库:AlteraDSPBuilder中的Arithmetic子库Add(+)Sub(-):++++Pipeline:选中ClockPhaseSelection:1Delay、Delay1、Delay2和Delay3模块:Delay库:AlteraDSPBuilder中的Storage子库Depth:1ClockPhaseSelection:1Product、Product1、Product2和Product3模块:Product库:AlteraDSPBuilder中的Storage子库Pipeline:0ClockPhaseSelection:1UseLPM:不选中利用直接I型4阶的FIR滤波器节可以方便地构成4×n阶的直接I型FIR滤波器(h(0)=0)。这里利用4个4阶直接I型的FIR滤波器来构建一个16阶的直接I型FIR滤波器。为了设计的方便,将上面设计的4阶FIR滤波器生成一个子系统,双击即可打开生成的子系统,生成的子系统相对于上面的模型文件只是多了5个输入端口和两个输出端口,如图5-45所示,对端口名进行修改,把子系统更名为fir4tap,如图5-46所示。在Simulink中新建一个模型,设计一个16阶的FIR滤波器需要级联4个4阶FIR滤波器,为此复制4个fir4tap子系统,并将它们级联起来,前一级的输出端口x4接后一级的x输入端口,添加16个常数端口,作为FIR滤波器系数的输入。把4个子系统的输出端口y接入一个4输入端口的加法器,加法器的输出为16阶FIR滤波器的输出yout。图5-4716阶直接I型FIR滤波器模型中,新增加的模块的参数如下:xn模块:Altbus库:AlteraDSPBuilder中的IO&Bus子库BusType:SignedIntegerNodeType:InputPortNumberofbits:9yout模块:Altbus库:AlteraDSPBuilder中的IO&Bus子库BusType:SignedIntegerNodeType:OutputPortNumberofbits:20x16模块:Altbus库:AlteraDSPBuilder中的IO&Bus子库BusType:SignedIntegerNodeType:OutputPortNumberofbits:9ParallelAdderSubtractor模块:ParallelAdderSubtractor库:AlteraDSPBuilder中的Arithmetic子库Add(+)Sub(-):++++Pipeline:选中ClockPhaseSelection:1h1~h16模块:constant库:AlteraDSPBuilder中的IO&Bus子库BusType:SignedIntegerNumberofbits:9在图5-47中对h1~h16的值都设成了0,滤波器的系数应该是根据具体的应用的要求来计算和确定的。5.4.3使用Matlab的滤波器设计工具进行滤波器系数的计算滤波器的系数计算可以使用Matlab的滤波器设计工具FDATool来计算。FDATool即为FilterDesign&AnalysisTool,可以完成多种滤波器的设计、分析和性能评估。假设要设计一个截止频率为10.8KHz的低通滤波器,采样频率为48KHz。使用FDATOOL进行滤波器设计的步骤如下:(1)启动Matlab的FDATOOL。单击Matlab窗口下方的Start按钮,然后→Toolboxes→FilterDesign→FilterDesign&AnalysisTool,即可启动FDATool。也可以在Matlab的命令窗口中执行fdatool来启动FDATool。FDATool启动后出现如图5-48所示的窗口。(2)滤波器我设计。启动FDATool后的界面就是滤波器的设计界面,如图5-48,要从其它的界面进入滤波器的设计界面可以单击FDATool窗口左下侧的一列工具按钮中的最下一个图标filterdesign,即可进入滤波器设计界面。在该界面中进行滤波器的设计,首先选择ResponseType(响应类型)为Lowpass(低通),然后选择DesignMethod(设计方法)为FIR(有限冲激相应),在FIR的下拉窗口中选择window(窗口法),FilterOrder(滤波器阶数)指定为15,window选为Keiser,Beta值为0.5,Fs(采样频率)为46KHz,Fc(截止频率)为10.8KHz。这里要注意的是,滤波器的阶数是15而非16,是因为设计的16阶FIR滤波器的滤波器系数h(0)等于0,从结构上,可以看成一个15阶的FIR滤波器前面加了一个延时单元。从系统函数来看,系统函数可以写成可看成是,输入延时了一个单元进入了15阶的滤波器或是滤波器的输出再经过一个延时单元。(3)滤波器设计和性能分析。进行完上面的设置后,点击DesignFilter按钮(图5-48底部正中),FDATool根据用户的设置进行滤波器的设计,得到滤波器的系数。在设计完成之后可以对滤波器进行性能的分析,考察是否满足设计要求。FDATool可以进行多种性能分析,这里介绍几种主要的分析。1.幅频响应(MagnitudeResponse)选择Analysis菜单→MagnitudeResponse,即启动了幅频响应分析。图5-49显示的是滤波器的幅频响应曲线,横轴为频率,单位为KHz,纵轴为幅度,单位为dB。2.相频响应(PhaseResponse)选择Analysis菜单→PhaseResponse,即启动了相频响应分析。图5-50显示的即为滤波器的相频响应曲线。可以看到在通带内,相位的响应是线性的,即该滤波器是是一个线性相位滤波器。3.相幅联合分析(Magnitude&PhaseResponses)通常要对幅度和相位进行同时的考察,采用相幅联合分析,选择Analysis菜单→Magnitude&PhaseResponse,即可启动相幅联合分析。图5-51显示的即为滤波器的相幅联合响应曲线。4.冲激响应(ImpulseResponse)选择Analysis菜单→ImpulseResponse,即启动了阶跃响应分析。图5-52即为滤波器的冲激响应曲线。
本文标题:第3节FIR数字滤波器设计
链接地址:https://www.777doc.com/doc-2194164 .html