DSP原理及应用实验指导书.docx

上传人:b****5 文档编号:11744778 上传时间:2023-03-31 格式:DOCX 页数:31 大小:707.54KB
下载 相关 举报
DSP原理及应用实验指导书.docx_第1页
第1页 / 共31页
DSP原理及应用实验指导书.docx_第2页
第2页 / 共31页
DSP原理及应用实验指导书.docx_第3页
第3页 / 共31页
DSP原理及应用实验指导书.docx_第4页
第4页 / 共31页
DSP原理及应用实验指导书.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

DSP原理及应用实验指导书.docx

《DSP原理及应用实验指导书.docx》由会员分享,可在线阅读,更多相关《DSP原理及应用实验指导书.docx(31页珍藏版)》请在冰豆网上搜索。

DSP原理及应用实验指导书.docx

DSP原理及应用实验指导书

 

《DSP原理及应用》实验指导书

 

武汉理工大学教材中心

2009年7月

 

实验一CCS基本操作实验

一、实验目的

重点学习CCS的基本操作,练习C语言和汇编语言编程及调试。

二、实验设备

计算机,CCS软件

三、实验内容与步骤

1.CCS设置

双击桌面上的

图标,先选择Close,进入如图4.1所示的配置对话框。

由于本实验采用软件仿真器(Simulator)进行软件仿真,因此应从AvailableBoard/SimulatorTypes列表栏中选择C54xSimulator,在C54xSimulator上单击右键,选择AddtoSystem。

然后按照向导设置均选择默认设置即可。

注意:

如果要从另一种平台转变为C54xSimulator平台,应右击SystemConfiguration列表中的该平台,再选择Remove删除,然后才能按照本步骤对CCS进行设置。

图4.1CCS设置

2.创建新项目文件

创建一个新的工程,将使用CCS来创建一个工程,并向这个工程里添加源程序文件和库文件,它采用标准的C语言库函数来显示一条“helloworld”消息。

创建一个新的工程的操作步骤如下:

(1)运行CCS软件,进入如图1-1所示的画面。

图1-1CCS的进入画面

(2)选择“Project”→“New”,弹出如图1-2所示的对话框。

图1-2新建工程对话框

(3)在“ProjectName”中输入“myhello”作为工程名,在“Location”(位置)中选择你所建的工作文件夹,然后在“ProjectType”中选择“Executable(.out)”。

输入完成后单击“Finish”按钮,CCS将会建立一个叫做“myhello.prj”的工程文件,这个文件保存了你的工程的设置和涉及到的变量文件。

3、创建所需文件

1)创建“hello.c”源程序

/***********************************************************************/

/**/

/*HELLO.C*/

/**/

/*BasicCstandardI/Ofrommain.*/

/**/

/**/

/***********************************************************************/

#include

voidmain()

{

puts("helloworld!

\n");

}

2)创建“hello.cmd”文件

/*************************************************************************/

/*C5402DSKDSPMemoryMap*/

/**/

/*************************************************************************/

MEMORY

{

PAGE0:

VECS:

origin=0FF80h,length=0100h/*InternalProgramRAM*/

PRAM:

origin=2800h,length=8000h/*InternalProgramRAM*/

PAGE1:

SCRATCH:

origin=0060h,length=0020h/*ScratchPadDataRAM*/

DMARAM:

origin=0C00h,length=0300h/*DMAbuffer*/

DATA:

origin=1100h,length=0080h/*InternalDataRAM*/

STACK:

origin=1180h,length=0560h/*StackMemorySpace*/

INRAM:

origin=1900h,length=0100h/*InternalDataRAM*/

HPRAM0:

origin=1A00h,length=0002h/*HPImemoryaccessiblebyHostandDSP*/

HPRAM1:

origin=1A02h,length=0280h/*HPImemoryaccessiblebyHostandDSP*/

HPRAM2:

origin=1C82h,length=0280h/*HPImemoryaccessiblebyHostandDSP*/

EXRAM:

origin=1F10h,length=01000h/*ExternalDataRAM*/

EXRAM2:

origin=2F10h,length=0D000h/*ExternalDataRAM*/

}

/*************************************************************************/

/*DSPMemoryAllocation*/

/*************************************************************************/

SECTIONS

