DSP实验报告相关HD8680 通信技术应用讲义正文.docx

上传人:b****6 文档编号:4322936 上传时间:2022-11-29 格式:DOCX 页数:22 大小:147.01KB
下载 相关 举报
DSP实验报告相关HD8680 通信技术应用讲义正文.docx_第1页
第1页 / 共22页
DSP实验报告相关HD8680 通信技术应用讲义正文.docx_第2页
第2页 / 共22页
DSP实验报告相关HD8680 通信技术应用讲义正文.docx_第3页
第3页 / 共22页
DSP实验报告相关HD8680 通信技术应用讲义正文.docx_第4页
第4页 / 共22页
DSP实验报告相关HD8680 通信技术应用讲义正文.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

DSP实验报告相关HD8680 通信技术应用讲义正文.docx

《DSP实验报告相关HD8680 通信技术应用讲义正文.docx》由会员分享,可在线阅读,更多相关《DSP实验报告相关HD8680 通信技术应用讲义正文.docx(22页珍藏版)》请在冰豆网上搜索。

DSP实验报告相关HD8680 通信技术应用讲义正文.docx

DSP实验报告相关HD8680通信技术应用讲义正文

实验14 定点小数乘法运算

一、实验目的

㈠了解DSP定点运算中小数乘法的处理方法。

㈡掌握汇编源程序的建立、汇编、链接过程,练习使用CCS进行程序调试的方法。

二、实验原理

㈠小数运算

两个16位整数相乘,乘积总是“向左增长”。

这就意味着多次相乘后乘积将会很快超出定点器件的数据范围。

而且要将32位乘积保存到数据存储器,就要开销2个机器周期以及2个字的程序和RAM单元。

更坏的是,由于乘法器都是16位相乘,因此很难在后续的递推运算中,将32位乘积作为乘法器的输人。

然而,小数相乘,乘积总是“向右增长”。

这就意味着超出定点器件数据范围的将是不太感兴趣的部分。

在小数乘法情况下,既可以存储32位乘积,也可以存储高16位乘积,这就允许

用较少的资源保存结果,也可以用于递推运算。

这就是为什么定点DSP芯片都采用小数乘法的原因。

小数的表示方法:

C54x采用2的补码小数,其最高位为符号位,数值范围从-1~+1。

一个16位2的补

码小数(Q15格式)的每一位的权值为:

MSB…LSB

-11/21/41/8…2-16

一个十进制小数乘以32768之后,再将其十进制整数部分转换成十六进制数,就能得到这个十进制小数的2的补码表示了,如图8-4-1所示:

图8-4-1DSP定点运算中小数的表示

在汇编语言程序中,是不能直接写入十进制小数的。

如果要定义一个系数0.707,可以写成:

.word32768*707/1000

而不能写成32768*0.707。

㈡小数乘法

先看一个小数乘法的例子(假设字长4位,累加器8位):

上述乘积是7位,当将其送到累加器时,为保持乘积的符号,必须进行符号位扩展,这样,累加器中的值为11110100(-0.09375),出现了冗余符号位。

原因是:

即两个带符号数相乘,得到的乘积带有2个符号位,造成错误的结果。

解决冗余符号位的办法是:

在程序中设定状态寄存器ST1中的FRCT(小数方式)位为1,在乘法器将结果传送至累加器时就能自动地左移1位,累加器中的结果为:

Szzzzzz0(Q7格式),即11101000(-0.1875),自动地消去了两个带符号数相乘时产生的冗余符号位。

所以,在小数乘法编程时,应当事先设置FRCT位:

SSBXFRCT

MPY*AR2,*AR3,A

STHA,@Z

这样,C54x就完成了Q15*Q15=Q15的小数乘法。

三、实验任务

编制并调试一个计算小数乘法的程序段。

㈠编制程序

题B3-1:

编制一个计算

的程序段,已知其中

a1=0.1a2=0.2a3=-0.3a4=0.4

x1=0.8x2=0.6x3=-0.4x4=-0.2

汇编程序如下:

;***编制计算小数乘法运算的程序段。

其中数据均为小数***

