西工大DSP大作业.docx

上传人:b****6 文档编号:6313769 上传时间:2023-01-05 格式:DOCX 页数:13 大小:180.02KB
下载 相关 举报
西工大DSP大作业.docx_第1页
第1页 / 共13页
西工大DSP大作业.docx_第2页
第2页 / 共13页
西工大DSP大作业.docx_第3页
第3页 / 共13页
西工大DSP大作业.docx_第4页
第4页 / 共13页
西工大DSP大作业.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

西工大DSP大作业.docx

《西工大DSP大作业.docx》由会员分享,可在线阅读,更多相关《西工大DSP大作业.docx(13页珍藏版)》请在冰豆网上搜索。

西工大DSP大作业.docx

西工大DSP大作业

试验1基于CCS简单定点DSP程序

一、试验要求

1、自行安装CCS3.3版本,配置和运行CCS

2、熟悉CCS开发环境,访问读写DSP寄存器AC0-AC3,ARO-AR7,PC,T0-T3

3、结合C5510存放器空间分配,访问DSP内部RAM

4、编写一个最简单定点DSP程序,计算下面式子y=0.1*1.2+35*20+15*1.6

5、采取定点DSP进行计算,确定每个操作数定点表示方法,最终结果定点表示方法,并验证结果

6、对编写程序进行编译、链接、运行、断点实施、单步抽并给出map映射文件

二、试验原理

DSP芯片定点运算---Q格式(转)-09-0315:

47DSP芯片定点运算

1.数据溢出:

1>溢出分类:

上溢(overflow):

下溢(underflow)

2>溢出结果:

MaxMin

MinMaxunsignedchar0255signedchar-128127unsignedint065535signedint-3276832767

上溢在圆圈上按数据逆时针移动;下溢在圆圈上顺时钟移动。

例:

signedint:

32767+1=-32768;-32768-1=32767unsignedchar:

255+1=0;0-1=255

3>为了避免溢出发生,通常在DSP中能够设置溢出保护功效。

当发生溢出时,自动将结果设置为最大值或最小值。

2.定点处理器对浮点数处理:

1>定义变量为浮点型(float,double),用C语言抹平定点处理器和浮点处理器区分,不过程序代码庞大,运算速度也慢。

2>放大若干倍表示小数。

比如要表示精度为0.01变量,放大100倍去运算,运算完成后再转化。

不过这个做法比较僵硬,如要将上面变量重新定义成0.001精度,又需要放大1000倍,且要重新编写整个程序,考虑溢出等问题。

3>定标法:

Q格式:

经过假定小数点位于哪一位右侧,从而确定小数精度。

Q0:

小数点在第0位后面,即我们通常采取方法Q15小数点在第15位后面,0~14位都是小数位。

转化公式:

Q=(int)(F×pow(2,q))F=(float)(Q×pow(2,-q))

3.Q格式运算

1>定点加减法:

须转换成相同Q格式才能加减

2>定点乘法:

不一样Q格式数据相乘,相当于Q值相加

3>定点除法:

不一样Q格式数据相除,相当于Q值相减

4>定点左移:

左移相当于Q值增加

5>定点右移:

右移相当于Q降低

4.Q格式应用格式

实际应用中,浮点运算大都时候都是现有整数部分,也有小数部分。

所以要选择一个合适定标格式才能愈加好处理运算。

通常见以下两种方法:

1>使用时使用适中定标,既能够表示一定整数复位也能够表示小数复位,如对于281232位系统,使用Q15格式,可表示-65536.0~65535.区间内数据。

三、试验步骤

1.双击

开启CCS仿真平台配着选项。

选择C5410DeviceSimulator。

2.点击project菜单栏new选项,新建一个LAB工程注意存放路径。

3.把下图中用到文件拷到工程文件目录文件路径下。

4.在ccs平台中将用到程序导入到平台中,点击project—>addfiletoproject。

选择多个文件时,能够按住ctrl键。

5.将程序中start改为_main,INT_2改为_int_2。

然后点击保留。

源程序代码

*****************************************************

