第7章IIR数字滤波器设计.ppt

上传人:本田雅阁 文档编号:2567187 上传时间:2019-04-09 格式:PPT 页数:69 大小:554.01KB
返回 下载 相关 举报
第7章IIR数字滤波器设计.ppt_第1页
第1页 / 共69页
第7章IIR数字滤波器设计.ppt_第2页
第2页 / 共69页
第7章IIR数字滤波器设计.ppt_第3页
第3页 / 共69页
第7章IIR数字滤波器设计.ppt_第4页
第4页 / 共69页
第7章IIR数字滤波器设计.ppt_第5页
第5页 / 共69页
点击查看更多>>
资源描述

《第7章IIR数字滤波器设计.ppt》由会员分享,可在线阅读,更多相关《第7章IIR数字滤波器设计.ppt(69页珍藏版)》请在三一文库上搜索。

1、第7章 IIR数字滤波器设计,7.1 IIR滤波器原理 7.2 使用DSP Builder设计IIR滤波器 7.3 在Quartus II中使用IIR滤波器IP核,7.1 IIR滤波器原理,IIR滤波器一般采用递归方式来实现。也就是说,滤波器当前输出是输入序列和以前各输出值、的函数,这可以用下列差分方程来表示:,(7-1),其中MN,N是IIR滤波器的阶数。 相应地,IIR滤波器的系统函数可以表示为,(7-2),在上一章已经提及到,FIR滤波器的系统函数只有零点。而IIR滤波器除了具有极点以外,一般还存在零点。由于极点的存在,IIR滤波器用递归结构来实现较为简单。实现IIR滤波器的基本结构共有

2、三中:直接型、级联型和并联型。下面简单介绍前两种IIR滤波器的结构。,1. 直接型 利用公式(7-2),可以直接导出直接I型的IIR滤波器结构,可用下式来表示:,(7-3),可以看出, 和反馈环节 中的延时单元不能共用,需要个延 时单元。为了减少延时单元,对于线性系统,公式(7-3)也可以写成:,由此可以导出直接型的滤波器结构。图7-1表示了一个直接型IIR滤波器的结构,该滤波器的阶数是2阶,共存在两个反馈环节。,图7-1 直接型IIR滤波器结构,2. 级联型 对式(7-2)的分子、分母进行因式分解,由于中的系数都为实数,的极、零点只可能是实数或者复共轭对,对于复共轭对因子,可以复合成二阶因子

3、:,式中系数都为实数。如果把实数因子(一阶因子)看成是二次项系数为0的二阶因子,则上式可以写成:,其中,由此可见,是一个2阶的IIR滤波器,N阶IIR滤波器可以看成是由多个2阶IIR滤波器级联而成的,即IIR滤波器可以采用下列结构来表示,也就是级联型结构(见图7-2):,图7-2 级联型IIR滤波器结构,7.2 使用DSP Builder设计IIR滤波器,7.2.1 4阶直接型IIR滤波器设计 在此需要设计一个4阶IIR滤波器。给定滤波器的系统函数如下:,即滤波器系数为 a0=1 b0=0.05 a1= -1.95 b1=0.20 a2=1.74 b2=0.31 a3= -0.72 b3=0.

4、20 a4=0.12 b4=0.05 可以看出,这是一个4阶IIR滤波器,我们采用直接型结构来实现该滤波器,其具体结构可由信号流图(见图7-3)来表示。,图7-3 直接型4阶IIR滤波器信号流图,在DSP Builder中,建立一个新模型,按照图7-3调用DSP Builder模块进行设计。设计完的4阶IIR滤波器模型如图7-4所示。,图7-4 4阶IIR滤波器模型,该模型中各个模块的参数设置如下: X模块:(Altbus) 库:Altera DSP Builder中Bus Manipulation库 参数“Bus Type”设为“signed Fractional”(有符号小数) 参数“No

5、de Type”设为“Input port” 参数“number of bits.”设为“2” 参数“.number of bits”设为“8”,Y模块:(Altbus) 库:Altera DSP Builder中Bus Manipulation库 参数“Bus Type”设为“signed Fractional” 参数“Node Type”设为“Output port” 参数“number of bits.”设为“4” 参数“.number of bits”设为“23” BusConversion模块:(BusConversion) 库:Altera DSP Builder中Bus Mani

