dsp实验指导书.doc
DSP原理与应用实验指导书聊城大学理工学院通信工程系目录实验平台说明1系统总览2CCS的安装与配置4实验1 CCS的使用9实验2 循环操作13实验3 双操作数乘法15实验4 并行运算17实验5 小数运算19实验6 快速傅里叶变换 (FFT) 实现22实验7 无限冲击响应滤波器 (IIR) 实现25实验8 自适应滤波器 (LMS) 实现27*实验9 数码管控制实验29*实验10 交通灯控制实验31实验平台说明本实验箱以TI公司的TMS320C5410(可选配TMS320C5416)和TMS320LF2407两种DSP芯片为中心,附加开发了多个功能模块,可以使实验者方便有效地完成各种常用的DSP开发实验。TMS320C5410是TI公司54系列DSP芯片中相当优秀的一个型号,除了有强大的运算能力外,还集成了丰富的片内资源。基于该芯片的出色性能,它在各种DSP应用场合中发挥着重要作用。本实验箱就提供了这样一个平台,使实验者能在最短的时间内了解并掌握该DSP芯片的基本开发技术。TMS320C5416是TI公司54系列DSP芯片中另一款优秀的型号,片内资源比5410丰富,HPI(主机接口)提供16BIT模式,外设与5410相近。实验者可以在5410主控板(或5416主控板)上进行各种指令实验和算法实验。把5410主控板(或5416主控板)插接在实验箱主电路板上的接口后,实验者就可以借助已设计好的外部电路进行USB接口、A/D与D/A转换等实验。本实验箱的USB模块主芯片采用功能强大的PHILIPS ISP1362芯片,它支持USB2.0和最新的OTG(on The Go点对点通信)协议,因此实验者可以充分学习到最先进的USB技术。A/D与D/A转换是传统的实验内容,本实验箱配置了两个A/D与D/A模块,它们有不同的性能和特点,适合不同的应用场合。把5410(或5416)与A/D与D/A模块配合起来,实验者甚至可以进行声音文件的MP3编解码实验。本实验箱的另一块主控板采用TMS320LF2407 DSP芯片,这也是一个应用非常广泛的型号。配合实验箱主电路板上的各个模块,实验者可以进行通用异步串行口(UART)的实验,电机控制实验,以太网卡实验,液晶显示屏实验,数码管控制实验,信号灯控制实验和键盘扫描实验。另外实验箱上还有一个信号发生模块可供实验。除了已设计好的实验之外,实验者还可以发挥创造性,充分利用实验箱的资源进行其它实验。系统总览一、实验箱资源分布本实验箱采用模块化设计,直接与实验相关的,一共有13个模块,另有负责总线控制的CPLD模块和一个负责为各个部分供电的电源模块。每一个模块都有独立的电源开关控制。实验系统中有三个模块是采用外插形式的,在实验箱主电路板上预留了插槽,包括5410主控板(或5416主控板),2407主控板以及电机控制模块。而其余各模块都设计在主电路板上。整个实验箱的资源分布如下图。(图1-1-1) 实验箱整体说明图(1) TMS320C5410主控板(或5416主控板)位置(外插)(2) TMS320LF2407主控板位置(外插)(3) CPLD模块(复杂可编程逻辑器件)(4) A/D与D/A转换模块一(普通语音数模转换)(5) A/D与D/A转换模块二(高精度音频)(6) 信号发生模块(7) USB2.0 OTG接口模块(USB2.0点对点接口通信模块)(8) UART接口模块(通用异步收发报机接口模块)(9) 以太网卡模块(10) 电机控制模块插槽(11) 4×4键盘模块(12) 液晶显示屏模块(13) 数码管模块(14) 信号灯模块(15) 电源模块(16) 双声道扬声器模块 DSPII+型模块及各部分控制图 CCS的安装与配置一、CCS的安装1、 打开光驱,将带有DSP软件的光盘放入其中。2、 打开其中的“DSP软件”目录显示如下:在C2000V2.2目录下是CCS2000的安装软件;C5000V2.2目录下是CCS5000的安装软件。工具软件目录下是一些常用的工具软件;驱动程序目录下是EPP(并口)和USB接口的仿真器的驱动程序。3、 先安装CCS2000的软件,打开“C2000V2.2”目录,点其目录下的“SETUP”。安装开始。如下图:4、 按照其安装提示进行安装,出现如下提示:在下方选择“YES,I DO accept all the terms of the preceding License Agreement”点击“Next”继续进行安装,直至出现如下图所示画面:在上图中有两个可选项,上面一个是CCS2000的安装软件(CODE COMPOSER STUDIO),下面一个是其软件的帮助文件的安装(OnlineManuals在线指南)。将两个项目都选择,即在两个项目前的方框内打上“”;或者点击“Select All”(全选)点击“Next”继续进行安装。出现如下图(左)所示画面:在图中选择“Browse”(浏览)对软件的安装目录进行设置。因为还有CCS5000的软件要进行安装,所以最好对其安装目录进行设置如D:TI2000,以示对CCS5000的区别。点击“Next”继续进行安装,按照安装提示直至安装完成。安装完成后会出现如下图(右)所示:点击“确定”按钮,出现如下图(左)所示的窗口:这两项是安装完成后,其软件的网上资料和安装生成的一些介绍。可以选择的来进行设置。最后点击“Finish”完成软件的安装。点击完成后,如果选择了前面的两项,则会出现其网页资料,关闭这些网页后,出现如下图(右)窗口:选择“重新启动计算机”(Yes,I want to restart my computer now)来重启你的计算机,以便使你的设置生效(默认选项)。选择下面一项则不重新启动你的计算机。选择这两项中的其中一项,点击“FINISH”完成整个软件的安装。CCS5000的安装过程和CCS2000的安装过程基本上是一致的,只是其安装文件不一样,另外在安装目录的选择上CCS5000建议安装在D:TI5000目录下以示同CCS2000的区别。二、USB仿真器驱动程序的安装USB仿真器驱动程序的安装与EPP仿真器的安装基本是一致的,首先打开光盘中的驱动程序目录下的USB_Driver(即USB仿真器的驱动程序),运行其目录下的SETUP.EXE程序,按照其提示进行驱动的安装,如下图(左)所示窗口,该图的提示窗口是进行选择其驱动程序的安装目录对话框。如果选择“是”则安装在C:/TI目录下,一般情况下不安装有这一个目录下,而是要安装在CCS安装的目录下。选择“否”则是对安装目录进行设置,如下图(右)所示:选择“Browse”选择安装目录,建议安装在CCS软件安装的目录下,(如CCS2000软件所在的目录下D:TI2000)。选择好安装目录后,依照提示信息完成其驱动程序的安装。用同样的方法将驱动程序也安装有另外一个CCS开发环境下(如CCS5000软件所在的目录下D:TI5000)。安装完成后,将驱动安装目录下的“ICETEK.cfg”,“mdjtag3.dll”,“xdsfast3.dll”拷贝到DSP软件安装目录下Drivers子目录下,并将Import文件夹下的内容对应拷贝到DSP软件安装目录下Drivers子目录下Import目录中。三、USB仿真器在CCS环境下的设置USB仿真器在CCS开发环境下的设置与EPP仿真器的在其开发环境下的设置基本是一致的。运行SETUP CODE COMPOSER STUDIO(设置数据处理工作室)软件(以CCS5000为例),即桌面上的CCS的配置程序图标Setup CCS2(C5000)。出现如下窗口:在上图中将中间当前活动的对话窗口关闭,点击“Install a Device Driver”(安装设备驱动程序)进行设置。出现如下窗口:上图是对仿真器的驱动进行选择,其文件在安装驱动时所选择的目录下的Drivers子目录下。如(D:TI5000Drivers.)选择tixds54x. dvr,点击上图中的“打开”出现如下图(左)窗口,点击图中的“OK”按钮。此时,中间一栏(Available Board可用板/Simulator Type模拟类型)会出现相应的驱动图标,如下图(右):把该图标拖动到最左边的“System Configuration”(系统配置)一栏是,则会出现“Board Properties”(板道具)对话框。如下图(左)所示,在第一项下拉菜单中选择中间的一条“Auto-generate board data file with extra configuration”(自动生成板数据文件和其它配置)。在第二项中“Configuration File”(结构文件)选项中选择“Browse”(浏览)按钮,出现如下图(右)对话框:选择上图(右)中的ICETEK.cfg文件,其文件也在CCS软件目录下的Drivers(驱动器)子目录下(D:TI5000Drivers.)。点击“Next”出现如下图(左)所示的窗口,将图中的硬件仿真器的I/O口值由0X240改为0X000,再点击Next,继续进行设置则会出现 “Processor Configuration”(处理机结构)页面。在Processor Configuration(处理机结构)页面下,在Available Processor(可用处理机)选项中选择TMS320C5400(在CCS2000开发环境下为TMS320C2400),然后,点击其中间的Add Single(添加一个)按钮,其右边出现CPU-1图标,如下图(右)。点击“Next”按钮,出现下图(左)所示的对话框,点击图中所标示的的位置,对CPU进行类型的选择,出现如下图(右)所示的窗口:基于实验箱中的CPU选择C5410.gel或C5410A.gel文件,这个文件也在前里安装驱动程序所选择的目录下的Drivers子目录下。单击“打开”按钮。点击“Finish”完成其设置。对其设置进行保存后,退出其配置程序。对于USB仿真器在CCS2000开发环境下的设置其步骤与CCS5000开发环境下的基本一致。只是在相应的配置文件的选择上略的不同。在对仿真器驱动程序选择是CCS2000开发环境下选择的是“TIXDS24X.DVR”,相应的出现的图标则为tixds24x的图标;另外在对其CPU类型进行选择时根据实验箱选择f2407A.gel这些文件都在其驱动安装程序所在目录下的Drivers(驱动器)子目录下。设置完成后,将仿真器与计算机通过USB电缆接起来,此时电脑硬件会显示找到新的硬件,如果提示要安装驱动,则按电脑的安装向导安装USB驱动目录下USBDevice(USB驱动器)文件夹里的mdpjtag.inf驱动文件。电脑如果找到了驱动程序则在硬件列表里会出现一个红色的仿真器的图标。五 C5410软件仿真在CCS环境下的设置 运行SETUP CODE COMPOSER STUDIO软件,即桌面上的CCS的配置程序图标(Setup CCS2(C5000)。出现如下窗口: 点击C5410 Device Simulator,再选择Import(输入)则就完成了仿真设置如果尚有不明的地方可参见我们电子板的“DSP简易安装指导书”其有详细安装过程。实验1 CCS的使用一、实验目的1. 学习CCS软件的使用方法二、实验设备1一台装有CCS软件的计算机;2.DSP实验箱的TMS320C5410主控板;3.DSP硬件仿真器。三、实验步骤(一)、创建或打开工程打开CCS5000主程序,打开的主界面如下: 本节使用工程“Volume1”为例做一个实验,该实验开发并运行一个简单的程序,指导读者如何新建一个工程,如何向工程添加源文件并修改代码,编译并且运行程序。1 准备工作在以下各节之前,为了便于学习,我们事先准备好实验文件。在CCS的安装目录下,找到“myprojects”目录,在这里新建一个名为“volume1”的目录,再到CCS安装目录下找到“tutorialsim54xxvolume1”目录,把下表的7个文件复制到刚才新建的目录下:需要复制的文件文件说明volume.c实验用C源文件load.asm实验用汇编源文件vectors.asm实验用中断向量表文件volume.hC函数使用的头文件volume.cmd内存定位文件sine.dat实验用数据文件volume.gel实验用GEL控制文件2 新建工程文件文件复制完成以后,启动CCS,再主菜单中单击“Project”(设计),会有“new”和“open”选项,创建新工程使用“new”选项。程序会提问新建工程的名字以及保存位置,指定后单击“确定”即可。3 向工程添加各类型文件可以使用两种方式向工程添加源文件、CMD文件和库文件。(1) 添加源文件在主菜单中单击“Project”,选择“Add Files to Project”命令,在弹出的添加文件对话框中找到目录“volume1”,选择文件“volume.c”,单击“打开”按钮,如下面左图所示。另一个方法是在工程名“volume.pjt”上单击鼠标右键,选择“Add Files”命令。在弹出的添加文件的对话框中,找到目录“volume1”,再在添加文件对话框中单击“文件类型”,选择“Asm Source Files(*.a*;*.s*)”,这样在添加文件对话框里就只显示指定类型的文件。同时选择“load.asm”和“vectors.asm”,单击“打开”按钮(通过这种方法也可添加C代码文件“volume.c”),如右下图所示。 (2) 接着添加必需的内存定位文件“*.cmd”,使用上述任一方式,向工程里添加“volume.cmd”,注意在添加文件对话框的“文件类型”下拉列表中要选择“Link Command File(*.cmd)”,该文件定义了各代码段和数据段在存储器中的位置。(3) 因为本实验工程是基于C语言编写的,因此还需要添加运行时支持库(RunTimeSupport Library如果基于汇编的就不需要)。使用上述任何一种方式,向工程添加“rts.lib”文件,该文件存放在CCS的安装目录“c5400cgtoolslib”下。注意在添加文件对话框的“文件类型”下拉列表中要选择“Object Library Files(*.o*,*.l*)”。(4) 添加头文件。在工程名“volume.pjt”上单击鼠标右键,选择“Scan All Dependencies”,这样volume.c文件所包含的头文件“volume.h”将出现在工程浏览窗中的“Iclude”文件夹中。头文件实际不用人工添加,在Build工程时,CCS本身就会自动完成扫描。4 查阅代码在继续完成实验之前,先阅读一下源代码。明白各文件内容:在工程浏览窗里的“volume.c”文件名上双击鼠标,即可在CCS的编辑窗口看到源代码,注意该文件的以下三个部分:(1) 在主函数输出消息"volume example started "后,主函数进入一个无限循环,在循环内部调用了两个函数dataIO()与processing()。(2) 函数processing()对输入缓冲区的每个采样值乘以一个增益值“gain”,并将结果存放到输出缓冲区中。改函数同时调用汇编程序load(),该函数会根据processing()传递过来的参数processingLoad来消耗指令周期,模拟复杂信号处理算法在时间上的消耗。(3) 函数dataIO()在本实验中不作任何实际操作而直接返回。5 建造和运行程序建造(Building)在这里指编译、汇编、链接三个独立步骤按顺序联合运行。在主菜单中单击“Project”,选择“Rebuild All”,或者单击工具条图标,CCS将重新对工程中所有文件进行编译、汇编、链接,并同步在底部窗口中显示编译连接信息。连接完毕,CCS生成一个“.out”文件,默认存放在目录“volume1”下的“debug”(除错)目录中。建造完毕后,再完成装载程序的步骤:在主菜单中单击“File”,选择“Load Program”,在弹出对话框中,找到目录“volume1”下的“debug”目录,选择“volume.out”,并打开。CCS装载完毕该文件到目标DSP以后,会自动弹出“Dissassembly”窗口,显示构成源代码的反汇编指令。同时,CCS还会在底部弹出“stdout”栏,用于显示程序在运行时的输出信息。现在可以运行我们的程序:在主菜单中单击“Debug”,选择“Go Main”,让程序从主函数开始运行。程序会停在main()处,并会有一个黄色的箭头标记当前要执行的C语言代码。如果希望同时看到C语言代码和对应编译生成的汇编代码,在主菜单中单击“View”,选择“Mixed Source/ASM”,此时会有一个绿色箭头标记当前要执行的汇编代码,如图所示:在主菜单中单击“Debug”,选择“Run”,或单击工具条图标,让程序全速运行。如果能在底部的stdout标准输出窗口看到程序运行的输出信息“volume example started”,证明程序能够正常运行。在主菜单中单击“Debug”,选择“Run”,或单击工具条图标,让程序停止运行。常用的按钮如下: à 单步执行; à 不进入子程序中; à从子程序中执行出; à执行到子程序开始处; à运行程序; à 停止运行; à 全速运行程序。6多种观察窗口帮助调试。查看寄存器:在 CCS中选择View菜单中的CPU Registers命令。查看数据:选择View菜单中的Memory命令,弹出设置窗口,按实际需要指定其中的参数,如起始地址等,就可以观察到数据单元中的值,该值可以以多种格式表示。查看程序中变量的当前值:可以在程序中用光标选中变量名,在鼠标右键菜单中选择Add to Watch Window命令就可以把该变量添加到Watch窗口。随着程序的运行,可以在Watch窗口看到该变量的值的变化。显示图形:如果要观察的变量太多,例如要观察一个数组的值,那么可以用一种更直观的方法,就是把数据用图形的方式表现出来。选择View菜单中的Graph命令,会有不同类型的图形可供选择。常用的是时域/频域波形,即Time/Frequency项。在弹出的Graph Property对话框中,可以设定图形的标题、数据的起始地址、采集缓冲区的大小、显示数据的大小、数据类型等属性。实验2 循环操作一、实验目的1.掌握循环操作指令的运用;2.掌握用汇编语言编写DSP程序的方法。二、实验设备1一台装有CCS软件的计算机;2.DSP实验箱的TMS320C5410主控板;3.DSP硬件仿真器。三、实验原理TMS320C54x具有丰富的程序控制与转移指令,利用这些指令可以执行分支转移、循环控制以及子程序操作。本实验要求编写一程序完成的计算。这个求和运算可以通过一个循环操作指令BANZ来完成。BANZ的功能是当辅助寄存器的值不为0时转移到指定标号执行。例如:STM4,AR2loop:ADD*AR3+, ABANZloop,*AR2;当AR2不为零时转移到loop行执行。假设AR3中存有x1到x5五个变量的地址,则上述简单的代码就完成了这五个数的求和。四、实验步骤1.学习有关指令的使用方法;2.在CCS环境中打开本实验的工程(Ex3_1.pjt),阅读源程序; 3.编译并重建 .out 输出文件(Rebuild All),然后通过仿真器把执行代码(.out的文件)下载到DSP芯片中; 4.在“end:B end”代码行设置断点(当光标置于该行时,单击工具条上的Toggle Breakpoint图标,此时该行代码左端会出现一个小红点,或双击此行),单击运行;5 选择“View”->“memory”,起始地址设为“0x0060”,观察内存数值的变化。应能看到五个加数的值及其求和值。注意查看0X0060-0X0065单元中计算值显示的十六进制结果。6.停止程序的运行(单击);7.尝试改变对变量的初始赋值,或者增加或减少变量数目,重复上述36步过程,验证程序运行结果。五、思考题1.总结迭代次数与循环计数器初值的关系(在本实验的代码中,用AR2作为循环计数器,设其初值为4,共执行了5次加法。);2.学习其它转移指令。实验3 双操作数乘法一、实验目的1.掌握TMS320C54x中的双操作数指令;2.掌握用汇编语言编写DSP程序的方法。二、实验设备1一台装有CCS软件的计算机;2.DSP实验箱的TMS320C5410主控板;3.DSP硬件仿真器。三、实验原理TMS320C54片内的多总线结构,允许在一个机器周期内通过两个16位数据总线(C总线和D总线)寻址两个数据和系数。双操作数指令是用间接寻址方式获得操作数的,并且只能用AR2到AR5的辅助寄存器。双操作数指令占用较少的程序空间,而获得更快的运行速度。现举一例说明双操作数指令的用法。试求y=mx+b,则用单操作数指令的代码应该如下:LDm, TMPYx,A;单操作数乘法指令ADDb,ASTLA,y若用双操作数乘法指令则改为:STMm,AR2STMx,AR3MPY*AR2, *AR3,A; 双操作数乘法指令ADDb,ASTLA,y表面上从代码的行数来看,用双操作数乘法指令似乎没有什么显著优势,但是双操作数指令可以节省机器周期,这在某些迭代运算过程中是十分有用的;迭代次数越多,节省的机器时间越多。本实验要计算的乘法累加就是双操作数指令的一种应用场合。四、实验步骤1.学习有关双操作数乘法指令的使用方法;2.在CCS环境中打开本实验的工程(Ex3_2.pjt),阅读源程序; 3.编译并重建 .out 输出文件,然后通过仿真器把执行代码(.out的文件)下载到DSP芯片中; 4. 在“end:B end”代码行设置断点 (或双击此行便可完成断点设制),单击运行;5.选择“View”->“memory”,起始地址设为“0x0060”,观察内存数值a,x和z的变化。 注意查看0X0060-0X0075单元中计算值显示的十六进制结果。6.停止程序的运行(单击);7.改变对变量ai和xi的初始赋值,重复上述过程,验证程序运行结果。五、思考题1.试用单操作数指令完成上述计算;2.学习其它双操作数指令。实验4 并行运算一、实验目的1.掌握TMS320C54x中的并行运算指令;2.掌握用汇编语言编写DSP程序的方法。二、实验设备1一台装有CCS软件的计算机;2.DSP实验箱的TMS320C5410主控板;3.DSP硬件仿真器。三、实验原理TMS320C54x片内有1条程序总线,3条数据总线和4条地址总线。这3条数据总线(CB、DB和EB)将内部各单元连接在一起。其中,CB和DB总线传送从数据存储器读出的操作数,EB总线传送写到存储器中的数据。并行运算就是同时利用D总线和E总线。其中,D总线用来执行加载或算术运算,E总线用来存放先前的结果。并行指令有并行加载和乘法指令,并行加载和存储指令,并行存储和乘法指令,以及并行存储和加/减法指令4种。所有并行指令都是单字单周期指令。并行运算时存储的是前面的运算结果,存储之后再进行加载或算术运算。这些指令都工作在累加器的高位,且大多数并行运算指令都受ASM(累加器移位方式位)影响。现举一个并行指令为例:ST src, Ymem; Ymem = src << (ASM-16) | LD Xmem, dst; dst = Xmem <<16这个并行加载和存储指令实现了存储ACC和加载累加器并行执行。其它的并行指令请读者查阅相关资料。本实验中要求用并行运算指令编写程序完成 z = x + y和 f = e + d的计算。四、实验步骤1.学习有关并行指令的使用方法;2.在CCS环境中打开本实验的工程(Ex3_3.pjt),阅读源代码Ex3_3.asm; 3.编译并重建 .out 输出文件,然后通过仿真器把执行代码(.out的文件)下载到DSP芯片中; 4.单击运行;5.选择“View”->“memory”,起始地址设为“0x0060”,观察内存数值的变化。应能看到z=x+y和f=d+e的结果。 注意查看0X0060-0X0065单元中计算值显示的十六进制结果。6.停止程序的运行(单击);7.尝试改变对变量x, y, d和e的初始赋值,重复上述过程,验证程序运行结果。五、思考题1.学习其它并行指令,理解其工作原理。实验5 小数运算一、实验目的1.掌握TMS320C54x中小数的表示和处理方法;2.掌握用汇编语言编写DSP程序的方法。二、实验设备1一台装有CCS软件的计算机;2.DSP实验箱的TMS320C5410主控板;3.DSP硬件仿真器。三、实验原理两个16位整数相乘,乘积总是“向左增长”,这意味着多次相乘后乘积将会很快超出定点器件的数据范围。而且要将32位乘积保存到数据存储器,就要开销2个机器周期以及2个字的程序和RAM单元;并且,由于乘法器都是16位相乘,因此很难在后续的递推运算中,将32位乘积作为乘法器的输入。然而,小数相乘,乘积总是“向右增长”,这就使得超出定点器件数据范围的是我们不太感兴趣的部分。在小数乘法下,既可以存储32位乘积,也可以存储高16位乘积,这就允许用较少的资源保存结果,也便于用于递推运算中。这就是为什么定点DSP芯片都采用小数乘法的原因。小数的表示方法:TMS320C54x采用2的补码表示小数,其最高位为符号位,数值范围为 (11)。一个十进制小数(绝对值)乘以32768后,再将其十进制整数部分转换成十六进制数,就能得到这个十进制小数的2的补码表示,例如:0.5乘以32768得16384,再转换成十六进制就得到4000H,这就是0.5的补码表示形式。在汇编语言程序中,由于不能直接写入十进制小数,因此如果要定义一个小数0.707,则应该写成word 32768*707/1000,而不能写成32768*0.707。在进行小数乘法时,应事先设置状态寄存器ST1中的FRCT位(小数方式位)为“1”,这样,在乘法器将结果传送至累加器时就能自动地左移1位,从而自动消除两个带符号数相乘时产生的冗余符号位。使用的语句是SSBXFRCT在本实验中,要求编写程序完成的计算,其中的数据均为小数: a1=0.1 a2=0.2 a3=0.3 a4=0.2 x1=0.8 x2=0.6 x3=0.4 x4=0.2注意源代码中小数的表示。四、实验步骤1.在CCS环境中打开本实验的工程(Ex3_4.pjt),阅读源代码Ex3_4.asm; 2.编译并重建 .out 输出文件,然后通过仿真器把执行代码(.out的文件)下载到DSP芯片中; 3.单击运行;4.选择“View”->“memory”,起始地址设为“0x0060”,观察内存数值的变化。 注意查看0X0060-0X0068单元中计算值显示的十六进制结果。其中计算结果为y=0.24=1EB7H;5.停止程序的运行(单击);6.尝试改变变量的赋值,重复上述过程,验证程序运行结果。五、思考题1. 以为例分析两个带符号数相乘时的冗余符号位是如何产生的,理解为什么要设定FRCT(小数)位。注解:冗余符号位是两个代符号数相乘时存储器自动留出符号位的空间因此而产生;设置FRCT是为了减去多出来的一个符号位.实验6 快速傅里叶变换 (FFT) 实现一、实验目的1.掌握FFT算法的基本原理;2.掌握用C语言编写DSP程序的方法。二、实验设备1.一台装有CCS软件的计算机;2.DSP实验箱的TMS320C5410主控板;3.DSP硬件仿真器。三、实验原理傅里叶变换是一种将信号从时域变换到频域的变换形式,是信号处理的重要分析工具。离散傅里叶变换(DFT)是傅里叶变换在离散系统中的表示形式。但是DFT的计算量非常大, FFT就是DFT的一种快速算法, FFT将DFT的N2 步运算减少至 ( N/2 )log2N步。离散信号x(n)的傅里叶变换可以表示为,式中的WN 称为蝶形因子,利用它的对称性和周期性可以减少运算量。一般而言,FFT算法分为时间抽取(DIT)和频率抽取(DIF)两大类。两者的区别是蝶形因子出现的位置不同,前者中蝶形因子出现在输入端,后者中出现在输出端。本实验以时间抽取方法为例。时间抽取FFT是将N点输入序列x(n) 按照偶数项和奇数项分解为偶序列和奇序列。偶序列为:x(0), x(2), x(4), x(N-2);奇序列为:x(1), x(3), x(5), x(N-1)。这样x(n) 的N点DFT可写成:考虑到WN的性质,即因此有:或者写成:由于Y(k) 与Z(k) 的周期为N/2,并且利用WN的对称性和周期性,即:可得:对Y(k) 与Z(k) 继续以同样的方式分解下去,就可以使一个N点的DFT最终用一组2点的DFT来计算。在基数为2的FFT中,总共有log2(N) 级运算,每级中有N/2 个2点FFT蝶形运算。单个蝶形运算示意图如下:以N8为例,时间抽取FFT的信号流图如下:从上图可以看出,输出序列是按自然顺序排列的,而输入序列的顺序则是“比特反转”方式排列的。也就是说,将序号用二进制表示,然后将二进制数以相反方向排列,再以这个数作为序号。如011变成110,那么第3个输入值和第六个输入值就要交换位置了。本实验中采用了一种比较常用有效的方法完成这一步工作雷德算法。四、实验步骤1.以8点FFT的信号流图为例,理解FFT算法的过程;2.在CCS环境中打开本实验的工程(Ex4_3.pjt), 3.编译并重建 .out 输出文件,然后通过仿真器把执行代码(.out的文件)下载到DSP芯片中; 4.运行程序; 5.选择view->graph->time/frequency。 设置对话框中的参数: 其中“Start Address”设为“x_re”,“Acquisition buffer size”和“Display Data size”都设为“64”,并且把“DSP Data Type”设为“32-bit floating point”(如图), 设置好后观察输入信号序列的波形(单边指数函数,如图); 同样方法观察经DFT变换后的输出序列“y_re”的波形,“Start Address”改为“y_re”,其余参数不变(如图); 5 在Watch窗口中添加i, j, k, m, n, a, b ,c 等变量,在Debug菜单中先“Restart”然后 “Go main”, 单步运行程序,跟踪FFT算法的过程;(可以跳过程序开始部分对各个数组的赋值代码,方法是在雷德算法的第一行代码前设置断点,然后先单击运行,待程序停在该断点后再单步执行后面的代码,见下图。)6.修改N的值(应为2的整数次幂,如8,16,32等,最大不超过256),或者修改输入信号x的函数,如直流、正弦、三角等,观察程序运行结果。注意观察图形时,数据块大小要相应更改为当前N值。五、思考题1.分析本实验程序中完成位倒序排列的“雷德算法”的原理;2.参考资料,了解TMS320C5000系列专门为FFT运算提供的“比特反转寻址方式”;3.思考如何实现实数序列的FFT,它在复数序列的算法基础上还能作哪些优化,从而进一步降低运算量和所需的存储空间。实验7 无限冲击响应滤波器 (IIR) 实现一、实验目的1.掌握IIR滤波器的原理与设计方法;2.掌握用C语言编