西工大DSP大作业_西工大dsp大作业

2020-02-27 其他范文 下载本文

西工大DSP大作业由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“西工大dsp大作业”。

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

一、实验要求

1、自行安装CCS3.3版本,配置和运行CCS2、熟悉CCS开发环境,访问读写DSP的寄存器AC0-AC3,ARO-AR7, PC, T0-T3

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

4、编写一个最简单的定点DSP程序,计算下面式子 y=0.1*1.2+35*20+15*1.65、采用定点DSP进行计算,确定每个操作数的定点表示方法, 最后结果的定点表示方法,并验证结果

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

二、实验原理

DSP芯片的定点运算---Q格式(转)2008-09-03 15:47 DSP芯片的定点运算

1.数据的溢出:

1>溢出分类:

上溢(overflow): 下溢(underflow)

2>溢出的结果:

Max Min

Min Max unsigned char 0 255 signed char-128 127 unsigned int 0 65535 signed int-32768 32767

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

例:signed int :32767+1=-32768;-32768-1=32767

unsigned char:255+1=0;

0-1=255

3>为了避免溢出的发生,一般在DSP中可以设置溢出保护功能。当发生溢出时,自动将结果设置为最大值或最小值。

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

1>定义变量为浮点型(float,double),用C语言抹平定点处理器和浮点处理器 的区2>放大若干倍表示小数。比如要表示精度为0.01的变量,放大100倍去运算,运算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> 使用时使用适中的定标,既可以表示一定的整数复位也可以表示小数复位,如 对于2812的32位系统,使用Q15格式,可表示-65536.0~65535.999969482区间内的数据。

三、实验步骤

1.双击Simulator。,启动CCS的仿真平台的配着选项。选择C5410 Device

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

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

4.在ccs平台中将用到的程序导入到平台中,点击project—>add file to project。选择多个文件时,可以按住ctrl键。

5.将程序中的start改为_main,INT_2改为_int_2。然后点击保存。

源程序代码

***************************************************** * * *****************************************************.title “example.asm”

;为汇编源程序取名.mmregs

;定义存储器映象寄存器

STACK

.usect

“STACK”,10h

;分配10个单元的堆栈空间.b

a,4

;为系数a分配4个单元的空间.b

x,4

;为变量x分配4个单元的空间.b

y,1

;为结果y 分配1个单元的空间.def

_c_int00

;定义标号_c_int00

example.asm

y=0.1*x1.2+35*20+15*x1.6

.data

;定义数据代码段

table:.word

1,2,3,4

;在标号table开始的8个单元中

.word

8,6,4,2

;为这8个单元赋初值.text

;定义文本代码段 _c_int00 : STM #0,SWWSR

STM

#STACK+10h,SP

STM

#a,AR1

RPT

#7

MVPD table,*AR1+ CALL

SUM

end:

B

end

SUM:STM

#a,AR3

STM

#x,AR4

RPTZ

A,#3

MAC

*AR3+,*AR4+,A STL

A,@y

RET

.end

;软件等待状态寄存器置0,不设等待

;设置堆栈指针初值

;AR1 指向 a的地址

;从程序存储器向数据存储器

;重复传送 8个数据

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

;循环等待

;将系数a的地址赋给AR3

;将变量x的地址赋给AR3

;将A清0,并重复执行下条指令4次

;执行乘法并累加,结果放在A中

;将A的低字内容送结果单元y

;结束子程序

;结束全部程序

Map文件

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

TMS320C55x COFF Linker PC Version 3.83

****************************************************************************** >> Linked Mon May 31 11:03:33 2010

OUTPUT FILE NAME:

ENTRY POINT SYMBOL: “_main” addre: 0000e000

MEMORY CONFIGURATION

name

origin

length

used

attr

fill

-----------------------------------------------------------PAGE 0: EPROM

0000e000

00000100 0000001d RWIX

vecs

0000ff80

00000004 00000000 RWIX PAGE 1: SPRAM

00000060

00000020 0000000b RWIX

DARAM

00000080

00000100 0000001a RWIX

SECTION ALLOCATION MAP

output

attributes/ section

page

origin

length

input sections--------------------------------

----------------.text

0

0000e000

0000001d

0000e000