*example.asmy=0.1*x1.2+35*20+15*x1.6*

*****************************************************

.title“example.asm”;为汇编源程序取名

.mmregs;定义存放器映象寄存器

STACK.usect“STACK”,10h;分配10个单元堆栈空间

.bssa,4;为系数a分配4个单元空间

.bssx,4;为变量x分配4个单元空间

.bssy,1;为结果y分配1个单元空间

.def_c_int00;定义标号_c_int00

 

.data;定义数据代码段

table:

.word1,2,3,4;在标号table开始8个单元中

.word8,6,4,2;为这8个单元赋初值

.text;定义文本代码段

_c_int00:

STM#0,SWWSR;软件等候状态寄存器置0,不设等候

STM#STACK+10h,SP;设置堆栈指针初值

STM#a,AR1;AR1指向a地址

RPT#7;从程序存放器向数据存放器

MVPDtable,*AR1+;反复传送8个数据

CALLSUM;调用SUM实现乘法累加和子程序

end:

Bend;循环等候

SUM:

STM#a,AR3;将系数a地址赋给AR3

STM#x,AR4;将变量x地址赋给AR3

RPTZA,#3;将A清0,并反复实施下条指令4次

MAC*AR3+,*AR4+,A;实施乘法并累加,结果放在A中

STLA,@y;将A低字内容送结果单元y

RET;结束子程序

.end;结束全部程序

 

Map文件

*****************************************************************************

TMS320C55xCOFFLinkerPCVersion3.83

******************************************************************************

>>LinkedMonMay3111:

03:

33

OUTPUTFILENAME:

ENTRYPOINTSYMBOL:

"_main"address:

0000e000

 

MEMORYCONFIGURATION

nameoriginlengthusedattrfill

-----------------------------------------------------------

PAGE0:

EPROM0000e000000001000000001dRWIX

vecs0000ff800000000400000000RWIX

PAGE1:

SPRAM00000060000000200000000bRWIX

DARAM00000080000001000000001aRWIX

 

SECTIONALLOCATIONMAP

outputattributes/

sectionpageoriginlengthinputsections

------------------------------------------------

.text00000e0000000001d

0000e0000000001dLAB4A.obj(.text)

.bss1000000600000000bUNINITIALIZED

四、心得体会

经过这次试验,我愈加熟悉CCS开发环境,访问读写DSP寄存器AC0-AC3,ARO-AR7,PC,T0-T3。

 

试验2CCS下FFT算法程序设计

一、试验目

CCS下FFT算法程序设计

二、试验要求

提供一个CCS下C语言例程,在CCS下,仿照例程,任选雨中FIR滤波、IIR滤波、FFT算法,采取C语言完成代码编写、编译、链接、下载和运行,输入数据,滤波器系数任选,并给出运算结果。

1)目

2)工程文件组成,并附图

3)打印源代码

4)打印编译成功信息

5)打印map文件

6)程序下载截图过程

三)运行结果

三、试验步骤

1、在ccs平台中将用到程序导入到平台中,点击project—>addfiletoproject。

选择多个文件时,能够按住ctrl键。

2.将全部程序段中start改为_main,将fft.Asm中

K_FFT_SIZE.set32;N

K_LOGN.set5;LOG(N)

改为

K_FFT_SIZE.set64;N

K_LOGN.set6;LOG(N)

3、对源文件进行编译

(注意先对每个.asm文件优异行编译,以预防程序有错误),没有错误时进行链接

4.点击菜单file→loadprogram。

装载.out文件

 

四、试验结果

 

五、源程序代码

*****************************************************************函数原型:

voidFFT(structcompx*xin,intN)函数功效:

对输入复数组进行快速傅里叶变换(FFT)输入参数:

