DSP实验报告相关HD8680 通信技术应用讲义正文.docx
- 文档编号:4322936
- 上传时间:2022-11-29
- 格式:DOCX
- 页数:22
- 大小:147.01KB
DSP实验报告相关HD8680 通信技术应用讲义正文.docx
《DSP实验报告相关HD8680 通信技术应用讲义正文.docx》由会员分享,可在线阅读,更多相关《DSP实验报告相关HD8680 通信技术应用讲义正文.docx(22页珍藏版)》请在冰豆网上搜索。
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”,则将显示输入信号的频谱图。
㈢观察输出信号的波形及频谱
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DSP实验报告相关HD8680 通信技术应用讲义正文 DSP 实验 报告 相关 HD8680 通信 技术 应用 讲义 正文