dsp实验报告3.docx
- 文档编号:14250015
- 上传时间:2023-06-21
- 格式:DOCX
- 页数:23
- 大小:798.46KB
dsp实验报告3.docx
《dsp实验报告3.docx》由会员分享,可在线阅读,更多相关《dsp实验报告3.docx(23页珍藏版)》请在冰点文库上搜索。
dsp实验报告3
数字信号处理实验报告
姓名:
实验六16阶FIR滤波器
一、实验仪器:
PC机一台,JQ-NIOS-2C35实验箱一台及辅助软件(DSPBuilder、Matlab/Simulink、QuartusII、Modelsim)。
二、实验目的:
1.初步了解JQ-NIOS-2C35实验箱的基本结构;
2.学习和熟悉基于DSPBuilder开发数字信号处理实验的流程。
3.学习和熟悉DSPBuilder层次化的设计方法。
三、实验原理:
1.FIR滤波器基础
FIR滤波器具有直接型、级联型和频率抽样型三种基本结构[14]。
由于在DSPBuilder模型设计中采用了直接型结构,我们只对直接型结构进行讨论。
这种结构也被称为抽头延迟线结构,或横向滤波器结构[15][16]。
图1显示的是直接型结构的示意图,从图中可以看出,每个抽头上的加权值
,分别等于滤波器的单位冲击响应
。
输入与抽头加权值的乘积的和就是输出
。
图1FIR滤波器直接型结构示意图
转置定理定义为,如果将上图中的所有支路倒转,并将输入x(n)和输出y(n)的位置调换,则其冲击响应不变。
将转置定理应用于上图,则得到FIR滤波器的转置结构,如图2所示。
图2转置型FIR滤波器结构示意图
2.具有线性相位的FIR滤波器结构
若一个FIR滤波器具有线性相位,且其单位冲击响应h(n)全为实数,则h(n)具有如下特性:
当N为偶数时,h(n)=h(M-n);当N为奇数时,h(n)=-h(M-n)。
所谓线性相位特性是指滤波器对不同频率的正弦波产生的相移和正弦波的频率成直线关系。
在本次试验设计中采用的是N为偶数的结构,图3显示的是N为偶数时线性相位滤波器的结构。
图3线性相位滤波器结构示意图(N为偶数)
3.FIR滤波器的设计方法
FIR滤波器的设计方法主要有窗函数法、频率抽样法和切比雪夫逼近法三种。
其中窗函数法是设计FIR滤波器最基本的方法。
在本次实验设计中,采用的方法也是窗函数法,接下来我们主要讨论用窗函数法设计FIR滤波器。
窗函数设计的基本思想是要选择一种合适的理想频率选择性滤波器,然后将它的冲击响应截短以获得一个具有线性相位和因果的FIR滤波器。
因此这种方法的关键是选取某种好的窗函数和一种理想滤波器,在滤波器性能参数给定的情况下,应尽量选择主瓣尽可能窄,边瓣峰值进可能小的窗函数。
在了解了FIR滤波器的原理及设计方法后,基于DSPBuilder设计FIR滤波器的第一项工作就是滤波器参数的选取。
这一工作是借助于Matlab提供的设计滤波器专用的工具箱——FDAtool来完成的。
在启动FDAtool前先确定所要设计的FIR滤波器的要求,在这里,我们将用凯撒窗设计一个16阶的低通滤波器,截止频率为10800Hz,采样频率
为50000HZ。
四、实验步骤:
本实验的操作步骤如下:
1.在Matlab的命令窗口中输入fdatool命令,启动fdatool,启动后的fdatool界面如图4所示。
图4fdatool界面
2.如图4示设置参数:
在滤波器类型选择低通,设计方法选择凯撒窗函数法,滤波器阶数为15,采样频率为50000hz,截止频率为10800hz。
3.点击图4中fdatool界面下方的DesignFilter按钮,弹出如图5所示的界面,点击菜单栏中的Analysis->FilterCoefficients,调出系数Numerator,可看出系数是一系列的小数。
再点击图5中左侧的
按钮,设置量化参数将弹出如图6的
图5设置完参数后的fdatool界面
的界面。
在图中Filterarithmetic选项中选择Fixed-point在弹出的界面中分别设置Coefficients和Input/Output选项的参数,filterprecision设为specifyall。
对Coefficients,设置Numeratorwordlength为9,Numeratorfrac.length为8,对Input/Output选项,设置Inputwordlength为9,Inputfractionlength为8,Outputwordlength为17,Outputfractionlength为16。
最后点击Apply按钮,再点击菜单File->Export
将系数导出到Workspace空间,在matlab命令窗口输入命令Num*(2^8),导出的优化后系数如下:
-7713-3-23-84810110148-8-23-3137-7
图6设置量化参数界面
图7Matlab启动界面
4.点击桌面上的Matlab图标,进入Matlab主界面,并将工作目录设为Matlab安装目录下的work文件夹,如图7所示。
5.点击菜单栏中的File->New->Model,新建一个模型,在Matlab命令窗口中输入simulink命令,调出simulink工具栏,如图8所示。
6.在新建的模型中按照图9所示搭建模型,可以看出,该模型与正弦发生器模型相似,不同之处在于Output模块被替换为Altbus模块。
7.按住鼠标左键,框住全部的模块及连接,单击鼠标右键,选择CreateSubsystem,建立输入子系统。
单击子系统下的文本命名为Input1_Subsystem
图8新建模型
图9Fir输入子系统模型
8.按照图10中的形式添加模块至模型,这里有一个小技巧,按住CTRL+R可以对模块进行旋转,以便于连接。
9.按照步骤7的方式,创建Fir子系统。
即按住鼠标左键,框住步骤8中搭建的模块和连接,单击鼠标右键,选择CreateSubsystem,单击子系统下的文本命名为Fir_SubSystem。
10.按照图11中的形式搭建模型,其中左边两个子系统相同,可以复制步骤7建立的子系统,命名为Input2_Subsystem,四个Output模块来自simulink工具栏中的AlteraDSPBuilder中的IO&Bus库,Scope模块来自simulink工具栏中Simulink下的Sinks库。
11.对搭建好的模型进行参数设置。
双击Input1子系统,对其中的模块参数进行设置。
其中IncrementDecrement模块的BusType设为SignedInteger,numberofbits设为8,在SpecifyClock选项前打勾,并在下面的对话框中输入Clock;LUT模块AddressWidth设为8,DataType设为SignedInteger,numberofbits设为8,MATLABArray设为127*sin(2*(16000/50000)*pi*(1:
2^8)),Step模块StepTime设为2e-4,Initialvalue设为0,Finalvalue设为1,Sampletime设为1/50000。
Altbus模块BusType设为SignedInteger,numberofbits设为9。
对Input2子系统也采用类似方式进行设置,其余模块参数都相同,不同之处在于LUT模块的MATLABArray设为127*sin(2*(8000/50000)*pi*(1:
2^8))。
图10Fir子系统
12.四个Output模块中,与Fir模块相连的两个Output模块的BusType设为SignedInteger,numberofbits设为17,与Input模块相连的两个Output模块的BusType设为SignedInteger,numberofbits设为9。
13.双击simulink工具栏中的AlteraDSPBuilder中的AltLab库,找到其中的Clock、SignalCompiler和TestBenchOn模块,选中它们并按住鼠标左键将其拖到新建的模型文件中,双击Clock模块,打开模块参数设置界面,Real-WorldClockPeriod设为20,PeriodUnits设为ns,SimulinkSampleTime设为1/50000,ResetType设为ActiveLow。
执行File->Save保存文件,将其命名为fir.mdl。
图11Fir模型
14.执行File->ConfigurationParameters,将solver设为discrete,Type设为Fixed-step,StopTime设为0.005。
15.点击菜单栏中的黑色小三角,启动simulation,simulation结束后,双击Scope模块,打开波形观察界面,在波形上点击鼠标右键,选择Autoscale,即可观察simulation后的波形。
16.点击TestBenchOn模块,打开模块参数界面,在Advanced选项卡中,点选LauchGUI,并依次点击GenerateHDL,RunSimulink和RunModelsim,启动RTL级仿真。
17.随后显示的界面即为ModelsimRTL级仿真的波形图。
选中tb_fir/dut/output信号,点击鼠标右键,选中Propertyties选项,选择Format为analog,将Height设为100,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;最后,在波形界面单击鼠标右键,选择ZoomFull,即可观察到RTL级仿真波形。
18.点击SignalCompiler模块,打开参数设置页面,点击compile,结束后,关闭该页面。
19.点击桌面上的Quartus图标,执行File->NewProjectWizard,创建新的工程,对project命名为fir。
点击next,添加文件,这一栏可以忽略,点击next,在器件family中选择CycloneⅡ,选择下拉菜单中的EP2C35F672C6.,点击finish。
20.在QuartusⅡtclConsole窗口中输入如下命令:
source<路径名>/sinwave_add.tcl,回车。
其中路径名是fir_add.tcl存放的路径名,该文件在Matlab安装路径的work文件夹下。
需要注意的是QuartusⅡ不能识别\,需要将路径名中的\改为/。
21.点击菜单栏中的紫色小三角,对创建的文件进行编译。
22.编译成功后执行File->New->VectorWaveformFile,点击【OK】确认。
23.执行Edit->Insert->TimeNodeorBus,在弹出的对话框中选择NodeFinder,再点击List,从左边弹出的管脚名中选择Clock,aclr,Input1_Subsystem_Input、Input2_Subsystem_Input、Output、Output1、Output2、Output3添加到右边,点击【OK】确认。
24.选中aclr信号,选择左边工具栏的
图标,选中Input1和Input2信号,同样设为
。
选中Clock信号,点击
,对弹出的对话框点击【OK】确认。
保存该文件,将其命名为fir。
25.执行Assignmets->Settings,选择SimulatorSettings,Simulationmode选为Functional,在右边的对话框中将保存的波形文件添加到SimulationInput中,点击【OK】确认。
执行菜单栏的Processing->GenerateFunctionalSimulationNetlists进行功能仿真。
26.执行菜单栏Assignmets->Settings,选择SimulatorSettings,Simulationmode选为Timing,在右边的对话框中将保存的波形文件添加到SimulationInput中,点击【OK】确认。
点击工具栏中的
图标,对工程进行时序仿真。
仿真完成后,选中Output信号,单击鼠标右键,选择DisplayFormat中的AnalogWaveform,若弹出对话框询问是否覆盖原文件,选择Yes。
再次选中Output信号,单击鼠标右键,选择DisplayFormat中的AnalogWaveform,将DisplayStyle设为Step,DisplayHeight设为4,点击【OK】确认。
同样的方法对Output1信号、Output2信号和Output3信号进行设置即可观察到时序仿真波形。
27.执行Assignmets->AssignmentEditor,将Category设为Pin,按照实验箱中的用户指南28页中的图4-5所示将aclr、Input1_SubSystem_Input、Input2_SubSystem_Input分配给开关,按照37页图4-8将Clock分配为PIN_N2管脚,按照52页图4-10将Output总管脚及其如Output[0]……Output[8]的分管脚进行分配,同样的方法对Output1总管脚及其如Output1[0]……Output1[8]的分管脚、Output2总管脚及其如Output2[0]……Output2[8]的分管脚和Output3总管脚及其如Output3[0]……Output3[8]的分管脚进行分配,并保存。
28.执行Tools->SignalTapⅡLogicAnalyzer,在Data窗口中的空白处双击,在弹出的对话框中将Fiter设为all®isters:
postfittings,点击List,将Output、Output1、Output2和Output3添加至右边的窗口中,点击【OK】确认。
29.在右边的对话框中将Clock设为Clock信号,Sampledepth设为2K,点选Triggerin,Source设为Clock信号,Pattern设为Risingedge。
保存,若弹出对话框询问是否将文件添加至工程,选择Yes。
点击菜单栏中的
,重新对工程进行编译。
30.打开实验箱,接入电源,用USBBlaster线将电脑和实验箱连接起来,选择菜单栏中的
图标。
31.点击HardwareSetup,选择USB-0,点击【OK】确认。
选中fir.sof文件,点击Start,将文件下载到实验板上。
在SignaltapII界面点击Hardware右边的Setup,将其设为USB-Blaster[USB-0]。
32.将实验箱上的事先分配的aclr、Input1_Subsystem_Input、Input2_Subsystem_Input开关拨至高电平,点击工具栏的
图标,启动数据采集,一段时间后点击
图标停止数据采集,点击SignalTap中的data窗口,即可看到硬件实现的波形。
如图12所示:
图12fir硬件实现结果
五、实验结果:
Simulink仿真波形与RTL级仿真波形以及时序仿真波形和硬件实现结果都应相同,且结果为16000Hz的正弦波被滤去,8000Hz的正弦波得以保留。
六、注意事项:
应该先将电源接上再用USB电缆将电脑和实验箱相连。
实验结束,先拔掉USB与PC机的连接线,再拔电源。
实验七IIR滤波器
一、实验仪器:
PC机一台,JQ-NIOS-2C35实验箱一台及辅助软件(DSPBuilder、Matlab/Simulink、QuartusII、Modelsim)
二、实验目的:
1.初步了解JQ-NIOS-2C35实验箱的基本结构。
2、学习和熟悉基于DSPBuilder开发数字信号处理实验的流程。
3、理解IIR滤波器设计的原理和方法。
三、实验原理:
IIR(InfiniteImpulseResponse)滤波器,即无限冲击响应滤波器,其冲击响应是无限长的。
IIR滤波器一般采用递归式方法来实现]。
也就是说,滤波器当前输出y(n)是输入序列x(n)和以前各输出值y(n-1)、y(n-2)…的函数,这可以用下列差分方程来表示:
(4-1)
其中
,N是IIR滤波器的阶数。
相应地,IIR滤波器的系统函数可以表示为:
(4-2)IIR滤波器除了具有极点之外,一般还存在零点。
由于极点的存在,IIR滤波器用递归结构来实现较为简单。
实现IIR滤波器的基本结构共有三种:
直接型、级联型和并联型。
下面简单介绍前两种IIR滤波器的结构。
1、直接型
利用公式(4-2)可以直接导出I型的IIR滤波器结构,可用下式表示:
(4-3)
由此可得,
和反馈环节
中的延时单元不能共用,需要M+N个延时单元
。
为了减少延时单元,对于线性系统,公式(4-3)也可以写成:
(4-4)
由此可以导出直接
型的滤波器结构。
图4-1表示了一个直接
型IIR滤波器的结构,该滤波器的阶数是四阶,共存在四个反馈环节。
图4-21直接
型IIR滤波器结构
2、级联型
对公式(4-4)的分子、分母进行因式分解,由于H(z)中的系数都为实数,H(z)的极、零点只可能是实数或者复共轭对,对于复共轭对因子,可以复合成二阶因子:
(4-18)
式中的系数都为实数。
如果把实数因子(一阶因子)看成是二阶项系数为0的二阶因子,则上式可以写成:
(4-19)
其中
由此可见,
是一个2阶的IIR滤波器,N阶IIR滤波器可以看成是由多个2阶IIR滤波器级联而成的。
四、实验步骤:
本实验的操作步骤如下:
1、点击桌面上的Matlab图标,进入Matlab主界面,并将工作目录设为Matlab安装目录下的work文件夹。
点击菜单栏中的File->New->Model,新建一个模型,在Matlab命令窗口中输入simulink命令,调出simulink工具栏,并执行File->Save保存文件,将其命名为IIR。
2、在AlteraDSPBuilderBlockset中的IO&Bus下选择Altbus模块将其添加到文件中。
打开模块参数对话框,将BusType设置为SignedInteger,numberofBits设置为16,然后单击【OK】按钮确认。
3、重复步骤2,添加1个Altbus模块。
设置numberofBits设置为16,命名为“Altbus1”。
4、在AlteraDSPBuilderBlockset中的IO&Bus下选择Busconversion模块将其添加到文件中。
打开模块对话框,将BusType设置为SignedInteger,Input设置为32,output设置为16,InputBitConnectedtoOutputLSB设置为16,然后点击【OK】确认。
5、在AlteraDSPBuilderBlockset中的Storage下选择LUT模块将其添加到文件中。
将DataType设置为SignedInteger;numberofbits设置为12;LUTAddressWidth设置为10;MATLABArray查找表中存储数据的内容,设置为511*sin(2*pi*2e4/5e4*(0:
1:
2^12)),然后点击【OK】确认。
6、重复步骤5,将LUT1添加到文件中。
DataType设置为SignedInteger;numberofbits设置为12;LUTAddressWidth设置为10;MATLABArray查找表中存储数据的内容,设置为511*sin(2*pi*1e3/5e4*(0:
1:
2^12)),然后点击【OK】确认。
7、在AlteraDSPBuilderBlockset中的IO&Bus下选择Output添加到模型文件中。
设置BusType为SignedInteger;设置[numberofbits].[]为24;其它参数设置不变;然后点击【OK】确认。
8、在AlteraDSPBuilderBlockset中的Arithmetic下选择添加IncrementDecrement到模型文件中。
设置BusType为SignedInteger;设置[numberofbits].[]为10;勾选SpecifyClock,并在Clock下写入“Clock”,然后点击【OK】确认。
9、重复步骤8,将IncrementDecrement1添加到文件中,其它设置保持不变。
10、在AlteraDSPBuilderBlockset中的Arithmetic下选择ParallelAdderSubtractor模块,添加到IIR文件中。
设置:
NumberofInputs改为2,保持其他的参数不变,点击【OK】按钮确认。
11、重复步骤10,添加3个ParallelAdderSubtractor模块到IIR文件中。
ParallelAdderSubtractor1:
NumberofInputs设置为4;ParallelAdderSubtractor2:
NumberofInputs设置为5;ParallelAdderSubtractor3:
NumberofInputs设置为2;其它设置保持不变。
12、在AlteraDSPBuilderBlockset中的Storage下选择Delay模块将其添加到文件中,随后依次将Delay1、Delay2、Delay3添加至模块,保持参数设置不变。
13、在AlteraDSPBuilderBlockset中的Arithmetic下选择Gain模块将其添加到文件中。
设置为SignedInteger;NumberofInputs设置为12;GainValue设置为-1213,并命名为A1。
同时A2的GainValue设置为1185;A3:
-540;A4:
96、B0:
2;B1:
10;B2:
15;B3:
10;B4:
2.,其它设置不变。
而A5设置为Signed
Fractional,小数点左边位数为2,右边位数为10,GainValue为1/512。
14、在AlteraDSPBuilderBlockset中的AltLab下选择SignalCompiler模块和TestBench模块将其添加到文件中。
15、在AlteraDSPBuilderBlockset中的RateChange下选择Clock模块将其添加到文件中。
将SimulinkSampleTime设置为2e-5,其它参数保持不变,然后点击【OK】确认。
16、在Simulink中的Sinks下选择Scope模块添加到文件中。
17、IIR系统的总体设计如图4-2所示
图4-2IIR系统总体图
18、IIR滤波器子系统如图4-3所示。
图4
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- dsp 实验 报告