{

.cinit>PRAMPAGE0

.text>PRAMPAGE0

.vectors>VECSPAGE0

init_var>PRAMPAGE0

detect>PRAMPAGE0

vrcprg>PRAMPAGE0

matprg>PRAMPAGE0

.stack>STACKPAGE1

.trap>SCRATCHPAGE1

.const>EXRAMPAGE1

.data>EXRAMPAGE1

.bss>EXRAM2PAGE1

.cio>EXRAMPAGE1

.switch>EXRAMPAGE1

tables>EXRAMPAGE1

var>EXRAMPAGE1

svctab>EXRAMPAGE1/*SS_VLSPtable*/

vctab>EXRAMPAGE1/*VLSPtable*/

uvctab>EXRAMPAGE1/*UVLSPtable*/

cuvtab>EXRAMPAGE1/*Stochasticcodebook*/

cdbktab>EXRAMPAGE1/*variouscodebooktables*/

logtab>EXRAMPAGE1/*tableforlog2*/

powtab>EXRAMPAGE1/*tableforpow2*/

hamtab>EXRAMPAGE1/*tableforhamming*/

lgwtab>EXRAMPAGE1/*tableforlagwindow*/

acostab>EXRAMPAGE1/*tableforarccos*/

sqrtab>EXRAMPAGE1/*tableforsquareroot*/

acbtab>EXRAMPAGE1/*tableforthresholdsinacb*/

pm03tab>EXRAMPAGE1/*tableforx^(-0.3)computation*/

costab>EXRAMPAGE1/*tableforcosine*/

V23>INRAMPAGE1

FSK>INRAMPAGE1

hpibuff0>HPRAM0PAGE1

hpibuff1>HPRAM1PAGE1

hpibuff2>HPRAM2PAGE1

dma_buff>DMARAMPAGE1

}

