第6章FIR数字滤波器设计课件.ppt

上传人(卖家):晟晟文业 文档编号:3861319 上传时间:2022-10-19 格式:PPT 页数:92 大小:668.15KB
下载 相关 举报
第6章FIR数字滤波器设计课件.ppt_第1页
第1页 / 共92页
第6章FIR数字滤波器设计课件.ppt_第2页
第2页 / 共92页
第6章FIR数字滤波器设计课件.ppt_第3页
第3页 / 共92页
第6章FIR数字滤波器设计课件.ppt_第4页
第4页 / 共92页
第6章FIR数字滤波器设计课件.ppt_第5页
第5页 / 共92页
点击查看更多>>
资源描述

1、第第6章章 FIR数字滤波器设计数字滤波器设计 6.1 FIR数字滤波器原理数字滤波器原理 6.2 使用使用DSP Builder设计设计FIR数字滤波器数字滤波器 6.3 使用使用FIR IP Core设计设计FIR滤波器滤波器 6.1 FIR数字滤波器原理数字滤波器原理 对于一个FIR滤波器系统而言,它的冲激响应总是有限长的,其系统函数可以记为MkkkzbzH0)(其中M是FIR滤波器的零点数,即延时节数,为叙述简便,在本章中M被称为FIR滤器的阶数。最基本的FIR滤波器可用下式表示:10)()()(Liihinxny 其中x(n)是输入采样序列,h(i)是滤波器系数,L是滤波器的系数长度

2、,y(n)表示滤波器的输出序列。也可以用卷积来表示输出序列y(n)与x(n)、h(n)的关系。)()()(nhnxny 图6-1中显示了一个典型的直接I型4阶FIR滤波器,其输出序列y(n)满足下列等式:)3()3()2()2()1()1()()0()(nxhnxhnxhnxhnh图6-1 4阶FIR滤波器结构 z1x(n)h(0)y(n)z1z1h(1)h(2)h(3)在这个FIR滤波器中,总共存在3个延时节,4个乘法单元,一个4输入的加法器。如果采用普通的数字信号处理器(DSP Processor)来实现,只能用串行的方式顺序地执行延时、乘加操作,这不可能在一个DSP(指数字信号处理器)指

3、令周期内完成,必须用多个指令周期来完成。但是,如果采用FPGA来实现,就可以采用并行结构,在一个时钟周期内得到一个FIR滤波器的输出。6.2 使用使用DSP Builder设计设计FIR数字滤波器数字滤波器 使用DSP Builder可以方便地在图形化环境中设计FIR数字滤波器,而且滤波器系数的计算可以借助Matlab强大的计算能力和现成的滤波器设计工具来完成。6.2.1 3阶常系数FIR滤波器的设计 在此用以下示例来说明整个设计过程。假定一个3阶的FIR滤波器,其可以表示为)3()3()2()2()1()1()()0()(nxhnxhnxhnxhCnhq 其中:h(0)=63,h(1)=12

4、7,h(2)=127,h(3)=63,是量化时附加的因子。这里采用直接I型来实现该FIR滤波器。设计好的3阶直接I型FIR滤波器模型图可以参见图6-2。具体的新模型建立、模块调用过程可以参见第3章。图6-2 3阶FIR滤波器图中模块的参数作如下设置:xin模块:(Altbus)库:Altera DSP Builder中Bus Manipulation库参数“Bus Type”设为“signed Integer”参数“Node Type”设为“Input port”参数“number of bits”设为“8”yout模块:(Altbus)库:Altera DSP Builder中Bus Man

5、ipulation库参数“Bus Type”设为“signed Integer”参数“Node Type”设为“Output port”参数“number of bits”设为“8”Parallel Adder Subtractor模块:(Parallel Adder Subtractor)库:Altera DSP Builder中Arithmetic库“Add(+)Sub(-)”设为“+”Delay1、Delay2、Delay3模块:(Delay)库:Altera DSP Builder中Storage库参数“Depth”设为“1”参数“Clock Phase Selection”设为“1”

6、h0模块:(Gain)库:Altera DSP Builder中Arithemtic库参数“Gain Value”设为“63”参数“Map Gain Value to Bus Type”设为“Signed Integer”参数“Gate Value number of bits”设为“8”参数“Number of Pipeline Levels”设为“0”h1模块:(Gain)参数“Gain Value”设为“127”其余同h0模块 h2模块:(Gain)参数“Gain Value”设为“127”其余同h0模块 h3模块:(Gain)参数“Gain Value”设为“63”其余同h0模块 由于

7、FIR滤波器的系数已经给定,是一个常数,从图中看到,在DSP Builder中可以用Gain(增益)模块来实现的运算,用延时Delay模块来实现输入信号序列的延时。设计完3阶FIR滤波器模型后,就可以添加Simulink模块进行仿真了,如图6-3所示。图6-3 带仿真模块的3阶滤波器模型新增的仿真模块的参数作如下设置:Chirp Signal模块:(Chirp Signal)库:Simulink中Sources库参数“Initial Frequency(Hz)”设为“0.1”参数“Target time”设为“10”参数“Frequency at target time(Hz)”设为“1”参数

8、“Interpret vectors parameters as 1-D”选中Gain模块:(Gain)库:Simulink中Math Operations库参数“Gain”设为“127”参数“Multiplication”设为“Element wise(K.*u)”Scope模块:(Scope)库:Simulink中sinks库参数“Number of Axes”为“2”其中,Chirp Signal模块为线性调频信号发生模块,生成一个线性调频信号0.1 Hz1 Hz。在该模型仿真中,使用默认的仿真参数。仿真结果如图6-4所示。显然,一个线性调频信号通过3阶FIR滤波器后幅度发生了变化,频率

9、较高部分的幅度被衰减了。图6-4 FIR滤波器仿真结果 6.2.2 4阶FIR滤波器节的设计 上节介绍的是常系数FIR滤波器的示例。本节将设计一个系数可变的FIR滤波器节。对于直接I型的FIR滤波器(结构见图6-5),是可以级联的。也就是说,在滤波器系数可变的情况下,可以预先设计好一个FIR滤波器节,在实际应用中通过不断地调用FIR滤波器节,将其级联起来,用来完成多阶FIR滤波器的设计。当然,对于线性相位的FIR滤波器,我们可以采用改进后的滤波器结构,可以节省一半的乘法器。在这里,为了叙述方便,没有采用改进后的FIR结构。图6-5 直接I型FIR滤波器结构z1xinh(0)youtz1z1h(

10、1)h(2)x(n)z1h(k 1)h(k)x(n k)图6-6是一个直接I型的4阶FIR滤波器节的结构。为了使该滤波器节的调用更为方便,在xin输入后插入了一个延时单元,由3阶滤波器演变成4阶的,不过常系数项(系数项)恒为0。由于在通信应用中,FIR滤波器处理的往往是信号流,因而增加一个延时单元不会影响FIR滤波器处理的结果,只是系统延时增加了一个时钟周期。图6-6 直接I型4阶FIR滤波器节 z1xinh(1)y4outz1z1h(2)h(3)h(4)x(n1)z1 对于该FIR滤波器节,其系统函数可以用下式来表示:由于浮点小数在FPGA中实现比较困难,实现的代价太大,因而在DSP Bui

11、lder中不妨使用整数运算来实现,最后用位数舍取的方式得到结果。为了使参数可变,FIR滤波器系数、也作为输入端口。在本设计中输入序列的位宽设为9位。图6-7显示的就是一个设计好的4阶FIR滤波器节,与图6-2的常数FIR滤波器相比,这里用Product(乘法)模块代替了Gain(增益)模块。图6-7 直接I型4阶FIR滤波器节图6-7中相关模块的参数设置如下:xin、hn1、hn2、hn3、hn4模块:(Altbus)库:Altera DSP Builder中Bus Manipulation库参数“Bus Type”设为“signed Integer”参数“Node Type”设为“Input

12、 port”参数“number of bits”设为“9”yn模块:(Altbus)库:Altera DSP Builder中Bus Manipulation库参数“Bus Type”设为“signed Integer”参数“Node Type”设为“Output port”参数“number of bits”设为“20”xn4模块:(Altbus)库:Altera DSP Builder中Bus Manipulation库参数“Bus Type”设为“signed Integer”参数“Node Type”设为“Output port”参数“number of bits”设为“9”Paral

13、lel Adder Subtractor模块:(Parallel Adder Subtractor)库:Altera DSP Builder中Arithmetic库参数“Add(+)Sub(-)”设为“+”使用“Pipeline”参数“Clock Phaese Selectioon”设为“1”Delay、Delay1、Delay2、Delay3模块:(Delay)库:Altera DSP Builder中Storage库参数“Depth”设为“1”参数“Clock Phase Selection”设为“1”Product模块:(Product)库:Altera DSP Builder中Arit

14、hemtic库参数“Pipeline”设为“2”参数“Clock Phase Selection”设为“1”不选择“Use LPM”6.2.3 16阶FIR滤波器模型设计 利用以上设计的4阶FIR滤波器节可以方便地搭成阶直接I型FIR滤波器(注意:)。比如要实现一个16阶的低通滤波器,可以调用4个4阶FIR滤波器节来实现。1.设计4阶FIR滤波器节子系统 建立一个新的DSP Builder模型,复制上节的FIR4tap模型到新模型。按照第4章所示的方法由FIR4tap模型建立子系统(SubSystem),并对端口信号进行修改,把子系统更名为fir4tap,如图6-8所示。fir4tap的内部结

15、构如图6-9所示。图6-8 fir4tap子系统 图6-9 fir4tap子系统内部原理图 2.组成16阶FIR滤波器模型 复制4个fir4tap,并将它们衔接起来。前一级的输出端口x4接后一级的x输入端口,并附加上16个常数端口,作为FIR滤波器系数的输入。把4个子系统fir4tap的输出端口y连接起来,接入一个4输入端口的加法器,得到FIR滤波器的输出yout。注意:在作好子系统后,要按照第4章中所述的方式,修改其Mask参数Mask Type为“SubSystem AlteraBlockSet”。设计好的16阶FIR滤波器如图6-10所示。图6-10 16阶直接I型FIR滤波器模型16阶

16、直接I型FIR滤波器模型中,对新增加的模块作如下设置:xin模块:(Altbus)库:Altera DSP Builder中Bus Manipulation库参数“Bus Type”设为“signed Integer”参数“Node Type”设为“Input port”参数“number of bits”设为“9”yout模块:(Altbus)库:Altera DSP Builder中Bus Manipulation库参数“Bus Type”设为“signed Integer”参数“Node Type”设为“Output port”参数“number of bits”设为“20”x16模块:

17、(Altbus)库:Altera DSP Builder中Bus Manipulation库参数“Bus Type”设为“signed Integer”参数“Node Type”设为“Output port”参数“number of bits”设为“9”Parallel Adder Subtractor模块:(Parallel Adder Subtractor)库:Altera DSP Builder中Arithmetic库参数“Add(+)Sub(-)”设为“+”使用“Pipeline”参数“Clock Phaese Selectioon”设为“1”h0、h1、h2、h3、h4、h5、h6、

18、h7、h8、h9、h10、h11、h12、h13、h14、h15模块:(Delay)库:Altera DSP Builder中Bus Manipulation库参数“Bus Type”设为“Signed Integer”参数“number of bits”设为“9”6.2.4 使用MATLAB的滤波器设计工具1.滤波器指标若需要设计一个16阶的FIR滤波器(),给定的参数如下:低通滤波器 采样频率Fs为48 kHz,滤波器Fc为10.8 kHz 输入序列位宽为9位(最高位为符号位)在此利用MATLAB来完成FIR滤波器系数的确定。2.打开MATLAB的FDATool MATLAB集成了一套功能

19、强大的滤波器设计工具FDATool(Filter Design&Analysis Tool),可以完成多种滤波器的设计、分析和性能评估。点击MATLAB主窗口下方的“Start”(开始)按钮,按 图 6-1 1 选 择“T o o l B o x”“F i l t e r Design”“Filter Design&Analysis Tool(FDATool)”,打开FDATool,如图6-12所示。图6-11 打开FDATool 图6-12 FDATool界面3.选择Design FilterFDATool界面左下侧排列了一组工具按钮,其功能分别如下所述:滤波器转换(TransForm Fi

20、ler)设置量化参数(Set Quantization Parameters)实现模型(Realize Model)导入滤波器(Import Filter)设计滤波器(Design Filter)选择其中的按钮,进入设计滤波器界面,进行下列选择:滤波器类型(Filter Type)为低通(Lowpass);设计方法(Design Method)为FIR,采用窗口法(Window);滤波器阶数(Filter Order)定制为15;窗口类型为Kaiser,Beta为0.5;Fs为48 kHz,Fc为10.8 kHz。设置好后的界面见图6-13。注意:在滤波器阶数选择时,在此设置的是15阶,而不是

21、16阶!这是由于在前面设计的16阶FIR滤波器的常系数项。其系统函数可用下式来表示:图6-13 滤波器设计界面 显然上式可以写成:即可以看成是一个15阶的FIR滤波器的输出结果经过了一个单位延时单元。所以在FDATool中把它当成15阶FIR滤波器来计算参数。点击,让MATLAB计算FIR滤波器系数并作相关分析。4.滤波器分析 计算完FIR滤波器系数后,往往需要对设计好的FIR滤波器进行相关的性能分析,以便了解该滤波器是否满足设计要求。分析操作步骤如下:选择FDATool的菜单“Analysis”“Magnitude Response”,启动幅频响应分析。图6-14显示了滤波器的幅频响应图,x

22、轴为频率,y轴为幅度值(单位为dB)。在图的左侧列出了当前滤波器的相关信息:滤波器类型为Direct form FIR(直接I型FIR滤波器);滤波器阶数为15。注意:不是每种FIR滤波器设计方法计算出的滤波器都是直接I型结构的。如果在DSP Builder中设计的FIR滤波器为直接I型结构,那就必须保证在这里显示的FIR滤波器结构为“Direct form FIR”。图6-14 FIR滤波器的幅频响应 选择菜单“Analysis”“Phase Response”,启动相频响应分析。图6-15显示了滤波器的相频响应。由图可以看到设计的FIR滤波器在通带内其相位响应为线性的,即该滤波器是一个线性

23、相位的滤波器。图6-16显示了滤波器幅频特性与相频特性的比较。这可以通过菜单选择“Analysis”“Magnitude&Phase Response”来启动分析。选择菜单“Analysis”“Group Delay Response”,启动群延时分析,波形如图6-17所示。图6-15 FIR滤波器的相频响应 图6-16 幅频响应与相频响应的比较 图6-17 FIR滤波器的群延时 在菜单“Analysis”下还有一些分析:“Impulse Response”:冲激响应,见图6-18。“Step Response”:阶跃响应,见图6-19。“Pole/Zero Plot”:零极点图,见图6-20

24、。由于直接I型FIR滤波器只有零点,所以在图6-20中不存在极点。图6-18 FIR滤波器的冲激响应 图6-19 FIR滤波器的阶跃响应 图6-20 FIR滤波器的零极点 求出的FIR滤波器的系数可以通过选择菜单“Analysis”“Filter Coefficients”来观察,见图6-21。图中列出了FDATool计算的15阶直接I型FIR滤波器的部分系数。图6-21 FIR滤波器系数 5.量化 从图6-21可以看到,FDATool计算出的值是一个有符号小数,而在DSP Builder下建立的FIR滤波器模型需要一个整数作为滤波器系数。所以必须进行量化,并对得到的系数进行归一化。为此,点击

25、FDATool左下侧的工具按钮进行量化参数设置。在设置“Turn quantization on”前选择“”,如图6-22所示。在滤波器的设计指标中,已经提到FIR滤波器的输入位宽是9位,表示为有符号数。在图6-22中设置前4项的量化格式(Format)为“9 8”,表示量化后位宽为9位,绝对值为8位;设置后2项(乘积、乘积和)的量化格式为“18 16”。点击按钮,打开图6-23所示的对话框。在此量化优化设置对话框中选择相关的优化选项。图6-24中显示了量化后的部分系数值。注意在这里系数仍是用小数表示的,不同于量化前的系数,现在其二进制表示的位数已满足量化要求。图6-22 量化参数设置 图6-

26、23 量化优化设置对话框 图6-24 量化后的系数值 设计的FIR滤波器在量化后滤波器的性能会有所改变,其幅频响应、相频响应也有所变化。量化在带来实现方便的同时也带来了量化噪声,图6-26显示了量化带来的噪声分析。图6-25 量化后的幅频、相频响应 图6-26 量化后的噪声分析 6.导出滤波器系数 为导出设计好的滤波器系数,选择FDATool菜单的“File”“Export.”,打开导出(Export)对话框,如图6-27所示。在该窗口中,选择导出到工作区(Workspace)。这时滤波器系数就存入到一个一维变量Num中了,不过这时Num中的元素是以小数形式出现的:Num=-0.0742 0.

27、0234 0.1133 0.0117 -0.1758 -0.0977 0.3594 0.8281 0.8281 0.3594 -0.0977 -0.1758 0.0117 0.1133 0.0234 -0.0742 图图6-27 导出系数对话框导出系数对话框 现在若要在FIR滤波器模型中使用这些数据,还需要将它们转化为整数:在MATLAB主窗口的命令窗口中键入:Num*(28)得到:Num*(28)ans=Columns 1 through 10 -19 6 29 3 -45-25 92 212 212 92 Columns 11 through 16 -25-45 3 29 6 -19 7.

28、修改FIR滤波器模型添加参数 把计算出的系数逐个填入到FIR滤波器模型中,见图6-28。这样就完成了一个16阶直接I型FIR低通滤波器的设计。图6-28 16阶低通FIR滤波器 8.导出滤波器系数的另一种方法 按照上面介绍的导出滤波器系数的方法在FIR滤波器阶数较大时就不太方便,而且在设计要求有所变化时系数的修改极为不利。可以按照以下方法来导出:把FIR滤波器模型中的h1h16模块的参数“Constant Value(常数值)”设置为:Num(n)*(28)其中Num同上文所述,是FDATool的导出系数,n用具体的数字来代替,如h1模块用Num(1)*(28),h2模块用Num(2)*(28

29、)。6.2.5 16阶FIR滤波器的硬件实现 1.由Simulink模型转成VHDL 打开SingalCompiler,选定器件系列,把模型转成VHDL文件,具体操作步骤可以参见第3章。2.综合 在SignalCompiler中选择Quartus II进行综合,或者利用第三方综合工具,比如LeonardoSpectrum进行综合。图6-29显示了LeonardoSpectrum综合结果的部分RTL原理图。3.适配下载 如果采用Quartus II进行综合,在Quartus II中打开SignalCompiler建立的Quartus项目文件,选择具体器件,锁定管脚,完成适配后下载至FPGA开发板

30、中。若采用其它综合工具进行综合,适配流程请参见第4章。在FPGA开发板上加入高频信号源,验证FIR滤波器的滤波效果。图6-29 LeonardoSpectrum综合结果6.3 使用使用FIR IP Core设计设计FIR滤波器滤波器 对于一个面向市场和实际工程应用的系统设计,在开发速度和效率方面要求很高。然而对于一般的设计者,在短期内也不可能全面了解FIR滤波器(指在FPGA上实现)相关的优化技术,也没有必要了解过多的细节。另外,FIR滤波器的滤波系数的确定,即FIR滤波器的设计方法也是比较麻烦的,需要花费大量的精力和时间才能设计出在速度、资源利用、性能上都满足要求的FIR滤波器。另一方面,虽

31、然DSP Builder提供了大量的基本DSP模块,但是要了解用哪些模块可以构建一个高效的FIR滤波器仍然不是一件简单的事情。但是,如果采用设计好的FIR滤波器的IP核,几乎可以很容易地解决以上的问题。对于IP核,在速度、资源利用、性能上往往进行过专门的优化,还提供了相关的IP应用开发工具。Altera提供的FIR Compiler是一个结合Altera FPGA器件的FIR Filter Core,DSP Builder与FIR Compiler可以紧密地结合起来。DSP Builder提供了一个FIR Core的应用环境和仿真验证环境。6.3.1 FIR滤波器核与DSP Builder集成

32、 使用FIR Core之前,首先必须保证Matlab、DSP Builder、Quartus II以及IP核的本身,即FIR Compiler等工具安装正确。如果一切正常,我们可以在Simulink库管理器中看到“Altera MegaCore FIR Compiler”这个库,如图6-30所示。MegaCore是Altera的IP Core计划中的一个组成部分,FIR Compiler作为一个MegaCore,不附带在DSP Builder和Quartus II中,需要单独向Altera公司购买或申请试用版。现在最新的FIR Compiler的版本可以支持Quartus II和DSP Bui

33、lder。图6-30 FIR Core模块 6.3.2 FIR滤波器核的使用 1.调用FIR模块 在Simulink环境中新建一个模型,放置SignalCompiler模块和FIR模块(如图6-31)。注意:在DSP Builder中使用FIR Compiler时,需要有SignalCompiler的支持,所以在使用配置FIR模块时,必须放置SignalCompiler模块。图6-31 调用FIR Core 2.配置FIR滤波器核 假定需要设计一个带通的高阶FIR滤波器,设计指标如下:滤波器类型:带通(BandPass)采样频率:50 MHz 通带:24 MHz 阶数:64 双击新模型中的FI

34、R模块,打开FIR滤波器核的设置窗口,进行FIR滤波器参数的配置(参见图6-32)。图6-32 确定FIR滤波器系数 在这里,设计者只要把设计要求直接输入到对应的设置框,并点击“Apply”(应用)按钮,FIR滤波器的系数就自动计算完成,并在窗口中显示出设计的FIR滤波器的幅频特性。除了将设计指标输入外,还有一些选项可以设置,比如FIR滤波器设计时采用的窗函数类型,在这里我们设为Blackman窗。设计者不用关心这些窗口类型在FIR滤波器设计中的具体实现算法,只要观察不同的窗函数(Window)对FIR滤波器性能的影响,选定其中一种最符合设计性能要求的窗函数类型即可。点击“Apply”按钮后在

35、图中的右侧就显示了计算出的滤波器系数。注意在这里FIR滤波器的系数还没有被量化。设置完后点击“Next”按钮,进行下一步设置,完成系数的量化。FIR滤波器在FPGA上进行实现时,往往需要进行滤波器系数的量化,系数以整数的面目出现在图6-33中。可以选择合适的系数的位宽,同时在设置窗口中还显示了当前滤波器的幅频响应,可用以分析系数量化对FIR滤波器性能的影响。设计者应在满足设计要求的前提下尽可能地减少系数的位宽,以减少FPGA资源的耗费。图6-33 FIR滤波器系数分析和量化 3.FIR滤波器结构与分析 FIR Compiler可以帮助设计者完成FIR滤波器的结构分析并生成仿真时的仿真文件。图6

36、-35显示了具体实现的FIR滤波器和采用的滤波器结构,以及具体用什么系列的FPGA加以实现,或实现在FPGA的哪种资源中,某些选项可以更改。点击“Next”后进行FIR滤波器核的仿真分析,图6-36显示了在时域中表示的FIR滤波器的冲激响应。图6-37显示了阶跃响应。图6-34 FIR滤波器的I/O设置 图6-35 FIR滤波器结构图6-36 冲激响应图6-37 阶跃响应 FIR Compiler在进行FIR滤波器分析的同时可以帮助设计者生成对应的仿真文件,并以多种形式出现。比如仿真用的MATLAB文件,用于Quartus II的仿真激励文件,用于HDL仿真器的TestBench文件等。4.FIR滤波器核的硬件测试 设计好的FIR Core可以像普通的DSP Builder模块一样使用,与其它设计模块相连接,并在Simulink中进行仿真,直至使用SignalCompiler完成到VHDL的转化。最后,接着送入Quartus II进行编译、适配,完成后下载到FPGA开发板上进行硬件测试。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(第6章FIR数字滤波器设计课件.ppt)为本站会员(晟晟文业)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|