您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 电子设计/PCB > 南理工DSP应用技术实验四
DSP应用技术实验报告四题目:DSP应用技术实验报告院系:电子工程与光电技术学院姓名(学号):指导教师:李彧晟实验日期:2015年12月11号实验四FIR滤波器的DSP实现一、实验目的1.巩固数字FIR滤波器的概念2.理解定点DSP中数的定标、有限字长、溢出等概念3.理解算法实现中实时的概念4.掌握DSP开发过程以及基本调试方法5.理解汇编以及高级语言开发DSP实现算法的区别二、实验仪器计算机,C2000DSP教学实验箱,XDS510USB仿真器,示波器,信号源三、实验内容针对FIR算法,设计滤波器系数,完成数据的定标,查看滤波器特性曲线。建立工程,编写DSP的主程序,并对工程进行编译、链接,利用现有DSP平台实现FIR滤波器算法,通过信号源、示波器理解滤波器特性,验证实现与理论设计的一致性。四、实验准备1、实验流程实验之前首先必须对FIR滤波器的设计、实现算法有所了解,必要时通过计算机算法仿真,理解FIR滤波器特性。由于计算机仿真属于浮点运算,而TMS320F2812是定点DSP,因此需要针对所设计的FIR滤波器系数进行定标,随后对定标后的数据再次进行仿真,以验证定点实现的性能是否满足系统指标。根据FIR滤波器算法,编写C源程序或者汇编程序,实现算法功能。并验证DSP实现时算法的正确性以及精度的要求。这种算法功能上的仿真可以利用CCS集成开发环境中数据IO来模拟信号的输入,完成验证算法精度与功能的正确。验证了算法的功能正确之后,可以将程序下载到DSP上运行,观察现象。更为重要的是,在硬件平台上验证系统的实时性,以及评估资源的使用情况。若满足实时性要求,则测试各项指标,应该与原理设计相吻合。如果实现与理论不一致,则首先检查算法的实时性,以及资源使用是否冲突等原因,对程序进行优化后再次编译链接,重新验证直至正确。算法的优化有时会贯穿于整个设计之中。图4.1算法流程实现2、程序流程FIR滤波器算法属于典型的数据流处理方式,每到达一个新数据,就必须进行一次计算,更新输出。因此,当一次采样完成之后,就可以进行FIR核心算法,并将计算结果输出给DAC。因此,和DSP的数据采集实验类似,用DSP实现实时的FIR信号处理算法必须依赖于ADC、DSP以及DAC三大基本部件。充分利用DSP片上ADC外设,实现模拟信号的采样,并由DSP完成FIR核心算法,由DSP2000实验箱中DAC1(AD768)来完成数字到模拟的还原。在数据采集实验基础上,我们对程序流程稍加改动,就可实现完整数字FIR滤波器功能。程序流程如图4.2所示。图二FIR滤波器程序流程3、FIR滤波器设计数字滤波器用于完成信号的滤波处理功能,是用有限精度算法实现的离散时间非时变系统。用DSP实现数字FIR滤波算法,具有稳定性强、精度高、实时性好、灵活性大、实现简单等优点。有限长的单位冲击响应滤波器(FIR)差分方程可表示为:y[n]=∑ℎ[𝑘]𝑥[𝑛−𝑘]𝑁𝑘=0其中,h是滤波器系数,x为输入的数字信号,y为FIR滤波器计算输出。N为滤波器阶数。由此可得,一个N阶的滤波器计算,需要N+1个滤波器系数,N+1个数字输入,每得到一个y值,需要N+1次乘法以及N次加法。另外,N阶滤波器需要保存当前的N+1个输入信号数值,以及事先设计的N+1个滤波器系数。滤波器系数的设计有很多方式,这里我们采用MATLAB软件来对FIR滤波器算法进行仿真并验证性能。在MATLAB界面中,利用fir1命令来设计滤波器系数。fir1的完整命令如下:h=fir1(n,Wn,′ftype′,window)其中,n为滤波器阶数,Wn为归一化截止频率(这里的归一化指与采样频率一半进行归一化),Wn对应了在幅频曲线上-6dB点的频率数值,ftype为滤波器类型,可以是低通、带通、高通、带阻等形式。window是使用的窗函数,可以是hamming、hanning、chebwin等形式。h为产生的滤波器系数。详细说明可在MATLAB中输入helpfir1或docfir1查看。对产生的滤波器系数可以用freqz命令查看幅频、相频特性曲线。具体命令如下:freqz(h),其中h为设计的滤波器系数。当然也可以使用fvtool(h)命令,验证滤波器设计是否满足系统指标要求,例如通带范围、阻带衰减、过渡带宽度等。4、DSP的算法实现TMS320F2812是定点型DSP,存储器字长16bit,可进行32bit的运算。而仿真计算中得到的数据大多是浮点型,因此将算法用定点DSP实现时,必须进行数据格式的定标。比如对FIR滤波器系数的定标可以参照“实验10任意信号发生器”中介绍的方法来完成。对系数定标后,还要进行仿真以验证性能。另外,由于TMS320F2812的数据字长只有32bit,DAC1接受的字长为16bit,因此有限字长带来精度的损失。更为重要的是当加法的结果超过16位表示范围时,数据产生了溢出,这是有限字长带来的第二个问题。再者,数据的计算结果存放在32bit的寄存器中,但DAC却是16bit,取高位输出还是低位输出,还是取一个合适的范围,这是数据截取的问题。因此在编写程序时,必须考虑定点数据的运算效应,由数据的动态范围来确定截取、定标等问题。定点DSP内部一般有溢出保护功能,可以查看溢出标志位及时发现溢出现象,其次用溢出模式位来使ACC结果控制在最大值范围之内,以达到防止溢出引起精度严重恶化的目的。具体的实现编程,可以采用C语言或者汇编语言。C语言描述算法较为简单,在此不作详细叙述。若用汇编语言实现,必须结合算法特点和汇编指令,充分利用片内多功能单元同时执行的特点,提高程序的执行效率,比如在TMS320F2812的汇编指令有XMACD指令,支持在单周期内完成数据的加、乘以及数据搬移功能,或者使用DMAC指令在单周期内实现双乘与双加运算。采用不同的指令,必须辅以不同的数据编排方式,因此需要综合考虑选取最优的实现方案。5、算法实时性测试算法的实时性测试主要指该算法能否在规定的时间内完成FIR运算,规定时间在此是指采样周期。FIR的运算必须在两次采样间隔内完成,否则会造成数据的丢失。这是数据流处理的特点,数据的运算速度必须大于数据的更新速度。在实验平台中,我们可以利用GPIO管脚来实测采样周期和算法执行时间。添加程序,当程序进入断点时,将GPIO的某一个引脚输出置高,完成算法退出中断时再置低。由此当全速执行程序时,测量该GPIO引脚上的周期,便是采样周期,高电平持续时间即为FIR滤波器算法执行时间,由此判断计算法实现是否实时。TMS320F2812的通用数字输入输出引脚是复用的,即可以作为通用IO口使用,又可以作为外设引脚使用,这是由GPxMUX寄存器来控制切换。如果是数字IO模式,方向控制寄存器GPxDIR用来配置引脚信号的传输方向,另外GPxDAT寄存器用来反映当前对应引脚的电平,GPxSET用来设置引脚的高电平(置高),GPxCLEAR寄存器用来设置引脚的低电平(清零),GPxTOGGLE寄存器用来反相引脚电平(取反)。C2000实验箱中可用的GPIO口在“附录C3C2000DSP教学实验箱介绍”中有所介绍,下面以GPAIO为例简单介绍一下相关寄存器含义。(1)通用IO口多路切换控制寄存器GPAMUX(地址@0x70C0)如果GPAMUX.y位=0,则对应引脚配置为通用IO口;如果GPAMUX.y位=1,则对应引脚配置为专用功能外设口;(2)通用IO口方向控制寄存器GPADIR(地址@0x70C1)如果GPADIR.y位=0,则对应通用IO口配置为输入;如果GPADIR.y位=1,则对应通用IO口配置为输出;(3)通用IO数据寄存器GPADAT(地址@0x70E0)这是一个可读可写的寄存器,读访问能返回当前输入IO引脚的信号电平状态,写操作能设置对应输出IO引脚的电平。如果GPADAT.y位=0,则表示引脚为低电平;如果GPADAT.y位=1,则表示引脚为高电平;由于不同引脚读写的同时发生,引起冲突,所以一般不使用该寄存器改变输出引脚的电平,而使用下述GPASET、GPACLEAR、GPATOGGLE寄存器来解决。(4)通用IO口置位寄存器GPASET(地址@0x70E1)这是一个只写寄存器,读操作总是返回0。如果GPASET.y位=0,则表示引脚没有变化;如果GPASET.y位=1,则表示引脚电平置高(前提是该端口作为输出);(5)通用IO口清零寄存器GPACLEAR(地址@0x70E2)这是一个只写寄存器,读操作总是返回0.如果GPACLEAR.y位=0,则表示引脚没有变化;如果GPACLEAR.y位=1,则表示引脚电平清零(前提是该端口作为输出);(6)通用IO口反相寄存器GPATOGGLE(地址@0x70E3)这是一个只写寄存器,读操作总是返回0.如果GPATOGGLE.y位=0,则表示引脚没有变化;如果GPATOGGLE.y位=1,则表示引脚电平反转(前提是该端口作为输出);五、实验步骤1.系数设计利用MATLAB设计滤波器系数,并对系数进行数据定标,完成浮点到定点的转换。分别作出两组系数的幅频、相频特性曲线,看是否满足设计要求。2.设备检查检查仿真器、C2000DSP实验箱、计算机之间的连接是否正确,打开计算机和实验箱电源。3.启动集成开发环境点击桌面CCS2(C2000)快捷方式,进入集成开发环境CCS。4.建立工程新建一个DSP工程,编辑源程序、配置命令等相关文件,并在工程中添加这些程序文件。在上次实验程序的基础上加以修改,在中断程序内添加FIR算法模块,完成FIR算法程序。设置GPIO的输出控制,使之能够完成算法执行时间测量的工作。建立工程(build),若出错,则根据错误提示,修改源程序文件或者配置命令文件,直至编译链接正确,生成可执行的.out文件。5.加载程序在主菜单下,选择“File→LoadProgram”,将程序下载到DSP内部。6.算法功能验证在中断服务子程序恰当的地方,设置探针点,利用文件IO的方式,输入x数据(具体方法参见“实验9DSP开发基础实验”);在FIR算法结束处设置断点,验证FIR滤波器算法的正确性。输入的数据可具有一定的特殊性,进行特例验证。若计算结果不正确,则进行程序的调试。调试关键在于现象重现、错误定位,可以利用各种调试手段,比如打开寄存器窗口、变量窗口等辅助手段,根据数值以及实验原理,查找错误原因,修改程序直至正确为止。解决错误后,再重新恢复原错误程序,观察错误现象是否重现,以确定错误的唯一性。7.算法实时性验证去除程序中的探针点以及断点重新全速运行程序,测量采样频率以及FIR算法的核心执行时间,判断该系统是否实时。若非实时,则优化程序,甚至修改滤波器系数,直至满足实时要求。8.连接外部电路打开信号源,产生一个合适频率(ADC的采样频率必须满足奈奎斯特采样定律)的正弦信号,信号幅度控制在±0.5V以内,验证后将信号通过INPUT1接口输入到DSP中。打开示波器,将C2000实验箱中的OUT3接口输出到示波器上,并正确设置。全速运行程序,调节信号源(正弦信号)的输出频率(正弦信号),记录各频点的示波器上输出幅度。描点作图,与理论幅频特性曲线比较,分析是否满足设计要求。六、数据、波形记录与分析1、50阶带阻滤波器图三50阶带阻滤波器幅频相频曲线(定标前)图三50阶带阻滤波器幅频相频曲线(定标后)二者除了在增益上有所差别外,波形几乎一致,说明定标后的系数满足要求。用MATLAB生成N=50,归一化截止频率为[0.3,0.5]的带阻滤波器的系数,并用Q15定标,得到数据如下:h={-67,-21,56,51,-13,0,22,-136,-236,132,554,199,-538,-471,114,0,-163,977,1628,-896,-3813,-1448,4413,4898,-1989,26265,-1989,4898,4413,-1448,-3813,-896,1628,977,-163,0,114,-471,-538,199,554,132
本文标题:南理工DSP应用技术实验四
链接地址:https://www.777doc.com/doc-2597703 .html