0000001d

LAB4A.obj(.text)

.b

00000060

0000000b

UNINITIALIZED

四、心得体会

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

实验2 CCS下的FFT算法程序设计

一、实验目的CCS下的FFT算法程序设计

二、实验要求

提供一个CCS下的C语言例程,在CCS下,仿照例程,任选雨中FIR滤波、IIR滤波、FFT算法,采用C语言完成代码的编写、编译、链接、下载和运行,输入数据,滤波器系数任选,并给出运算结果。1)目的2)工程文件的构成,并附图 3)打印源代码 4)打印编译成功的信息 5)打印map文件 6)程序下载的截图过程

三)运行结果

三、实验步骤

1、在ccs平台中将用到的程序导入到平台中,点击project—>add file to project。选择多个文件时,可以按住ctrl键。

2.将所有的程序段中的start改为_main,将fft.Asm中的 K_FFT_SIZE.set 32;N K_LOGN.set 5;LOG(N)改为

K_FFT_SIZE.set 64;N K_LOGN.set 6;LOG(N)

3、对源文件进行编译(注意先对每个.asm文件先进行编译,以防止程序有错误),没有错误时进行链接。

4.点击菜单fileload program。装载.out文件

四、实验结果

五、源程序代码

***************************************************************** 函数原型:void FFT(struct compx *xin,int N)函数功能:对输入的复数组进行快速傅里叶变换(FFT)输入参数:*xin复数结构体组的首地址指针,struct型

*****************************************************************/ void FFT(struct compx *xin){ int f,m,nv2,nm1,i,k,l,j=0;struct compx u,w,t;nv2=FFT_N/2;//变址运算,即把自然顺序变成倒位序,采用雷德算法 nm1=FFT_N-1;for(i=0;i

while(k

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

l=log(2)N le=2

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

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文件

****************************************************************************** TMS320C55x COFF Linker PC Version 3.3 ****************************************************************************** >> Linked Sat May 30 23:48:27 2015

OUTPUT FILE NAME: ENTRY POINT SYMBOL: “_main” addre: 0000e000

MEMORY CONFIGURATION

name origin length used attr fill-----------------------------------------------------------PAGE 0: EPROM 0000e000 00000100 00000019 RWIX

PAGE 1: SPRAM 00000060 00000020 0000000a RWIX DARAM 00000080 00000100 00000000 RWIX

SECTION ALLOCATION MAP

output attributes/ section page origin length input sections------------------------------------------------.text 0 0000e000 00000012 0000e000 00000012 LAB2B.obj(.text)

.data 0 0000e012 00000005 0000e012 00000005 LAB2B.obj(.data)

.vectors 0 0000e017 00000002 0000e017 00000002 VECTORS.obj(.vectors)

.b 1 00000060 0000000a UNINITIALIZED 00000060 0000000a LAB2B.obj(.b)

GLOBAL SYMBOLS: SORTED ALPHABETICALLY BY Name addre name------------00000060.b 0000e012.data 0000e000.text 00000060 ___b__ ffffffff ___cinit__ 0000e012 ___data__ 0000e017 ___edata__ 0000006a ___end__ 0000e012 ___etext__ ffffffff ___pinit__ 0000e000 ___text__ 00000000 __lflags UNDEFED _c_int00 0000e000 _main ffffffff cinit 0000e017 edata 0000006a end 0000e012 etext ffffffff pinit

GLOBAL SYMBOLS: SORTED BY Symbol Addre

addre name------------00000000 __lflags 00000060 ___b__ 00000060.b 0000006a ___end__ 0000006a end 0000e000.text 0000e000 ___text__ 0000e000 _main 0000e012.data 0000e012 etext 0000e012 ___data__ 0000e012 ___etext__ 0000e017 edata 0000e017 ___edata__ ffffffff pinit ffffffff ___pinit__ ffffffff ___cinit__ ffffffff cinit UNDEFED _c_int00

[19 symbols]

六、心得体会

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

《西工大DSP大作业.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
西工大DSP大作业
点击下载文档
相关专题 西工大dsp大作业 作业 西工大 DSP 西工大dsp大作业 作业 西工大 DSP
[其他范文]相关推荐
    [其他范文]热门文章
      下载全文