(CMD文件说明:

CMD是用来分配ROM和RAM空间用的,不同的芯片就有不同大小的ROM和RAM。

放用户程序的地方也不尽相同,所以要根据芯片进行修改。

分两部分:

MEMORY和SECTIONS。

MEMORY是用来指定芯片的ROM和RAM的大小和划分出几个区间。

PAGE0对应ROM;

PAGE1对应RAM。

PAGE里包含的区间名字与其后面的参数反映了该区间的起始地址和长度。

SECTIONS:

(在程序里添加下面的段名如”.vectors”用来指定该段名以下,另一个段名以上的程序(属于PAGE0)或数据(属于PAGE1)放到“>”符号后的空间名字所在的地方。

4.向项目中加入文件

(向工程里添加文件的操作步骤如下:

(1)选择“Project”→“AddFilestoProject”,然后选择“hello.c”文件。

(2)选择“Project”→“AddFilestoProject”,然后在文件类型中选择“AsmSourceFiles(*.a*,*.s*)”。

(3)选择“Project”→“AddFilestoProject”,在文件类型框中选择连接命令文件(*.cmd),然后选择“hello.cmd”并打开。

这个文件包含程序段到存储器的映射。

(4)选择“Project”→“AddFilestoProject”,进入编译库文件夹(c:

\ti\c5400\cgtools\lib),再在文件类型框中选择目标文件和库文件(*.o*,*.l*),然后选择“rts.lib”并打开。

这个库对目标系统DSP提供了运行实时支持。

(5)单击紧挨着Projects、hello.pjt、Libraries和Source旁边的“+”标记来扩充工程(Projects)列表,这个列表叫做工程窗口(ProjectView)。

(6)此时,包含文件还没有出现在工程窗口里。

(7)如果需要从工程中删除某一个文件,则只需要在工程窗口中的相应文件上单击鼠标右键,并从弹出的菜单里选择“Removefromproject”(删除)即可。

5.浏览代码

和Windows的浏览器相似,只要在项目文件查看窗口中打开“+”号展开下面的文件,在工程窗口里双击hello.c文件,在主窗口(右半窗口)就会显示相应文件的源程序,出现图1-3,此时可以浏览并检查源程序。

图1-3查看源程序

6.编译、运行程序

(1)选择Project→RebuiltAll或单击工具条中的

按钮,CCS将重新编译、链接项目中的所有文件。

整个过程的信息将在窗口下方的信息框内显示。

如果有错误,就需要检查、修改源程序,然后再重新编译、链接,直到通过编译链接为止。

(2)选择File→LoadProgram并选中hello.out,这样CCS就把程序加载到目标系统DSP中。

(3)选择Debug→Run或单击工具条中的

按钮,这样程序就可以运行起来。

选择Debug→Halt或单击工具条中的

按钮,就可以使程序退出运行状态。

图1-4hello程序运行结果

7.跟踪/调试程序

(1)使用断点(Breakpoint)与观察窗口(WatchWindow)

当开发和测试一个程序时,经常需要在程序运行过程中检查一个变量的值。

这里使用断点与观察窗口来观察这些变量,也可以到达断点后使用step命令。

将C:

\ti\tutorial\sim54xx目录下的volume1文件拷贝到C:

\ti\myprojects文件夹下。

打开该工程并编译通过,选择File→LoadProgram并选中volume.out,把程序加载到目标系统DSP中。

①在项目文件查看窗口中双击volume.c文件;

②将光标移到下面这行:

dataIO();

③单击

或按F9键,此时该行红色高亮显示,表示一个断点已经被设置。

④单击工具条中的

按钮或按F5键,或选择Debug→Run,开始运行。

当运行到断点时停止,直到再次按

如果需要使程序回到main处,选择Debug→GoMain。

⑤选择View→WatchWindow,一个单独的窗口将出现在CCS窗口的右下方,如图1-5所示。

用鼠标右击该窗口,在窗口中填入要观察的变量的名称查看其结果。

例如:

input等。

图1-5观察变量

⑥单击

(StepOver)或按F10键单步调用执行指令。

尝试使用CCS提供的step命令:

Ø

StepInto(F8)

Ø

StepOver(F10)

Ø

StepOut(shift+F7)

Ø

RuntoCursor(Ctrl+F10)

Ø

(2)加入文件输入/输出探针(ProbePoint)

①选择File→LoadProgram并选中volume.out,再单击Open。

②在项目文件查看窗口中双击volume.c文件。

③把光标放在主程序(mainfunction)的下面这行:

dataIO();

④单击

或按F9键,此时该行蓝色高亮显示,表示一个探点已经被设置。

⑤选择File→FileI/O,这时FileI/O对话框显示出来,从中选择与该探点相关联的输入或输出文件。

⑥在FileInput栏中选择AddFile,在随后出现的对话框中选择sine.dat文件并单击Open。

一个关于sine.dat的控制窗口显示出来,如下图所示。

在此后运行程序时,使用该窗口利用这个数据文件开始、结束、重复、快速向前运行程序。

⑦在FileI/O对话框中进行如下设置:

Address设置为inp_buffer,Length设置为100,同时选中WrapAround。

⑧单击AddProbePoint,Break/ProbePoints的探点窗口将显示出来,如下图所示。

在ConnectTo栏的下拉菜单中选择sine.dat,单击Replace。

ProbePoint列表发生变化,显示出探点被连接到sine.dat文件上。

⑨单击确定,FileI/O对话框显示文件已经被连接到探点上。

⑩单击确定,关闭FileI/O对话框。

(3)图形显示

①选View→Graph→Time/Frequency⋯打开图形显示设置窗口。

在弹出的对话框中按图设置:

“GraphTitle”为Input(也可以是其它名字);“StartAddress”为inp_buffer;“AcquisitionBufferSize”和“DisplayDataSize”均设为100;“DSPDataType”为16-bitsignedinteger。

②单击OK,会生成一个名为Input图形(显示)窗口。

③在该输入图形窗口中单击右键,并从弹出菜单中选择ClearDisplay。

④再次选择View→Graph→Time/Frequency⋯,并改变“GraphTitle”为Output(也可以是其它名字);“StartAddress”为out_buffer,其它设置一律不变。

⑤单击OK,系统显示一个名为Output的图形(显示)窗口,在该输出图形窗口中单击右键,并从弹出菜单中选择ClearDisplay。

⑥在volume.c源程序窗口中,将光标移到指令所在行,并在此处设置一个断点,即单击

(ToggleBreakpoint)。

此时将探点和断点都放置在同一个命令行上,这就会使得运行操作时(传输数据或刷新图形时目标程序)只暂停一次。

⑦重排窗口可以看到所有的图形。

⑧单击工具条中的

按钮(Animate)或按F12键运行程序。

观察Input窗口和Output窗口的变化。

如图所示。

 

⑨选择Debug→Halt,使程序退出运行状态。

(4)调整增益

选择View→WatchWindow,并将gain作为要观察的变量输入,通过改变gain的取值从而改变增益。

四、实验报告要求

1、简述CCS的基本特点

2、调试实验内容,得到相应结果,分析在调试过程中出现的问题,并如何解决问题。

实验二FIR数字滤波器实验

一、实验目的

1.掌握FIR数字滤波器的原理。

2.掌握FIR数字滤波器的DSP实现方法。

二、实验原理

数字滤波器一直以来就是数字信号处理器最广为人知的应用。

数字滤波器有别于模拟滤波器的优点是:

1)可重复设计,不需更改任何硬件电路的设计,就可以将一个低通滤波器重新设计成一个高通滤波器。

2)执行阶段可以直接更新滤波器的系数,形成适应性滤波器。

滤波器分成两种形态:

有限长度脉冲响应(FIR)滤波器。

FIR指的是单一采样响应的期间是有限长的,IIR指的是单一采样响应的期间是无限长的。

FIR滤波器的特性可以用一个差分方程来描述:

其中

是滤波器的系数。

常用的滤波器有:

低通、高通、带通及带阻滤波器。

滤波器特性可以由很多的参数来决定,这些参数包括带通涟波、带阻涟波、带通截止频率及带阻截止频率。

在设计FIR滤波器时,必须根据这些参数来确定

FIR滤波器的系数及阶数。

这个过程可以通过几种方法来完成。

一是通过Matlab软件来完成,二是通过专门的数字滤波器设计的软件包来完成。

这一过程本实验不详述,本实验假定该过程已经完成,并得到了滤波器的阶数及系数。

本实验完成32阶的FIR数字低通。

三、程序主要代码

1、FIR滤波器程序

下面为一个FIR低通通用程序。

LOWPASS.set1

.globalstart,fir

.mmregs

COFF_FIR_START:

.sect"coff_fir"

.ifLOWPASS

.include"lowpass\lowpass.inc"

.endif

K_FIR_BFFR.set32

d_data_buffer.usect"fir_bfr",64

FIR_DP.usect"fir_vars",0

d_filin.usect"fir_vars",1

d_filout.usect"fir_vars",100h

.asgAR4,FIR_DATA_P

.asgAR6,INBUF_P

.asgAR7,OUTBUF_P

.sect"fir_prog"

nop

start:

LD#FIR_DP,DP;加载数据页指针

STM#d_data_buffer,FIR_DATA_P

RPTZA,#K_FIR_BFFR-1

STLA,*FIR_DATA_P+;置数据缓冲区为0

STM#d_filin,INBUF_P;新采样数据指针

STM#d_filout,OUTBUF_P;滤波输出指针

STM#100h,BK

fir_loop:

NOP;AddBreakpoint&porbepoint

LD*INBUF_P,A;获得输入采样数据

CALLfir;执行滤波

STHA,*OUTBUF_P+%

main_end:

bfir_loop;AddBreakpoint

fir:

SSBXSXM

SSBXFRCT

STM#d_data_buffer,FIR_DATA_P

STLA,*FIR_DATA_P;将采样数据放入数据缓冲X(n)

STM#(d_data_buffer+K_FIR_BFFR-1),FIR_DATA_P

fir_task:

RPTZA,#K_FIR_BFFR-1

MACD*FIR_DATA_P-,COFF_FIR_START,A

;乘加累加,且将数据缓冲区的数据移位。

RET

.end

2、创建“fir.cmd”文件

MEMORY

{

PAGE0:

PROG:

o=100h,l=2000h

PAGE1:

DATA1:

o=2600h,l=1000h

DATA2:

o=2100h,l=100h

DATA3:

o=2200h,l=100h

DATA4:

o=2300h,l=100h

DATA5:

o=2400h,l=100h

DATA6:

o=2500h,l=100h

}

SECTIONS

{

coff_fir:

{}>PROGPAGE0

fir_prog:

{}>PROGPAGE0

fir_vars:

{}>DATA1PAGE1

fir_coff:

{}>DATA2PAGE1

fir_bfr:

{}>DATA3PAGE1

}

四、实验步骤

如果你使用的是软件仿真,实验步骤如下:

1)新建一个工程,创建fir滤波器源程序和配置文件。

