DSP实验报告相关HD8680 通信技术应用讲义正文Word文档格式.docx
《DSP实验报告相关HD8680 通信技术应用讲义正文Word文档格式.docx》由会员分享,可在线阅读,更多相关《DSP实验报告相关HD8680 通信技术应用讲义正文Word文档格式.docx(22页珍藏版)》请在冰豆网上搜索。
编制一个计算
的程序段,已知其中
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
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:
.bss:
OTHERPAGE1
.stack:
}
图8-4-3
\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
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)的程序段。
***编制计算除法运算的程序段。
其中|被除数|<
|除数|,商为小数***
chuf.asm"
.mmregs
.bssnum,1
.bssden,1
.bssquot,1
.data
table.word4*32768/10;
0.4
.word-8*32768/10;
-0.8
.text
bstart
nop
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。
㈠定点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
㈣产生滤波器输入信号的文件
在使用CCS的Simulator进行滤波器特性的测试时,需要输入时间信号x(n)。
以下是一个产生输入信号的C语言程序,这个信号是频率为1000Hz和2500Hz的正弦波合成的波形。
文件名为firinput.c。
#include<
stdio.h>
math.h>
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
OUTPUT.space1024;
输出在数据区0x2400
FIR_DP.usect"
FIR_VARS"
0
D_FIN.usect"
1
D_FOUT.usect"
1
COFFTAB.usect"
FIR_COFF"
N
DATABUF.usect"
FIR_BFR"
BOS.usect"
STACK"
0Fh
TOS.usect"
.asgAR0,INDEX_P
.asgAR4,DATA_P
.asgAR5,COFF_P
.asgAR6,INBUF_P
.asgAR7,OUTBUF_P
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
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
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选项窗口
.text:
{}>
ROM1PAGE0
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”,则将显示输入信号的频谱图。
㈢观察输出信号的波形及频谱