*xin复数结构体组首地址指针,struct型*****************************************************************/voidFFT(structcompx*xin){intf,m,nv2,nm1,i,k,l,j=0;

structcompxu,w,t;

nv2=FFT_N/2;//变址运算,即把自然次序变成倒位序,采取雷德算法

nm1=FFT_N-1;

for(i=0;i

{if(i

xin[j]=xin[i];

xin[i]=t;}

k=nv2;//求j下一个倒位序while(k<=j)//假如k<=j,表示j最高位为1{

j=j-k;//把最高位变成0

k=k/2;//k/2,比较次高位,依次类推,逐一比较,直到某个位为0}

j=j+k;//把0改为1}{intle,lei,ip;//FFT运算核,使用蝶形运算完成FFT运算

f=FFT_N;

for(l=1;

(f=f/2)!

=1;l++)//计算l值,即计算蝶形级数;

for(m=1;m<=l;m++)//控制蝶形结级数

{//m表示第m级蝶形,l为蝶形级总数

l=log

(2)Nle=2<<(m-1);//le蝶形结距离,即第m级蝶形蝶形结相距le点

lei=le/2;//同一蝶形结中参与运算两点距离

u.real=1.0;//u为蝶形结运算系数,初始值为1

u.imag=0.0;

w.real=cos(PI/lei);//w为系数商,即目前系数与前一个系数商

w.imag=-sin(PI/lei);

for(j=0;j<=lei-1;j++)//控制计算不一样种蝶形结,即计算系数不一样蝶形结

{

for(i=j;i<=FFT_N-1;i=i+le)//控制同一蝶形结运算,即计算系数相同蝶形结

{

ip=i+lei;//i,ip分别表示参与蝶形运算两个节点

t=EE(xin[ip],u);//蝶形运算,详见公式xin[ip].real=xin[i].real-t.real;xin[ip].imag=xin[i].imag-t.imag;xin[i].real=xin[i].real+t.real;xin[i].imag=xin[i].imag+t.imag;

}

u=EE(u,w);//改变系数,进行下一个蝶形运算

}

}

}

}

 

Map文件

******************************************************************************

TMS320C55xCOFFLinkerPCVersion3.3

******************************************************************************

>>LinkedSatMay3023:

48:

27

OUTPUTFILENAME:

ENTRYPOINTSYMBOL:

"_main"address:

0000e000

 

MEMORYCONFIGURATION

nameoriginlengthusedattrfill

-----------------------------------------------------------

PAGE0:

EPROM0000e0000000010000000019RWIX

PAGE1:

SPRAM00000060000000200000000aRWIX

DARAM000000800000010000000000RWIX

 

SECTIONALLOCATIONMAP

outputattributes/

sectionpageoriginlengthinputsections

------------------------------------------------

.text00000e00000000012

0000e00000000012LAB2B.obj(.text)

.data00000e01200000005

0000e01200000005LAB2B.obj(.data)

.vectors00000e01700000002

0000e01700000002VECTORS.obj(.vectors)

.bss1000000600000000aUNINITIALIZED

000000600000000aLAB2B.obj(.bss)

 

GLOBALSYMBOLS:

SORTEDALPHABETICALLYBYName

addressname

------------

00000060.bss

0000e012.data

0000e000.text

00000060___bss__

ffffffff___cinit__

0000e012___data__

0000e017___edata__

0000006a___end__

0000e012___etext__

ffffffff___pinit__

0000e000___text__

00000000__lflags

UNDEFED_c_int00

0000e000_main

ffffffffcinit

0000e017edata

0000006aend

0000e012etext

ffffffffpinit

 

GLOBALSYMBOLS:

SORTEDBYSymbolAddress

addressname

------------

00000000__lflags

00000060___bss__

00000060.bss

0000006a___end__

0000006aend

0000e000.text

0000e000___text__

0000e000_main

0000e012.data

0000e012etext

0000e012___data__

0000e012___etext__

0000e017edata

0000e017___edata__

ffffffffpinit

ffffffff___pinit__

ffffffff___cinit__

ffffffffcinit

UNDEFED_c_int00

[19symbols]

六、心得体会

经过这次试验,我愈加熟悉CCS开发环境,CCS下C语言例程下FFT算法,采取C语言完成代码编写、编译、链接、下载和运行方法。

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

当前位置:首页 > 自然科学 > 化学

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

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