;***a1=0.1a2=0.2a3=-0.3a4=0.4***

;***x1=0.8x2=0.6x3=-0.4x4=-0.2***

.title"chef.asm"

.mmregs

.defstart,_c_int00

.bssx,4

.bssa,4

.bssy,1

.data

table:

.word1*32768/10

.word2*32768/10

.word-3*32768/10

.word4*32768/10

.word8*32768/10

.word6*32768/10

.word-4*32768/10

.word-2*32768/10

.text

_c_int00

bstart

nop

nop

start:

SSBXFRCT

STM#0,SWWSR

STM#x,AR1

RPT#7

MVPDtable,*AR1+

STM#x,AR2

STM#a,AR3

STM#y,AR4

RPTZA,#3

MAC*AR2+,*AR3+,A

STHA,*AR4

done:

Bdone

该程序运行的结果y=0x1EB7=0.24。

㈡建立汇编源程序

点击CCSC5000图标,进入CCS环境。

再点击File→New→SourceFile,打开一个空白文档。

将chef.asm程序逐条输入。

点击File→Save,将出现如图8-4-2的窗口,选择C:

\ti\myprojcets\chenfa子目录,在文件名一栏中输入chef,并选择保存类型为AssemblySourceFiles(*.asm),按下保存,以上汇编程序被存盘。

图8-4-2保存汇编源程序

㈢建立链接命令文件

点击File→New→SourceFile,打开一个空白文档。

逐条输入链接命令文件:

/*chef.cmd*/

chef.obj

-mchef.map

-ochef.out

MEMORY

{

PAGE0:

ROM:

origin=0080h,length=1000h

ROM:

origin=0060h,length=10h

PAGE1:

OTHER:

origin=0400h,length=40h

}

SECTIONS

{

.text:

{}>ROMPAGE0

.data:

{}>ROMPAGE0

.bss:

{}>OTHERPAGE1

.stack:

{}>OTHERPAGE1

}

图8-4-3

点击File→Save,将出现如图8-4-2的窗口,选择C:

\ti\myprojcets\chenfa子目录,在文件名一栏中输入chef,并选择保存类型为TICommandLanguageFile(*.cmd),按下保存,以上链接命令程序chef.cmd被存盘。

㈣创建一个新工程

在Project菜单中选择New项,将弹出SaveNewProjectAs窗口。

选择C:

\ti\myprojcets\chenfa目录并打开,在文件名一栏键入chef,此时默认的文件保存类型为.mak。

CCS将创建一个名为chef.mak的工程,此文件保存了工程的设置信息及工程中的文件引用情况。

㈤将有关文件添加到工程中

⑴从Project菜单中选取AddFilestoProject命令,选择文件chef.asm。

双击打开按钮将chef.asm添加到工程中。

⑵点击Project→AddFilestoProject,将chef.cmd添加入工程文件中,此文件的作用是将块(Sections)映射到存储器中。

逐层打开Project各级目录前面的+号,可以看到工程结构如图8-4-3所示。

双击chef.asm打开文件,可以观察和修改chef.asm文件内容。

㈥汇编、编译和连接产生.out文件

点击Project菜单中RebuildAll,将在监视窗口显示汇编、编译和链接的相关信息:

asm500chef.asmchef.obj-s

TMS320C54xCOFFAssemblerVersion3.50

Copyright(c)1996-1999TexasInstrumentsIncorporated

PASS1

PASS2

NoErrors,NoWarnings

lnk500chefa.mak

TMS320C54xCOFFLinkerVersion3.50

Copyright(c)1996-1999TexasInstrumentsIncorporated

BuildComplete,

0Errors,0Warnings.

如果没有错误,则将产生chef.out文件。

㈦加载并运行.out文件

图8-4-4Memory选项窗口

执行菜单命令File→LoadProgram,选择chef.out并打开,将RebuildAll生成的程序加载到DSP中。

CCS将自动打开一个反汇编窗口,显示加载程序的反汇编指令。

运行程序点击Debug→Run。

单步执行程序则点击Debug→StepInto,或单击F8键。

