dsp实验报告.docx
- 文档编号:23716412
- 上传时间:2023-05-20
- 格式:DOCX
- 页数:21
- 大小:470.18KB
dsp实验报告.docx
《dsp实验报告.docx》由会员分享,可在线阅读,更多相关《dsp实验报告.docx(21页珍藏版)》请在冰豆网上搜索。
dsp实验报告
实验二CCS使用操作:
报告:
1.实验目的
(1)熟悉CCS集成开发环境,掌握工程的生成方法。
(2)掌握CCS集成开发环境的调试方法。
2.实验内容及步骤
(1)查阅CCS发展历史,给出CCS发展的版本和适用的芯片。
CodeComposerStudio包含一整套用于开发和调试嵌入式应用的工具。
它包含适用于每个TI器件系列的编译器、源码编辑器、项目构建环境、调试器、描述器、仿真器以及多种其它功能。
CCSIDE提供了单个用户界面,可帮助您完成应用开发流程的每个步骤。
借助于精密的高效工具,用户能够利用熟悉的工具和界面快速上手并将功能添加至他们的应用。
版本4之前的CCS均基于Eclipse开放源码软件框架。
Eclipse软件框架可用于多种不同的应用,但是它最初被开发为开放框架以用于创建开发工具。
我们之所以选择让CCS基于Eclipse,是因为它为构建软件开发环境提供了出色的软件框架,并且正成为众多嵌入式软件供应商采用的标准框架。
CCS将Eclipse软件框架的优点和德州仪器(TI)先进的嵌入式调试功能相结合,为嵌入式开发人员提供了一个引人注目、功能丰富的开发环境。
CCS有2个版本:
白金版和微处理器版。
各版本支持的处理器不同。
支持的内核白金版:
TMS320C6000、TMS320C5000、TMS320C2800、TMS470、TMS570、ARM7、ARM9、ARM11、ARMCortexM3(不包含StellarisCortexM3)、ARMCortexR4、ARMCortexA8和MSP430处理器版:
TMS320C2800和MSP430CCS白金版和微处理器版都使用以下各项:
主机:
PC操作系统:
MicrosoftWindowsVista和XP。
(2)使用CCS时,经常遇到下述扩展名文件,说明分别是什么文件。
1project.mak.CCS使用的工程文件
2program.cC程序源文件
3program.asm汇编程序源文件
4filename.hC程序的头文件,包含DSP/BIOSAPI模块的头文件
5filename.lib库文件
6project.cmd连接命令文件
7program.obj由源文件编译或汇编而得的目标文件
8program.out(经完整的编译、汇编以及连接的)可执行文件
9project.wks存储环境设置信息的工作区文件
保存配置文件时产生的文件:
1programcfg.cmd连接器命令文件
2programcfg.h54头文件
3programcfg.s54汇编源文件
(3)学习集成开发环境CCS2.20,解决以下问题。
1CCS项目的创建。
包括创建、打开和关闭项目;在项目中添加和删除文件;设置编译选项。
2程序调试的基本操作。
包括复位,执行,单步执行,内存寄存器与变量的查看,图形显示等。
3学习断点和探测点。
1.创建新工程
利用CCS创建一个新工程,然后向该工程中添加源代码文件和库文件。
2.向工程中添加文件
一个工程项目包括源程序、库文件、链接命令文件和头文件等。
1)在CCS中选择菜单Project→AddFilestoProject,然后选文件volume.c,并单击Open。
(也可在工程图标处单击鼠标右键在快捷菜单中选AddFilestoProject,或将文件拖入工程视图窗口的文件夹中。
)
2)在CCS中选择菜单Project→AddFilestoProject,并在文件类型选框中选汇编源文件(*.a*,*.s*),然后选vectors.asm和load.asm这两个文件并单击Open。
这些文件中包含了设置复位RESET中断到程序的C入口c_int00的一些汇编指令。
(对于更加复杂的程序,可在vectors.asm文件中定义更多的中断向量。
也可利用DSP/BIOS来自动定义所有的中断向量。
)
3)在CCS中选择菜单Project→AddFilestoProject,并在文件类型选框中选择链接命令文件(*.cmd),然后选volume.cmd并单击Open,该命令文件将汇编程序的段映射到DSP的存储空间中。
4)在CCS中选择菜单Project→AddFilestoProject,进入编译库文件夹(c:
\ti\c5400\cgtools\lib),在文件类型选框中选择目标文件类型和库文件类型(*.o*,*.lib),为所配置的目标DSP选rts.lib文件并单击Open。
该库文件为目标DSP提供了运行时间(runtime)支持。
(对于一些目标DSP,运行时间库可以是一个更特殊的文件名,如rts_ext.lib。
)
5)在工程视图窗口,用鼠标右键单击工程文件volume.pjt并在快捷菜单中选择ScanAllDependencies。
这时volume.h应出现于工程视图窗口中的库(Libraries)文件夹中。
6)单击Project左边的小加号+,将展开工程列表:
volume1.pjt,Libraries,以及Source。
该列表即为工程视图。
无需手工向工程中加入include文件,因为CCS将会在编译过程中自动找到这些文件。
编译之后在工程视图中将出现这些include文件.。
如果要从工程中移出一个文件,只要在相应文件处单击鼠标右键在弹出的快捷菜单中选Removefromproject即可。
编译时CCS在以下路径依次查找工程文件:
包含有源文件的文件夹;在compiler或assembler选项中从左到右依次列出的文件夹。
3.察看源代码
在工程视图中volume.c上双击,就可在CCS右边窗口中察看源代码。
4.编译并运行程序
编译并运行程序的步骤:
1)
选Project→RebuildAll或单击工具按钮(RebuildAll)。
CCS重新编译,并链接工程中的全部文件。
编译过程信息显示在CCS下部的窗口中。
2)在默认情况下,将当前工程目录下的debug子目录中生成.out文件。
通过CCS工具条可改变生成文件的存放位置。
3)选File→LoadProgram,并在对话框中选刚刚编译生成的文件volume1.out,单击Open打开。
(默认在目录c:
\ti\myprojects\volume1\Debug\文件夹下)这样CCS就将程序载入目标DSP,并打开一个反汇编窗口,显示出相应的反汇编指令。
CCS也将在窗口底部自动打开一个标签区域来显示程序送往stdout的输出。
4)选View→MixedSource/ASM,将同时看到c源代码和汇编结果代码。
5)在混合模式窗口中单击一条汇编伪指令本身,并按F1键,CCS将搜索该条指令的帮助。
6)选Debug→GoMain开始从main函数处执行程序。
程序暂停在main处,并用黄色的箭头标识。
7)
选Debug→Run或单击工具按钮(Run)来运行程序。
8)选Debug→Halt来暂停程序执行。
9)从菜单View中选MixedSource/ASM。
将看到不带相应汇编的c代码。
从而可以方便地进行下一个任务:
修改程序选项,修正语法错误。
5.修改并运行程序
在前面的介绍中,预处理命令(#ifdefand#endif)包围的程序部分不会被执行,因为没有定义FILEIO。
在这一部分将在CCS中设置一个预处理选项。
1)选Project→BuildOptions。
2)在BuildOptions窗口的Compiler标签下,从列表栏选择Processor,在DefineSymbols域键入FILEIO,然后按Tab键。
(注:
窗口上部的编译命令中含有了选项-d。
再次编译时程序中的#ifdefFILEIO之后的语句将被包含。
根据所使用的DSP板的不同其他选项也将发生变化。
)
3)单击OK保存新的选项设置。
4)
选Project→RebuildAll或单击工具按钮(RebuildAll)。
只要改变了工程选项,就必须重新编译所有的文件。
5)选File→LoadProgram并选择文件volume1.out。
(也可以在编译之后自动装入,选择Option→Customize,并单击ProgramLoadOptions标签,然后选中LoadProgramAfterBuildOption)
6)选Debug→GoMain开始从main函数处执行程序。
程序暂停在main处,并用黄色的箭头标识。
7)
选Debug→Run或单击工具按钮(Run)来运行程序。
8)选Debug→Halt来暂停程序执行。
6.使用断点以及变量观察窗口
在开发测试程序的过程中,经常需要在程序执行中察看变量的取值,将利用断点以及变量观察窗口来达到此目的。
在达到断点后,使用单步执行命令。
1)选File→ReloadProgram。
2)在工程视图中双击文件volume.c,打开代码窗口。
将光标置于下面的语句行:
dataIO;
3)单击工具按钮
(ToggleBreakpoint)或按F9。
选择边区(编辑区左边的灰色竖条部分)标示出断点已经设置(红色点图标)。
如果选择边区无效(用Option→Costomize→EditorProperties来设置),择行显示用粉红色高亮显示。
(用Option→Costomize→Color可改变颜色。
)
4)选View→WatchWindow,在CCS的右下角将出现一个分离区域,程序运行时该区域显示观察变量的取值。
默认时选中局部观察标签WatchLocals,显示当前执行的函数中的局部变量。
5)如果程序没有停留在main处,选Debug→GoMain。
6)
选Debug→Run,或按F5,或图标。
7)选Watch1标签。
在Name栏单击并键入dataIO,即键入要观察的变量名称。
8)单击watchwindow的白色区域来保存。
这时变量取值将立即显示出来。
9)
单击工具按钮(StepOver)或按F10数次,将跳到调用dataIO()处。
10)
单击(RemoveAllBreakpoints)。
7.为文件I/O添加探针(测试点)
利用探针来从计算机中的文件读取数据,对于算法开发来说是很有用的。
1)File→LoadProgram,选择volume1.out,并单击Open。
2)双击工程视图文件volume.c。
3)将光标置于main函数中的语句处:
dataIO();
此处dataIO()函数作为一个占位符(无任何功能的函数)。
现在该函数是一个方便的位置来设置探针,以便从主机传入数据。
4)单击工具按钮
(ToggleProbePoint),选择边区标出一个菱形小蓝点,标示探针已经设置。
若选择边区无效,可以使用Option→Customize→EditorProperties来设置,在该行用蓝色高亮来显示,用Option→Customize→Color来改变颜色。
5)从File菜单选择FileI/O。
FileI/O对话框出现以便选择输入、输出文件。
6)在FileInput标签下,单击AddFile。
7)浏览到建立的volume1工程文件夹并选择sine.dat单击Open。
(可在文件类型项目下选择数据文件格式。
sine.dat文件包含了一个正弦波形的16进制数值)
接着出现了sine.dat的控制窗口。
当执行程序时,可利用该控制窗口来在数据文件中作开始、停止、回卷、快进操作。
8)在File/IO对话框中,改变Address为inp_buffer,修改Length为100,并选中WrapAround框。
•Address域定义了来自文件的数据应放到哪里。
inp_buffer是在volume.c中声明的大小为BUFSIZE的一个整型数组(BUFSIZE是定义于volume.h的一个常量。
)
•Length域定义了每次探针点能从数据文件中读取多少样本。
由于在volume.h中定义了常量BUFSIZE为(0x64),所以这里设置Length域为100。
•WrapAround选项使得当CCS读取数据到文件末尾时能够再次从文件头开始读取。
这就允许数据文件可以被视为一个连续数据流,尽管该文件中只包含1000各数据,而探针每次读取100个数据值。
9)单击AddProbePoint,使得Break/ProbePoints对话框中的ProbePoints标签出现。
10)在ProbePoint列表中,单击VOLUME.Cline61→NoConnection行使之高亮。
11)在ConnectTo域,单击下拉箭头并从列表中文件选择sine.dat。
12)单击Replace,这样ProbePoint列表将显示为探针与文件sine.dat已经连接。
单击OK,那么现在FileI/O对话框就将显示文件与探针相连。
单击OK关闭FileI/O对话框。
8.显示图形
如果现在运行程序,那么程序的运行结果将无法显示出来。
通过设置观察变量来观察与inp_buffer和out_buffer数组相关联的地址中的数据。
但是需要观察许多数据,并且显示的只是数据,而不是数据相应的曲线图(波形图)。
CCS提供了多种方式来将程序处理的数据可视化。
1)选菜单View→Graph→Time/Frequency。
2)在GraphProperty对话框中,修改GraphTitle为Input,StartAddress为inp_buffer,AcquisitionBufferSize为100,DisplayDataSize为100,DSPDataType为16-bitsignedinteger,Autoscale为Off,MaximumY-value为1000。
3)单击OK,显示InputBuffer的一个Input图形窗口就出现了。
4)在Inputgraph窗口单击鼠标右键并在弹出菜单中选择ClearDisplay。
5)再次选菜单View→Graph→Time/Frequency。
将GraphTitle修改为Output,并将StartAddress修改为out_buffer,其余值默认。
6)单击OK,显示Output图形窗口。
在该窗口中单击鼠标右键,从弹出菜单中选择ClearDisplay。
1.思考题
(1)CCS发展的各种版本中,适合C6000的有哪些版本?
CCS发展的各种版本中,适合C6000的有C62x,C64x,C67x
(2)说明CCS中断点和探测点的异同。
探针与断点的相同之处是它们都可以停止程序的运行
不同点:
探针只是暂时中断程序的运行,当程序执行到探点时会自动更新与之相连接的窗口,然后自动继续运行程序。
断点中断程序后,将更新所有打开的窗口,且只能通过人工干预的方法恢复程序继续运行。
探针运行时,文件能够自动完成从PC机和目标处理器之间的输入、输出,而断点没有此功能。
实验三FFT与滤波器程序操作:
报告:
1.实验目的
(1)学习用FFT对连续信号和时域信号进行频谱分析的方法。
(2)掌握CCS集成开发环境的调试方法。
2.实验背景知识
傅里叶变换是一种将信号从时域到频域的变换形式,是声学、语音、电信和信号处理等领域中的一种重要分析工具。
离散傅立叶变换(DFT)是连续傅立叶变换在离散系统中的表现形式,由于DFT的计算量很大,因此在很长时间内其应用受到很大的限制。
快速傅立叶变换(FFT)是离散傅立叶变换的一种高效运算方法。
FFT使DFT的运算大大简化,运算时间一般可以缩短一至两个数量级,FFT的出现大大提高了DFT的运算速度,从而使DFT在实际应用中得到广泛的应用。
在数字信号处理系统中,FFT作为一个非常重要的工具经常使用,它甚至成为DSP运算能力的一个考核因素。
对于有限长离散数字信号
,
,其离散谱
可以由离散付氏变换(DFT)求得。
DFT的定义为:
3.实验内容及步骤
(1)复习DFT算法原理、FFT的算法原理以及设计FIR、IIR数字滤波器的原理和方法。
DFT算法原理
快速傅氏变换(FFT)是离散傅氏变换的快速算法,它是根据离散傅氏变换的奇、偶、虚、实等特性,对离散傅立叶变换的算法进行改进获得的。
它对傅氏变换的理论并没有新的发现,但是对于在计算机系统或者说数字系统中应用离散傅立叶变换,可以说是进了一大步。
设x(n)为N项的复数序列,由DFT变换,任一X(m)的计算都需要N次复数乘法和N-1次复数加法,而一次复数乘法等于四次实数乘法和两次实数加法,一次复数加法等于两次实数加法,即使把一次复数乘法和一次复数加法定义成一次“运算”(四次实数乘法和四次实数加法),那么求出N项复数序列的X(m),即N点DFT变换大约就需要N2次运算。
当N=1024点甚至更多的时候,需要N2=1048576次运算,在FFT中,利用WN的周期性和对称性,把一个N项序列(设N=2k,k为正整数),分为两个N/2项的子序列,每个N/2点DFT变换需要(N/2)2次运算,再用N次运算把两个N/2点的DFT变换组合成一个N点的DFT变换。
这样变换以后,总的运算次数就变成N+2(N/2)2=N+N2/2。
继续上面的例子,N=1024时,总的运算次数就变成了525312次,节省了大约50%的运算量。
而如果我们将这种“一分为二”的思想不断进行下去,直到分成两两一组的DFT运算单元,那么N点的DFT变换就只需要Nlog2N次的运算,N在1024点时,运算量仅有10240次,是先前的直接算法的1%,点数越多,运算量的节约就越大,这就是FFT的优越性。
FFT的算法原理
FFT算法的输出X(K)为自然顺序,但为了适应原位计算,其输入序列不是按x(n)的自然顺序排序,这种经过M-1次奇偶抽选后的排序为序列的倒序。
因此,在运算之前应先对序列x(n)进行倒序。
倒序的规律就是把顺序数的二进制位倒置,即可得到倒序值。
倒序数是在M位二进制数最高位加一,逢2向右进位。
M位二进制数最高位的权值为N/2,且从左到右二进制位的权值依次为你N/4,N/8,···,2,1。
因此,最高位加一相当于十进制运算J+N/2。
(J表示当前倒序数的十进制数值)
FIR数字滤波器的原理和方法
FIR滤波器的设计问题在于寻求一系统函数
,使其频率响应
逼近滤波器要求的理想频率响应
,其对应的单位脉冲响应
。
用窗函数设计FIR滤波器的基本方法
设计思想:
从时域从发,设计
逼近理想
。
设理想滤波器
的单位脉冲响应为
。
以低通线性相位FIR数字滤波器为例。
一般是无限长的,且是非因果的,不能直接作为FIR滤波器的单位脉冲响应。
要想得到一个因果的有限长的滤波器h(n),最直接的方法是截断
,即截取为有限长因果序列,并用合适的窗函数进行加权作为FIR滤波器的单位脉冲响应。
按照线性相位滤波器的要求,h(n)必须是偶对称的。
对称中心必须等于滤波器的延时常数,即
用矩形窗设计的FIR低通滤波器,所设计滤波器的幅度函数在通带和阻带都呈现出振荡现象,且最大波纹大约为幅度的9%,这个现象称为吉布斯(Gibbs)效应。
为了消除吉布斯效应,一般采用其他类型的窗函数。
IIR数字滤波器的原理和方法
(1)脉冲响应不变法
用数字滤波器的单位脉冲响应序列h(n)模仿模拟滤波器的冲激响应ha(t),让h(n)正好等于ha(t)的采样值,即h(n)=ha(nT)其中T为采样间隔,如果以Ha(S)及H(z)分别表示ha(t)的拉式变换及h(n)的Z变换
(2)双线性变换法
以低通数字滤波器为例,将设计步骤归纳如下:
确定数字滤波器的性能指标:
通带临界频率fp、阻带临界频率fr;通带内的最大衰减Ap;阻带内的最小衰减Ar;采样周期T;确定相应的数字角频率,ωp=2πfpT;ωr=2πfrT;
计算经过预畸的相应模拟低通原型的频率,根据Ωp和Ωr计算模拟低通原型滤波器的阶数N,并求得低通原型的传递函数Ha(s);用上面的双线性变换公式代入Ha(s),求出所设计的传递函数H(z);分析滤波器特性,检查其指标是否满足要求
(2)运行程序,分析FFT.c、FFTfunction.c和Filter.c文件的程序功能。
FFTc:
原程序和dsp代码
FFTfunction.c:
包含不同采样长度时FFT变换的各函数。
(3)学习CSL,解决以下问题:
1什么是CSL?
用于配置、控制和管理DSP片上外设
已为C6000和C5000系列DSP设计了各自的CSL库
CSL库函数大多数是用C语言编写的,并已对代码的大小和速度进行了优化
CSL库是可裁剪的:
即只有被使用的CSL模块才会包含进应用程序中
CSL库是可扩展的:
每个片上外设的API相互独立,增加新的API,对其他片上外设没有影响
CSL的特点
片上外设编程的标准协议:
定义一组标准的APIs:
函数、数据类型、宏;
对硬件进行抽象,提取符号化的片上外设描述:
定义一组宏,用于访问和建立寄存器及其域值
基本的资源管理:
对多资源的片上外设进行管理;
已集成到DSP/BIOS中:
通过图形用户接口GUI对CSL进行配置;
使片上外设容易使用:
缩短开发时间,增加可移植。
2实验程序中CSL_init()函数的作用是什么?
CSL_init();//初始化芯片函数库,作用是将芯片函数库进行初始化。
4.思考题
(1)结合DSP内部结构,分析说明使用DSP进行FFT运算的优点。
DSP器件具有较高的集成度。
DSP具有更快的CPU,更大容量的存储器,内置有波特率发生器和FIFO缓冲器。
提供高速、同步串口和标准异步串口。
有的片内集成了A/D和采样/保持电路,可提供PWM输出。
DSP器件采用改进的哈佛结构,具有独立的程序和数据空间,允许同时存取程序和数据。
内置高速的硬件乘法器,增强的多级流水线,使DSP器件具有高速的数据运算能力。
DSP器件比16位单片机单指令执行时间快8~10倍,完成一次乘加运算快16~30倍。
DSP器件还提供了高度专业化的指令集,提高了FFT快速傅里叶变换和滤波器的运算速度。
此外,DSP器件提供JTAG接口,具有更先进的开发手段,批量生产测试更方便,开发工具可实现全空间透明仿真,不占用用户任何资源。
软件配有汇编/链接C编译器、C源码调试器。
FFT算法的基本原理是把长序列的DFT逐次分解为较短序列的DFT.按照抽取方式的不同可分为DIT-FFT(按时间抽取)和DIF-FFT(按频率抽取)算法.按照蝶形运算的构成不同可分为基2、基4、基8以及任意因子(2n,n为大于1的整数),基2、基4算法较为常。
(2)IIR与FIR数字滤波器相比较,各自的优缺点。
IIR和FIR数字滤波器的比较
IIRDF
FIRDF
(1)相位一般是非线性的
(1)相位可以做到严格线性
(2)不一定稳定
(2)一定是稳定的
(3)不能用FFT作快速卷积
(3)信号通过系统可采用快速卷积
(4)一定是递归结构
(4)主要是非递归结构
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- dsp 实验 报告