1、CENTRAL SOUTH UNIVERSITY数字信号处理实验报告题 目 16 阶 FIR 滤波器 学生姓名 钱学文 学 院 物理与电子学院 专业班级 电子信息科学与技术 1004 班 实验六 16 阶 FIR 滤波器1实验六 16 阶 FIR 滤波器一、实验仪器:PC 机一台, JQ-NIOS-2C35 实验箱一台及辅助软件( DSP Builder、Matlab/Simulink 、Quartus II、Modelsim) 。二、实验目的:1、初步了解JQ-NIOS-2C35 实验箱的基本结构;2、学习和熟悉基于DSP Builder 开发数字信号处理实验的流程。3、学习和熟悉 DSP
2、Builder 层次化的设计方法。三、实验原理:1FIR 滤波器基础FIR 滤波器具有直接型、级联型和频率抽样型三种基本结构 14。由于在 DSP Builder 模型设计中采用了直接型结构,我们只对直接型结构进行讨论。这种结构也被称为抽头延迟线结构,或横向滤波器结构 1516。图 1 显示的是直接型结构的示意图,从图中可以看出,每个抽头上的加权值 ,Mrb,.210),(分别等于滤波器的单位冲击响应 。输入与抽头加权值的乘积的和就是输出 。Mrh,.210),( )(ny图 1 FIR 滤波器直接型结构示意图转置定理定义为,如果将上图中的所有支路倒转,并将输入 x(n)和输出 y(n)的位置
3、调换,则其冲击响应不变。将转置定理应用于上图,则得到 FIR 滤波器的转置结构,如图 2 所示。图 2 转置型 FIR 滤波器结构示意图2具有线性相位的 FIR 滤波器结构若一个 FIR 滤波器具有线性相位,且其单位冲击响应 h(n)全为实数,则 h(n)具有如下特性:当 N 为偶数时,h(n)=h(M-n);当 N 为奇数时,h(n)=-h(M-n)。所谓线性相位特性是指滤波器对不同频率的正弦波实验六 16 阶 FIR 滤波器2产生的相移和正弦波的频率成直线关系。在本次试验设计中采用的是 N 为偶数的结构,图 3 显示的是 N为偶数时线性相位滤波器的结构。图 3 线性相位滤波器结构示意图(N
4、 为偶数)3FIR 滤波器的设计方法FIR 滤波器的设计方法主要有窗函数法、频率抽样法和切比雪夫逼近法三种。其中窗函数法是设计FIR 滤波器最基本的方法。在本次实验设计中,采用的方法也是窗函数法,接下来我们主要讨论用窗函数法设计 FIR 滤波器。窗函数设计的基本思想是要选择一种合适的理想频率选择性滤波器,然后将它的冲击响应截短以获得一个具有线性相位和因果的FIR滤波器。因此这种方法的关键是选取某种好的窗函数和一种理想滤波器,在滤波器性能参数给定的情况下,应尽量选择主瓣尽可能窄,边瓣峰值进可能小的窗函数。在了解了 FIR 滤波器的原理及设计方法后,基于 DSP Builder 设计 FIR 滤波
5、器的第一项工作就是滤波器参数的选取。这一工作是借助于 Matlab 提供的设计滤波器专用的工具箱FDAtool 来完成的。在启动 FDAtool 前先确定所要设计的 FIR 滤波器的要求,在这里,我们将用凯撒窗设计一个 16 阶的低通滤波器,截止频率为 10800Hz,采样频率 为 50000HZ。sf四、实验步骤:(1)在 Matlab 的命令窗口中输入 fdatool 命令,启动 fdatool。并将参数设置为图 6-1 所示。实验六 16 阶 FIR 滤波器3图 6-1 fda tool 界面及参数设置(2)点击界面下方 Design Filter 按钮,点击菜单栏中的 Analysis
6、-Filter Coefficients。点击 ,在界面中的 Filter arithmetic 选项中选择 Fixed-point,在弹出的界面中将 filter precision 设为 specify。将Numerator word length 设为 9,取消勾选 Best-precision fraction lengths,Numerator frac.length 为 8;点击Input/Output,设置 Input word length 为 9,Input fraction length 为 8,Output word length 为 17,Output fraction
7、 length 为 16。点击 Apply,再点击菜单 File-Export将系数导出到 Workspace 空间,在 matlab 命令窗口输入命令 Num*(28),导出的优化后系数如下:-7 7 13 -3 -23 -8 48 101 101 48 -8 -23 -3 13 7 -7(3)关闭Matlab。将桌面的FIR.mdl拷贝到 “D:Program FilesMATLAB71work”(MATLAB安装目录下的work文件夹)处,并双击打开。图 6-2 16 阶 FIR 系统图图6-3 16阶FIR子系统Input1_Subsystem实验六 16 阶 FIR 滤波器4图6-4
8、 16阶FIR子系统Input1_Subsystem1图6-4 16阶FIR子系统Fir_SubSystem(4)点击工具栏 即可开始系统级simulink仿真,(5)点击TestBenchOn模块,打开模块参数界面,在Advanced选项卡中,点选Lauch GUI,并依次点击Generate HDL,Run Simulink和Run Modelsim,启动RTL 级仿真。(6)随后显示的界面即为Modelsim RTL级仿真的波形图。选中 tb_fir/dut/output信号,点击鼠标右键,选中Propertyties 选项,选择Format 为analog ,将Height设为100,
9、Scale设为0.1,点击【OK】确认。同样的方法,选中tb_fir/dut/output1信号,点击鼠标右键,选中Propertyties选项,选择Format为analog,将Height设为100,Scale设为0.2;选中 tb_fir/dut/output2信号,点击鼠标右键,选中 Propertyties选项,选择Format为analog,将 Height设为100,Scale设为0.3;选中tb_fir/dut/output3 信号,点击鼠标右键,选中Propertyties 选项,选择Format为analog,将Height设为100,Scale 设为0.4 ;最后,在波形
10、界面单击鼠标右键,选择Zoom Full,即可观察到 RTL级仿真波形。(7)点击Signal Compiler模块,打开参数设置页面,点击compile,结束后,关闭该页面。(8)执行Assignmets-Assignment Editor,将Category设为Pin,按照实验箱中的用户指南28页中的图4-5所示将 aclr、 Input1_SubSystem_Input、Input2_SubSystem_Input 分配给开关,按照37页图4-8将Clock分配为PIN_N2管脚,按照52页图4-10将Output 总管脚及其如 Output0Output8的分管脚进行分配,同样的方法对
11、Output1总管脚及其如 Output10Output18的分管脚、Output2总管脚及其如Output20Output28的分管脚和Output3总管脚及其如Output30Output38 的分管脚进行分配,并保存。实验六 16 阶 FIR 滤波器5(9)执行Tools-SignalTap Logic Analyzer,在Data窗口中的空白处双击,在弹出的对话框中将Fiter设为 all®isters:post fittings,点击List,将Output、Output1、Output2和Output3 添加至右边的窗口中,点击【OK】确认。(10)在右边的对话框中将Cloc
12、k设为Clock 信号,Sample depth设为2K,点选Trigger in,Source 设为Clock信号,Pattern设为Rising edge。保存,若弹出对话框询问是否将文件添加至工程,选择 Yes。点击菜单栏中的 ,重新对工程进行编译。(11)打开实验箱,接入电源,用USB Blaster线将电脑和实验箱连接起来,选择菜单栏中的 图标。(12)点击Hardware Setup,选择USB-0,点击【OK】确认。选中fir.sof文件,点击Start,将文件下载到实验板上。在Signaltap II界面点击Hardware右边的Setup,将其设为USB-BlasterUSB
13、-0 。(13)将实验箱上的事先分配的aclr、Input1_Subsystem_Input、Input2_Subsystem_Input开关拨至高电平,点击工具栏的 图标,启动数据采集,一段时间后点击 图标停止数据采集,点击SignalTap中的data窗口,即可看到硬件实现的波形。如图12所示:五、实验结果:(1)Simulink仿真波形:ans =-7 7 13 -3 -23 -8 48 101 101 48 -8 -23 -3 13 7 -7实验六 16 阶 FIR 滤波器6(2)RTL级仿真波形(3)硬件实现波形实验六 16 阶 FIR 滤波器7六、讨论分析:(1)实验中遇到的问题和解决方法。问题:这个实验的计算量很大,计算机容易卡住,所以需要慢慢等待或者换一台机器。