若需要设置断点进行调试,则将光标移至准备设置断点的一行,按下

图标;再点击Debug→Run。

㈧观察运行结果

程序调试到断点处或结束处,我们常常需要观察运行的结果。

CCS提供了观察DSP内存数据空间和程序空间的服务。

由本实验任务.asm源程序和.cmd链接程序,我们可以看出本程序的结果y放置在MEMORY内存data空间0408H单元中。

点击View→Memory,将出现如图8-4-4所示的选项窗口,将Address选择改为0x0400,按下OK,将在汇编窗口显示选定的data空间的内容(y=0x1EB7=0.24)。

※※※※※※※※※※※※※※※※※※※※

当结果数据错误时,可检查源程序进行修改。

修改完毕,可重新汇编、链接,再加载运行.out文件,直到结果正确。

四、实验设备

微机主机一台(已安装CCSC5000软件包)

五、思考题

㈠定点DSP中如何处理小数?

㈡如何在.asm文件和.cmd文件中确定某一数据在DSP内存中的位置?

 

实验15 定点小数除法运算

一、实验目的

㈠了解DSP定点运算中小数除法的处理方法。

㈡进一步掌握汇编源程序的建立、汇编、链接过程,练习使用CCS进行程序调试的方法。

二、实验原理

在一般的DSP中,都没有除法器硬件,那是因为除法器硬件代价很高,所以就没有专门的除法指令。

同样在C54x中也没有一条单周期的16位除法指令。

但是,利用一条条件减法指令(SUBC指令),加上重复指令RPT#15,就可以实现两个无符号数的除法运算。

条件减法指令的功能如下:

SUBCSmem,src;(src)-(Smem)<<15→ALU输出端

;如果ALU输出端≥0,则(ALU输出端)<<1+1→src

;否则(src)<<1→src

三、实验任务

编制并调试一个计算除法的程序段。

除法程序的调试过程请参照上一实验进行,此处仅给出汇编源程序。

除法有两种情况:

㈠|被除数|<|除数|,商为小数

题1:

编写0.4÷(-0.8)的程序段。

;***编制计算除法运算的程序段。

其中|被除数|<|除数|,商为小数***

.title"chuf.asm"

.mmregs

.defstart,_c_int00

.bssnum,1

.bssden,1

.bssquot,1

.data

table.word4*32768/10;0.4

.word-8*32768/10;-0.8

.text

_c_int00

bstart

nop

nop

start:

STM#num,AR1

RPT#1

MVPDtable,*AR1+;传送2个数据至分子、分母单元

STM#den,AR1

LD*AR1-,16,A;将分母移到累加器A(31-16)

MPYA*AR1+;(num)*(A(32-16))->B,获取商的符号

;(在累加器B中)

ABSA;分母取绝对值

STHA,*AR1-;分母绝对值存回原处

LD*AR1+,16,A;分子->A(32-16)

ABSA;分子取绝对值

RPT#14;15次减法循环,完成除法

SUBC*AR1,A

XC1,BLT;如果B〈0(商是负数)则需要变号

NEGA

STLA,*(quot);保存商

.END

该题的结果应为0xC000=-0.5。

㈡|被除数|≥|除数|,商为整数

题2:

编写16384÷512的程序段。

与上题仅有四处改动:

.word4*32768/10改为.word16384

.word-8*32768/10改为.word512

LD*AR1+,16,A改为LD*AR1+,A

RPT#14改为RPT#15

该题的结果应为0x0020=32。

四、实验设备

微机主机一台(已安装CCSC5000软件包)

五、思考题

㈠定点DSP中如何处理小数除法?

㈡如何在观察运算的结果?

 

实验16 用Simulator调试FIR数字滤波器

一、实验目的:

㈠了解一个FIR数字滤波器DSP程序的设计、编写和建立的过程。

㈡学习使用simulator调试滤波器程序的方法。

了解使用simulator进行程序调试,如何输入测试信号,观察输出结果。

二、实验原理:

㈠FIR滤波器的结构和数据存储方式

对于一个FIR滤波器,假定其冲激响应为