6、pulation库,参数“Input Bus Type”设为“signed Fractional” 参数“Input number of bits.”设为“4” 参数“Input .number of bits”设为“23” 参数“Output Bus Type”设为“signed Fractional” 参数“Output number of bits.”设为“2” 参数“Output .number of bits”设为“8” FeedBack Adder模块:(Parallel Adder Subtractor) 库:Altera DSP Builder中Arithmetic库 参数“N

7、umber of Inputs”设为“2” 参数“Add(+)Sub(-)”设为“+ -”,FeedBack Adder1模块:(Parallel Adder Subtractor) 库:Altera DSP Builder中Arithmetic库 参数“Number of Inputs”设为“4” 参数“Add(+)Sub(-)”设为“+” FeedForward Adder模块:(Parallel Adder Subtractor) 库:Altera DSP Builder中Arithmetic库 参数“Number of Inputs”设为“5” 参数“Add(+)Sub(-)”设为“+

8、”,Delay、Delay1、Delay2、Delay3模块:(Delay) 库:Altera DSP Builder中Storage库 参数“Depth”设为“1” 参数“Clock Phase Selection”设为“1” A1、A2、A3、A4、B0、B1、B2、B3、B4模块:(Gain) 库:Altera DSP Builder中Arithemtic库 参数“Gain Value”按照设计要求中指定的系数设置(直接输入) 参数“Map Gain Value to Bus Type”设为“Signed Fraction” 参数“Gain value number of bits.”设

