DSP实验.docx
《DSP实验.docx》由会员分享,可在线阅读,更多相关《DSP实验.docx(27页珍藏版)》请在冰豆网上搜索。
DSP实验
数字信号处理器(DSP)
实验报告
实验课程:
DSP原理及应用
学生姓名:
XXXX
学号:
XXXXXX
专业班级:
物联网二班
目录
前言3
实验一:
CCS入门实验4
实验二:
编制链接控制文件9
实验三:
数据存取实验16
实验四:
定点数除法实验20
前言
“数字信号处理器”课程实验是在学习“数字信号处理器”课程中加强理解基本的DSP的设计的方法、思路和流程而开设的实践性课程。
通过本实验课程的学习,使学生进一步掌握定点运算DSP的基本知识,包括TMS320C54x的基本硬件资源:
总线结构、存储器、中央处理单元、片内外设,以及DSP软件设计的方法和软件工具CCS的使用,同时通过实验接受了DSP开发的基本步骤训练,为以后从事深入的专业开发打下基础。
本课程实验包含四个必修实验。
实验一《CCS入门实验》,可使学生掌握CodeComposerStudio3.X软件的操作环境和基本功能,掌握TMS320C5xxx软件开发过程。
实验二《编制链接控制文件》,可学习到命令文件控制代码的编制,学会建立和改变map文件,以及利用它观察DSP内存使用情况的方法。
实验三《数据存取实验》,可使学生掌握操作TMS320C5xxx内存空间的指令。
实验四《定点数除法实验》,可进一步理解用减法和移位指令实现除法运算。
实验一:
CCS入门实验
1.1实验目的
(1)掌握CodeComposerStudio3.5的安装和配置。
(2)了解DSP开发系统和计算机与目标系统的连接方法。
(3)了解CodeComposerStudio3.0软件的操作环境和基本功能,了解TMS320C5xxx软件开发过程:
●学习创建工程和管理工程的方法。
●了解基本的编译和调试功能。
●学习使用观察窗口。
●了解图形功能的使用。
1.2实验内容
(1)完成CCS软件的配置和启动。
(2)创建工程文件,创建源文件并添加到工程文件中,完成编译。
(3)下载和运行输出文件,描述F10、F9、F8、F5等按键的作用。
(4)使用观察窗口查看str变量和num变量的值
(5)掌握文件输入/输出的功能,在程序行read_signals(int*input)上设置Probe断点,执行File→FileI/O,打开对话框,加载数据sine2.dat到目标机上,并进行关联设置,最后用图形窗口观察inp_buffer的图形。
1.3实验原理
开发TMS320C5xxx应用系统一般需要以下几个调试工具来完成:
(1)软件集成开发环境(CodeComposerStudio2.0):
完成系统的软件开发,进行软件和硬件仿真调试。
它也是硬件调试的辅助手段。
(2)开发系统(ICETEK5100USB或ICETEK5100PP):
实现硬件仿真调试时与硬件系统的通信,控制和读取硬件系统的状态和数据。
(3)评估模块(ICETEKVC5416-A或ICETEKVC5416-C等):
提供软件运行和调试的平台和用户系统开发的参照。
*CodeComposerStudio2.0主要完成系统的软件开发和调试。
它提供一整套的程序编制、维护、编译、调试环境,能将汇编语言和C语言程序编译连接生成COFF(公共目标文件)格式的可执行文件,并能将程序下载到目标DSP上运行调试。
*用户系统的软件部分可以由CodeComposerStudio建立的工程文件进行管理,工程文件一般包含以下几种文件:
●源程序文件:
汇编语言文件或C语言(*.ASM或*.C)
●头文件:
(*.H)
●命令文件:
(*.CMD)
●库文件:
(*.LIB,*.OBJ)
CCS软件安装的操作一般包括几个步骤:
CCS软件的安装、配置和启动,工程文件的创建、编译和调试。
调试手段有很多,要掌握常用按键F10、F8等的基本使用,掌握观察窗口的使用,掌握使用文件输入/输出功能,并利用图形窗口观察其波形。
1.5实验条件
(1)PC一台:
操作系统为Windows2000(或WindowsNT、WindowsXP),Windows的内核如果是NT的,应安装相应的补丁程序(如:
Windows2000为ServicePack3,WindowsXP为ServicePack1)。
(2)DSP实验箱一台,USB连接电缆一条。
1.6实验步骤
1.设置CodeComposerStudio在软件仿真(Simulator)方式下运行
(1)双击桌面上“SetupCCS3(‘C5000’)”,启动“CodeComposerStudioSetup”。
(2)在“ImportConfiguration”对话框中单击“Clear”按钮,在接下来的对话框中选择“是”,清除原先的系统设置;观察窗口“CodeComposerStudioSetup”中左侧“SystemConfiguration”栏中“MySystem”项被清空。
(3)单击“Close”按钮,退出“ImportConfiguration”对话框。
(4)选择“CodeComposerStudioSetup”窗口“File”菜单中“Exit”项退出,并在接下来显示的对话框中选择“是”,保存设置;再选择“否”,不启动CCS。
2.启动CodeComposerStudio3.1
双击桌面上“CCS3(‘C5000’)”,启动CodeComposerStudio3.0;可以看到显示出的C54XCodeComposerStudio窗口。
3.创建工程
(1)创建新的工程文件:
(2)在工程文件中添加程序文件:
(3)编译连接工程:
4.编辑修改工程中的文件
(1)查看工程文件:
(2)查看源文件:
(3)编辑修改源文件:
(4)修改工程文件的设置:
5.基本调试功能
(1)执行File→LoadProgram,在随后打开的对话框中选择刚刚建立的F:
\volume\volume.out文件。
(2)在项目浏览窗口中,双击volume.c激活这个文件,移动光标到main()行上,右击鼠标选择ToggleBreakpoint或按F9设置断点。
(3)选择Debug→Run或按F5运行程序,程序会自动停在main()函数头上。
(4)注意:
在执行C语言的程序时,为了快速的运行到主函数调试自己的代码,可以使用Debug→Gomain命令,上述实验中的使用的是较为繁琐的一种方法。
6.使用观察窗口
1.执行View→WatchWindow打开观察窗口。
2.在volume.c中,选中任意一个变量,右击鼠标,选择“QuickWatch”,CCS将打开QuickWatch窗口并显示选中的变量。
3.在volume.c中,选中任意一个变量,右击鼠标,选择“AddtoWatchWindow”,CCS将把变量添加到观察窗口并显示选中的变量值。
4.在观察窗口中双击变量,则弹出修改变量窗口。
此时,可以在这个窗口中改变变量的值。
5.把str变量加到观察窗口中,点击变量左边的“+”,观察窗口可以展开结构变量,并且显示结构变量的每个元素的值。
6.把str变量加到观察窗口中;执行程序进入write_buffer函数,此时num函数超出了作用范围,可以利用CallStack窗口察看在不同作用范围的变量:
●执行View→CallStack打开堆栈窗口。
●双击堆栈窗口的main()选项,此时可以察看num变量的值。
7.文件输入/输出
介绍如何从PC机上加载数据到目标机上。
可用于使用已知的数据流测试算法的正确性。
在完成下面的操作以前,先介绍CodeComposerStudio的Probe(探针)断点,这种断点允许用户在指定位置提取/注入数据。
Probe断点可以设置在程序的任何位置,当程序运行到Probe断点时,与Probe断点相关的事件将会被触发,当事件结束后,程序会继续执行。
在这一节里,Probe断点触发的事件是:
从PC机的数据文件加载数据到目标系统的缓冲区中
下面我们使用CC的图形功能检验上一节的结果。
(1)执行View→Graph→Time/Frequency打开GraphPropertyDialog窗口。
(2)修改属性为如下值并确定。
●在弹出的图形窗口中单击鼠标右键,选择“ClearDisplay”。
(3)按F12运行程序,观察input窗口的内容。
1.7实验结果
下面我们使用CC的图形功能检验上一节的结果。
执行View→Graph→Time/Frequency打开GraphPropertyDialog窗口。
按F12运行程序,观察input窗口的内容。
1.8实验心得
了解了DSP编程软件CSS的操作环境和基本功能和实用,为以后的实验打基础。
1.9实验例程序
1.volume.h
#defineBUF_SIZE0x64
#defineTRUE1
#defineFALSE0
structPARMS{
intBeta;
intEchoPower;
intErrorPower;
intRatio;
structPARMS*Link;
};
2.volume.c
#include"volume.h"
intinp_buffer[BUF_SIZE];/*BUF_SIZE的定义见volume.h*/
intout_buffer[BUF_SIZE];
int*input;
int*output;
intvolume=1;
structPARMSstr={2934,9432,213,9432,&str};
intread_signals(int*input)
{
/*readreferencesignal*/
/*readinputsignal*/
return(TRUE);
}
intwrite_buffer(int*input,int*output,intcount)
{
while(count--)
{
*output++=(*input++)*volume;
}
return(TRUE);
}
main()
{
intnum=BUF_SIZE;
while(TRUE)/*loopforever*/
{
input=&inp_buffer[0];
output=&out_buffer[0];
read_signals(input);/*readinputsignalsfromPCfile*/
write_buffer(input,output,num);/*writetooutputbuffer*/
}
}
3.volume.cmd
MEMORY
{
PAGE0:
VECT:
o=80h,l=80h
PRAM:
o=100h,l=1f00h
PAGE1:
DRAM:
o=2000h,l=1000h
}
SECTIONS
{
.text:
{}>PRAMPAGE0
.data:
{}>PRAMPAGE0
.cinit:
{}>PRAMPAGE0
.switch:
{}>PRAMPAGE0
.const:
{}>DRAMPAGE1
.bss:
{}>DRAMPAGE1
.stack:
{}>DRAMPAGE1
.vectors:
{}>VECTPAGE0
}
实验二:
编制链接控制文件
2.1实验目的
(1)学习用汇编语言编制程序;了解汇编语言程序与C语言程序的区别和CCS使用它们在设置上的不同。
(2)学习编制命令文件控制代码的连接。
(3)学会建立和改变map文件,以及利用它观察DSP内存使用情况的方法。
(4)熟悉使用软件仿真方式调试程序。
2.2实验原理
(1)汇编语言程序
汇编语言程序除了程序中必须使用汇编语句之外,其编译选项的设置与C语言编制的程序也稍有不同。
其区别为:
●汇编语言程序在执行时直接从用户指定入口开始,常见的入口标号为“start”,而C语言程序在执行时,先要调用C标准库中的初始化程序(入口标号为“_c_init00”),完成设置之后,才转入用户的主程序main()运行。
●由于CodeComposerStudio的代码链接器默认支持C语言,在编制汇编语言程序时,需要设置链接参数,选择非自动初始化,注明汇编程序的入口地址。
(2)命令文件的作用
命令文件(文件名后缀为cmd)为链接程序提供程序和数据在具体DSP硬件中的位置分配信息。
通过编制命令文件,我们可以将某些特定的数据或程序按照我们的意图放置在DSP所管理的内存中。
命令文件也为链接程序提供了DSP外扩存储器的描述。
(3)内存映射(map)文件的作用
一般地,我们设计、开发的DSP程序在调试好后,要固化到系统的ROM中。
为了更精确地使用ROM空间,我们就需要知道程序的大小和位置,通过建立目标程序的map文件可以了解DSP代码的确切信息。
当需要更改程序和数据的大小和位置时,就要适当修改cmd文件和源程序,再重新生成map文件来观察结果。
(4)源程序分析
汇编语言源程序UseCMD.asm框图:
2.3实验内容与步骤
1.实验准备
设置软件仿真模式:
(1)启动CC驱动设置窗口:
双击桌面上“SetupCCS2(‘C5000)”图标。
(2)清除原先驱动设置:
单击“Clear”按钮。
(3)安装软件仿真驱动(Simulator):
单击“C5416DeviceSimulator”驱动名,单击“Import”按钮。
(4)完成设置:
单击“Close”,菜单“File”→“Exit”→“是”。
2.打开工程文件
(1)双击桌面上“CCS2(‘C5000)”,启动CodeComposerStudio2.0。
(2)打开菜单“Project”的“New…”项;在“Project”项中输入UseCMD,在“Location”中选择F:
\UseCMD目录,单击“完成”建立UseCMD.pjt。
(3)新建UseCMD.asm和UseCMD.cmd文件,保存在F:
\UseCMD,并在工程中添加文件UseCMD.asm和UseCMD.cmd。
3.设置工程文件
(1)打开设置窗口:
选择菜单“Project”的“BuildOptions…”项。
(2)选择链接设置:
单击“Linker”属性页。
(3)观察汇编语言程序的特殊设置:
●“AutoinitModel”项设置成“NoAutoinitialization”
●“CodeEntryPoint”项中输入“start”。
(4)退出设置窗口:
单击“确定”按钮。
4.编译源文件,下载可执行程序
(1)单击菜单“Project”、“RebuildAll”。
(2)执行File→LoadProgram,在随后打开的对话框中选择刚刚建立的UseCMD.out文件。
完成后,系统自动打开源程序文件UseCMD.asm。
5.打开观察窗口
(1)开启CPU寄存器观察窗口:
单击菜单“View”→“CPURegisters”→“CPURegisters”。
(2)在内存观察窗口中观察变量的值:
6.观察程序运行结果
此时代表程序运行位置的黄色光标条停在start标号下面语句上,程序开始执行。
(1)单步执行程序(按F10键)2次,可观察到CPU寄存器窗口中DP和ST0的值有变化。
(1)单步运行2次,在变量窗口中观察到变量x、y被赋值。
(2)单步执行到xh标号后面的语句,观察ACC寄存器和变量z值的变化。
7.生成内存映像文件
(1)单击菜单“Project”→“Options…”,启动“BuildOptions”工程设置对话框。
(2)单击“Linker”属性页,在“MapFilename”项中输入需要生成的map文件名,比如可以输入UseCMD.map
(3)单击“确定”,完成设置。
(4)选择菜单“Project”→“RebuildAll”,重新编译工程,生成新设置的map文件。
8.对照观察map文件和cmd文件的内容
(1)选择菜单“File”→“Open…”,将找到F:
\UseCMD目录,将文件类型改为“MemoryMapFiles”,选择刚刚生成的UseCMD.map文件,打开该文件。
(2)展开工程管理窗中的UseCMD.pjt,双击其中的UseCMD.cmd文件。
(3)程序的入口地址:
cmd文件的SECTION中指定.text段放到程序区(PAGE0)的PRAM中,在MEMORY中指定PRAM从内存地址100h开始,长度为1f00h;再看map文件中“ENTRYPOINTSYMBOL”中说明了“start”标号的地址为十六进制0000100,两者相符。
(4)内存的占用情况:
通过观察map文件中的“MEMORYCONFIGURATION”字段可以了解内存的使用情况,可以看到,程序所占用的长度为十六进制b,即11个字长,而数据区因开设了3个变量,所以占用了3个字的地址空间。
9.改变内存分配
●修改cmd文件中的PRAM:
o=100h,l=1f00h
●改为PRAM:
o=200h,l=1e00h
●重新编译工程,观察map文件中有何变化。
2.4实验结果
2.5实验心得
进一步了解了CCS软件的应用,对工程文件的应用更加熟悉,能简单的验证程序的正确性。
2.6实验例程序
1.UseCMD.asm
.globalstart;定义全局标号
.mmregs
.data
.bssx,1;开设全局变量(非初始化段)
.bssy,1;三个变量各为一个字(16位)
.bssz,1
.text
start:
LD#x,DP;因下面诸变量使用直接寻址,装载DP值
ST#1,@x;变量赋初值,x=1
ST#2,@y;y=2
LD@x,A;将x的值装载至累加器
add@y,A;累加器加上y的值
stlA,@z;将累加器结果(32位)的低16位存放到变量z
xh:
bxh;空循环
.end
2.UseCMD.cmd
MEMORY
{
PAGE0:
VECT:
o=80h,l=80h
PRAM:
o=100h,l=1f00h
PAGE1:
DRAM:
o=2000h,l=1000h
}
SECTIONS
{
.text:
{}>PRAMPAGE0
.data:
{}>PRAMPAGE0
.cinit:
{}>PRAMPAGE0
.switch:
{}>PRAMPAGE0
.const:
{}>DRAMPAGE1
.bss:
{}>DRAMPAGE1
.stack:
{}>DRAMPAGE1
.vectors:
{}>VECTPAGE0
}
实验三:
FIR滤波器算法实验
3.1实验目的
(1)掌握用窗函数法设计FIR数字滤波器的原理和方法
(2)熟悉线性相位FIR数字滤波器特性
(3)了解各种窗函数对滤波器特性的影响
3.2实验原理
(1)FIR的原理和参数生成
●N阶有限冲激响应滤波器:
●FIR设计原理:
根据系数h是偶对称,为了简化运算产生如下计算方法:
如果一个FIR滤波有一个冲激响应,h(0),h
(1),…h(N-1),和x(n)描绘输入的时常滤波n,输出滤波y(n)的n给出以下方程:
(2)程序的流程:
3.3实验内容与步骤
1.实验准备
设置软件仿真模式:
(1)启动CC驱动设置窗口:
双击桌面上“SetupCCS2(‘C5000)”图标。
(2)清除原先驱动设置:
单击“Clear”按钮。
(3)安装软件仿真驱动(Simulator):
单击“C5416DeviceSimulator”驱动名,单击“Import”按钮。
(4)完成设置:
单击“Close”,菜单“File”→“Exit”→“是”。
2.打开工程文件
(1)双击桌面上“CCS2(‘C5000)”,启动CodeComposerStudio2.0。
(2)打开菜单“Project”的“New…”项;在“Project”项中输入FIR,在“Location”中选择F:
\FIR目录,单击“完成”建立FIR.pjt。
(3)新建FIR.asm和FIR.cmd文件,保存在F:
\FIR,并在工程中添加文件FIR.asm和FIR.cmd。
3.设置工程文件
(1)打开设置窗口:
选择菜单“Project”的“BuildOptions…”项。
(2)选择链接设置:
单击“Linker”属性页。
(3)观察汇编语言程序的特殊设置:
●-“AutoinitModel”项设置成“NoAutoinitialization”
(4)退出设置窗口:
单击“确定”按钮。
4.编译源文件,下载可执行程序
(1)单击菜单“Project”、“RebuildAll”。
(2)执行File→LoadProgram,在随后打开的对话框中选择刚刚建立的FIR.out文件。
完成后,系统自动打开源程序文件FIR.asm。
5.打开观察窗口
(1)选择菜单“View”-“Graph”-“Time/Frequency”进行如下设置:
●GraphTitle:
input
●StartAddress:
input
●Page:
Data
●AcquisitionBufferSize:
1
●IndexIncrement:
1
●DisplayDataSize:
200
●DSPDataType:
16-bitsignedinteger
(2)继续选择菜单“View”-“Graph”-“Time/Frequency”进行如下设置:
●GraphTitle:
output
●StartAddress:
output
●Page:
Data
●AcquisitionBufferSize:
1
●IndexIncrement:
1
●DisplayDataSize:
200
●DSPDataType:
16-bitsignedinteger
6.