,输入信号为x(n),则有以下差分方程:

其对应的滤波器传递函数为:

可以用横截型(又称直接型或卷积型)FIR数字滤波器的结构图表示(图8-6-1)。

图8-6-1横截型FIR滤波器的结构图

由上面的公式和结构图可知,FIR滤波算法实际上是一种乘法累加运算。

它不断地从输入端读入样本值x(n),经延时(

),做乘法累加,再输出滤波结果y(n)。

在实际编程中,

的实现方法有两种:

线性缓冲区法和循环缓冲区法。

本实验采用了循环缓冲区法。

循环缓冲区法的主要特点是:

对于N级FIR滤波器,在数据存储区开辟一个称为滑窗的具有N个单元的缓冲区,滑窗中存放最新的N个输入样本值。

每次输入新的样本时,新的样本将改写滑窗中最老的数据,其它数据则不需要移动。

编写程序时利用片内BK(循环缓冲区长度)寄存器对滑窗进行间接寻址,因而循环缓冲区地址是首尾相邻的。

如图8-6-2所示,图中假定N=6。

图8-6-2利用循环缓冲区法实现

假定第一次执行完

后,间接寻址的辅助寄存器ARx指向x(n-5)。

然后,从I/O口输入数据x(n+1),将原来存放x(n-5)的数据存储器单元改写为x(n+1)。

同样,当进行完第二次乘法累加运算

后,ARx最后指向x(n-4)。

这时,再从I/O口输入数据x(n+2),将原来存放x(n-4)的数据存储器单元改写为x(n+2)。

……

利用循环缓冲区法的主要优点是:

不需要移动数据,可将循环缓冲区定位在数据存储器的任何位置(而线性缓冲区则要求必须定位在DARAM中)。

本实验是一个使用CCS的simulator进行滤波器基本程序调试的实验,其输入信号x(n)用.inc文件输入。

㈡FIR数字滤波器的设计

FIR数字滤波器的设计可以采用C、Fortron等高级语言来实现,其编程较为复杂。

我们采用MATLAB中信号处理工具箱的有关指令,可以很方便地求出FIR滤波器系数。

例:

设计一个FIR低通滤波器,通带边界频率为1500Hz,通带波纹小于1dB;阻带边界频率为2000Hz,阻带衰减大于40dB;采样频率为8000Hz。

FIR滤波器的设计可以用MATLAB窗函数法进行,例如选择Hamming窗,其程序为:

b=fir1(16,1500/8000*2);

FIR数字滤波器系数b为:

b0=1.16797e-018

b1=0.00482584

b2=0.00804504

b3=-0.00885584

b4=-0.0429174

b5=-0.029037

b6=0.0972537

b7=0.283423

b8=0.374525

b9=0.283423

b10=0.0972537

b11=-0.029037

b12=-0.0429174

b13=-0.00885584

b14=0.00804504

b15=0.00482584

b16=1.16797e-018

将上述系数存盘,建立一个数据文件(如fir01.txt)。

㈢建立DSP汇编程序的FIR滤波器系数文件

上述系数必须转换成Q15格式,并放置在DSP汇编程序的.inc文件中,进行FIR滤波器的汇编程序的汇编、链接时,inc文件将被自动地加入到工程中去。

从MATLAB中产生的fir01.txt文件,通过执行转换命令,将自动变换为firdata.inc滤波器系数文件。

转换命令为(在MATLAB下):

firdatfir01.txt

将产生firdata.inc文件。

其内容如下:

N.set17

COFF_FIR:

.sect"COFF_FIR"

.word0

.word158

.word263

.word-290

.word-1406

.word-951

.word3186

.word9287

.word12272

.word9287

.word3186

.word-951

.word-1406

.word-290

.word263

.word158

㈣产生滤波器输入信号的文件

在使用CCS的Simulator进行滤波器特性的测试时,需要输入时间信号x(n)。

以下是一个产生输入信号的C语言程序,这个信号是频率为1000Hz和2500Hz的正弦波合成的波形。

文件名为firinput.c。

#include

#include

voidmain()