9、为“2” 参数“.Gain value number of bits”设为“12” 参数“Number of Pipeline Levels”设为“0”,另外,用于Simulink仿真的模块的参数设置如下: Pulse Generator模块:(Pulse Generator) 库:Simulink中Sources库 参数“Pulse type”设为“Sample based” 参数“Amplitude”设为“1” 参数“Period(number of samples)”设为“1000” 参数“Pulse width(number of samples”设为“1” 参数“Phase dela

10、y (number of samples)”设为“10” 参数“Sample time”设为“1” “Interpret vector parameters as 1-D”设为“”,Scope模块:(Scope) 库:Simulink中sinks库 参数“Number of Axes”为“2” 在这个实现中,使用了增益(Gain)模块来完成常数系数的乘法。这里使用了有符号小数(Signed Fractional)来简化IIR滤波器系数的代入过程。值得注意的是,参数“number of bits.”设置的是整数部分的位宽,其中最高位为符号位;参数“.number of bits”设置了小数部分的

11、位宽。假如把参数“number of bits.”设置为“2”,那就意味着该小数的整数部分只能是0、1、-1、-2(分别对应00、01、10或10、10),而且整数部分要为-2,必须是小数部分为全零。,建立IIR滤波器模型后就可以进行仿真了。Simulink仿真模块“Pulse Generator”(脉冲发生器)模拟了一个单位冲激函数。通过“Scope”模块来观察该直接型IIR滤波器的冲激响应。 修改Simulink的仿真参数设置,设置“Stop time”仿真停止时间为“50”,“Solver options”中“Type”为“Fixed-Step”。启动仿真。仿真结果见图7-5。,图7-5

12、 IIR滤波器仿真结果,7.2.2 4阶级联型IIR滤波器设计 1. 建立模型 参照图7-2,建立一个4阶的级联型IIR滤波器模型,该模型共由两节2阶直接型IIR滤波器构成,见图7-6。,图7-6 4阶级联型IIR滤波器,模型中各个模块的参数设置如下: X模块:(Altbus) 库:Altera DSP Builder中Bus Manipulation库 参数“Bus Type”设为“signed Fractional”(有符号小数) 参数“Node Type”设为“Input port” 参数“number of bits.”设为“2” 参数“.number of bits”设为“8”,Y模

13、块:(Altbus) 库:Altera DSP Builder中Bus Manipulation库 参数“Bus Type”设为“signed Fractional” 参数“Node Type”设为“Output port” 参数“number of bits.”设为“4” 参数“.number of bits”设为“23” BusConv模块:(BusConversion) 库:Altera DSP Builder中Bus Manipulation库 参数“Input Bus Type”设为“signed Fractional” 参数“Input number of bits.”设为“4”,

14、参数“Input .number of bits”设为“18” 参数“Output Bus Type”设为“signed Fractional” 参数“Output number of bits.”设为“2” 参数“Output .number of bits”设为“15”,BusConv1、BusConv4模块:(BusConversion) 库:Altera DSP Builder中Bus Manipulation库 参数“Input Bus Type”设为“signed Fractional” 参数“Input number of bits.”设为“3” 参数“Input .number

15、 of bits”设为“15” 参数“Output Bus Type”设为“signed Fractional” 参数“Output number of bits.”设为“2” 参数“Output .number of bits”设为“15”,BusConv2、BusConv3、BusConv5模块:(BusConversion) 库:Altera DSP Builder中Bus Manipulation库 参数“Input Bus Type”设为“signed Fractional” 参数“Input number of bits.”设为“4” 参数“Input .number of bit

16、s”设为“25” 参数“Output Bus Type”设为“signed Fractional” 参数“Output number of bits.”设为“2” 参数“Output .number of bits”设为“15”,FeedBackAdder、FeedBackAdder2模块:(Parallel Adder Subtractor) 库:Altera DSP Builder中Arithmetic库 参数“Number of Inputs”设为“2” 参数“Add(+)Sub(-)”设为“+ -” FeedBackAdder1、FeedBackAdder3模块:(Parallel A

17、dder Subtractor) 库:Altera DSP Builder中Arithmetic库 参数“Number of Inputs”设为“2” 参数“Add(+)Sub(-)”设为“+”,FeedForwardAdder、FeedForwardAdder1模块:(Parallel Adder Subtractor) 库:Altera DSP Builder中Arithmetic库 参数“Number of Inputs”设为“3” 参数“Add(+)Sub(-)”设为“+” Delay、Delay1、Delay2、Delay3模块:(Delay) 库:Altera DSP Builde

18、r中Storage库 参数“Depth”设为“1” 参数“Clock Phase Selection”设为“1”,G、A11、A12、A21、A21、B10、B11、B12、B20、B21、B22模块:(Gain) 库:Altera DSP Builder中Arithemtic库 参数“Map Gain Value to Bus Type”设为“Signed Fraction” 参数“Gain value number of bits.”设为“2” 参数“.Gain value number of bits”设为“10” 参数“Number of Pipeline Levels”设为“0”,2

19、. IIR滤波器系数的计算 假设4阶IIR滤波器的设计指标如下: 采样频率Fs为50 MHz; 滤波器类型为高通(HighPass); 滤波器Fc为5 MHz; 滤波器设计类型为Butterworth。 打开MATLAB中的FDATool进行滤波器系数计算,见图7-7。,图7-7 计算IIR滤波器系数,设置阶数为4,输入相关参数指标,点击“Design Filter”按钮完成IIR滤波器设计,接着打开相关分析。图7-8显示的是IIR滤波器的相频特性,图7-9显示了IIR滤波器的阶跃响应。,图7-8 相频特性,图7-9 阶跃响应,3. 设置系数 选择FDATool的“File”菜单中的“Expo

20、rt”,导出IIR滤波器系数。对于级联型IIR滤波器,导出的系数分成两个部分:SOS矩阵和G增益,其中对于多个级联的IIR滤波器,SOS矩阵为一个二维矩阵。 在此先把SOS矩阵和G导出到Matlab的工作区(Workspace),设置上面级联型IIR滤波器中的各个增益模块的“Gain Value(增益值)”。,G模块的“Gain Value”是G; B10模块为SOS(1,1),B11模块为SOS(1,2),B12模块为SOS(1,3); A11模块为SOS(1,5),A12模块为SOS(1,6); B20模块为SOS(2,1),B21模块为SOS(2,2),B22模块为SOS(2,3); A

21、21模块为SOS(2,5),A22模块为SOS(2,6)。 设置完增益值后更新一下模型,IIR滤波器模型的系数就全部设置完成了,见图7-6。,4. Simulink仿真 设置Simulink仿真参数“Stop time(停止时间)”为1e-6,类型为“Fixed-step”。模型中的Simulink仿真模块的参数设置如下:,Step模块:(Step) 库:Simulink中Sources库 参数“Step time”设为“1e-7” 参数“Initial value”设为“0” 参数“Final value”设为“1” 参数“Sample time”设为“2e-8” “Interpret ve

22、ctor parameters as 1-D”设为“”,Scope模块:(Scope) 库:Simulink中sinks库 参数“Number of Axes”为“2” 启动仿真。由于Step模块生成了一个阶跃函数,故仿真结果为IIR滤波器的阶跃响应,见图7-10。 5. 由Simulink模型转成VHDL 打开SingalCompiler,选定对应器件,把模型转成VHDL文件,并在SignalCompiler中选择Quartus II进行综合。,图7-10 Simulink仿真结果一阶跃响应,6. 适配下载 在Quartus II中打开SignalCompiler建立的Quartus项目文件

23、,选择具体器件,锁定管脚,完成适配后下载至FPGA DSP开发板中。 在FPGA DSP开发板上加入高频信号源,验证IIR滤波器的高通滤波效果。,7.3 在Quartus II中使用IIR滤波器IP核,从上面的流程来看,虽然借助DSP Builder中丰富的DSP功能模块和MATLAB强大的计算环境,不再需要关心DSP模块的具体实现过程,也就不会陷入复杂的滤波器设计算法,从而大大简化了IIR滤波器的设计过程。但是,以上述设计方法得到的IIR滤波器,在资源利用上和性能上往往不是最优的。,同FIR Filter Core一样,Altera以及其它FPGA厂商也提供了IIR Filter Core。

24、 IIR Filter Core同FIR Filter Core一样,与DSP Builer相结合,可以在Simulink环境中使用(图7-11)。 IIR滤波器核在DSP Builder中的使用,与FIR滤波器核大致是相同的,因此本节就不再一一详述了。 IIR滤波器核除了与DSP Builder可以衔接开发之外,也可以在Quartus II中直接使用。由于在前文中没有详细提及在Quartus II中使用IP Core,因而在这里加以介绍。,图7-11 IIR Core模块,7.3.1 配置Quartus II以便使用IIR滤波器核 首先,必须确认IIR滤波器核(IIR Compiler)和Q

25、uartus II是否安装。 打开Quartus II集成环境,新建一个项目。选择菜单“Assignments”“Settings”,打开Quartus II的设置对话框,在对话框的左侧选择“User Libraries(用户库)”,见图7-12。,图7-12 设置用户库,7.3.2 使用IIR滤波器核 首先完成IIR滤波器核的安装配置,然后按照第2章给出的相类似的方法,定制使用IIR滤波器核。具体步骤如下: 1. 打开MegaWizard Plug-In Manager 选择菜单“Tools”“MegaWizard Plug-In Manager”,接着打开MegaCore向导。在窗口的左侧

26、选中“IIR Compiler”,在右侧选择实现时的HDL类型,并输入生成IIR滤波器核的名字(见图7-13)。,图7-13 选择IIR Core,2. 选择IIR滤波器结构 在前文中已经提到,常用的IIR滤波器结构共有三种:直接型(Direct Form),级联型(Cascaded) 和并联型 (Parallel)。 Altera的IIR滤波器核对这三种IIR结构都是支持的。图7-14是IIR滤波器结构设置对话框,在这里我们选择了级联型进行实现,滤波器阶数设为8。 图7-15、图7-16分别表示了另外两种滤波器结构的计算公式和结构。,图7-14 IIR滤波器结构,图7-15 直接型IIR结构

27、,图7-16 并联型IIR结构,3. 导入滤波器系数 由于IIR滤波器系数的计算要比FIR滤波器复杂得多,对于Altera的IIR滤波器核,其系数计算需要通过其它工具进行,比如可以使用MATLAB的FDATool来完成,再通过图7-17的对话框导入(通过文件)。系数导入后,IIR Compiler可以显示当前系数的IIR滤波器的幅频响应。,图7-17 确定IIR系数,对于IIR滤波器而言,还可以通过导入零极点值来确定IIR滤波器的系数。IIR Compiler也提供了导入零极点来确定IIR系数的方式。图7-18显示了导入后IIR滤波器的零极点图。,图7-18 IIR滤波器的零极点,4. IIR

28、滤波器系数的量化 同FIR滤波器一样,在FPGA上实现,IIR系数必须进行量化处理,见图7-19。我们在这里设置了输入信号的位宽为8位,系数位宽为16位。采用自动方式让IIR Compiler具体决定系数的归一化问题。,图7-19 量化IIR滤波器系数,5. IIR滤波器的具体实现 为了提高IIR滤波器的性能,同时减少IIR滤波器使用的资源,需要对IIR滤波器实现时的某些细节进行调整,如图7-20所示。 然后点击“Finish”完成IIR滤波器核的设置。,图7-20 IIR滤波器实现的调整,6. 调用设计好的IIR滤波器核 设计好的IIR滤波器核可以通过多种方式调用。图7-21显示了在Quartus II的原理图方式设计中,对设计好的IIR滤波器核作为一个元件(Symbol)进行调用。 当然,采用VHDL调用设计好的IIR滤波器核也是相当方便的。IIR Compiler在设计时提供了调用模板文件供设计者参考。 另外,IIR Compiler也能生成一些仿真测试文件来简化对核的测试过程。,图7-21 调用设计好的IIR滤波器核,

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

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1