2)将文件添加到工程中。

3)将文件夹lowpass拷贝到新建的工程文件夹内。

4)打开Project选单,选择“BuildOptions”选项,在Linker菜单项中修改“AutoinitModel”为“NoAutoinitialization”然后单击确定。

5)打开“Project”选单,选择“Rebuildall”选项CodeComposerStudio重新编译和链接这个工程项目,在屏幕下方的“Message”窗口中返回整个的处理过程信息。

6)打开fir.asm文件在“fir_loop:

”程序段的“NOP”上点击右键选中ToggleBreakpoint,重复单击右键选中ToggleProbePoint,在“main_end:

”程序段内的“bfir_loop”行上单击右键选中ToggleBreakpoint。

以上步骤是为了完成在程序中加入断点。

7)打开“File”选单,选择“LoadProgram”选项,在“LoadProgram”对话框中,选中FIR目录下的fir.out文件。

8)打开“File”选单,选择“FileI/O”选项,就会在屏幕上弹出“FileI/O”对话框中,单击“AddFile”键。

就会在屏幕上再弹出“FileInput”的对话框,双击C:

\ti\myprojects\fir\lowpass\64300.dat,单击AddProbePoint。

将出现Break/Probe/ProfilePoints的对话框,单击ProbePoint框中的选项之后,在Connect中选中“FILEIN:

c:

\ti\myprojects\fir\64300.dat”。

单击“Replace”之后,按“确定”键,就会回到“FileI/O”对话框,在“Address”中填写“d_filin”(数据输入地址),

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1