{

inti;

doublef[256];

FILE*fp;

if((fp=fopen("firin.inc","wt"))==NULL)

{

printf("can'topenfile!

\n");

return;

}

fprintf(fp,"INPUT:

.sect%cINPUT%c\n",'"','"');

for(i=0;i<=255;i++)

{f[i]=sin(2*3.14159*i*1000/8000)+sin(2*3.14159*i*2500/8000);

fprintf(fp,".word%1d\n",(long)(f[i]*16384/2));

}

fclose(fp);

}

该程序将产生名为firin.inc的输入信号程序。

㈤FIR数字滤波器的汇编程序

FIR数字滤波器汇编程序如下:

************一个FIR滤波器源程序fir.asm*****************

.mmregs

.globalstart

.defstart,_c_int00

INDEX.set1

KS.set256

.copy"lpin.inc";x(n)在程序区0x00A6

.copy"lpdata.inc";Bn

.data

OUTPUT.space1024;输出在数据区0x2400

FIR_DP.usect"FIR_VARS",0

D_FIN.usect"FIR_VARS",1

D_FOUT.usect"FIR_VARS",1

COFFTAB.usect"FIR_COFF",N

DATABUF.usect"FIR_BFR",N

BOS.usect"STACK",0Fh

TOS.usect"STACK",1

.text

.asgAR0,INDEX_P

.asgAR4,DATA_P

.asgAR5,COFF_P

.asgAR6,INBUF_P

.asgAR7,OUTBUF_P

_c_int00

bstart

nop

nop

start:

STM#COFFTAB,COFF_P

RPT#N-1

MVPD#COFF_FIR,*COFF_P+

STM#INDEX,INDEX_P

STM#DATABUF,DATA_P

RPTZA,#N-1

STLA,*DATA_P+

STM#(DATABUF+N-1),DATA_P

STM#COFFTAB,COFF_P

FIR_TASK:

STM#INPUT,INBUF_P

STM#OUTPUT,OUTBUF_P

STM#KS-1,BRC

RPTBDLOOP-1

STM#N,BK

LD*INBUF_P+,A

FIR_FILTER:

STLA,*DATA_P+%

RPTZA,N-1

MAC*DATA_P+0%,*COFF_P+0%,A

STHA,*OUTBUF_P+

LOOP:

EENDBEEND

.end

㈥FIR滤波器链接程序

对应以上汇编程序的链接程序fir.cmd如下:

fir.obj

-mfir.map

-ofir.out

MEMORY

{

PAGE0:

ROM1(RIX):

ORIGIN=0080H,LENGTH=1000H

PAGE1:

INTRAM1(RW):

ORIGIN=2400H,LENGTH=0200H

INTRAM2(RW):

ORIGIN=2600H,LENGTH=0100H

INTRAM3(RW):

ORIGIN=2700H,LENGTH=0100H

INTRAM4(RW):

ORIGIN=2800H,LENGTH=0040H

B2B(RW):

ORIGIN=0070H,LENGTH=10H

图8-6-3Graph选项窗口

}

SECTIONS

{

.text:

{}>ROM1PAGE0

.data:

{}>INTRAM1PAGE1

FIR_COFF:

{}>INTRAM2PAGE1

FIR_BFR:

{}>INTRAM3PAGE1

FIR_VARS:

{}>INTRAM4PAGE1

.stack:

{}>B2BPAGE1

}

三、实验任务:

㈠在CCS上建立fir工程,并运行fir.out程序。

建立fir工程,对汇编程序进行汇编、链接,如有错误则进行修改、调试,当汇编、链接成功后,运行fir.out程序。

㈡观察输入信号的波形及频谱

单击View→Graph→Time/Frequency,按图8-6-3改变各选项。

其中,由.cmd可知输入信号的数据放在程序区0x00a6开始的地址中。

其波形为频率为1000Hz和2500Hz正弦信号的合成信号。

将图8-6-3“DisplayType”项改为“FFTMagnitude”,则将显示输入信号的频谱图。

㈢观察输出信号的波形及频谱

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

当前位置:首页 > 初中教育 > 科学

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

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