西工大DSP大作业_第1页
西工大DSP大作业_第2页
西工大DSP大作业_第3页
西工大DSP大作业_第4页
西工大DSP大作业_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验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:

2、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+132768; -32768-132767 unsigned char:255+10; 0-1255 3>为了避免溢出的发生,一般在DSP中可以设置

3、溢出保护功能。当发生溢出时,自动将结果设置为最大值或最小值。 2定点处理器对浮点数的处理: 1>定义变量为浮点型(float,double),用C语言抹平定点处理器和浮点处理器 的区别,但是程序的代码庞大,运算速度也慢。 2>放大若干倍表示小数。比如要表示精度为0.01的变量,放大100倍去运算, 运算完成后再转化。但是这个做法比较僵硬,如要将上面的变量重新定义成0.001精度,又需要放大1000倍,且要重新编写整个程序,考虑溢出等问题。3>定标法:Q格式:通过假定小数点位于哪一位的右侧,从而确定小数的精度。 Q0:小数点在第0位的后面,即我们一般采用的方法 Q15 小数点在

4、第15位的后面,014位都是小数位。 转化公式: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减少 4Q格式的应用格式 实际应用中,浮点运算大都时候都是既有整数部分,也有小数部分的。所以要选择一个适当的定标格式才能更好的处理运算。一般用如下两种方法:1> 使用时使用适中的定标,既可以

5、表示一定的整数复位也可以表示小数复位,如 对于2812的32位系统,使用Q15格式,可表示65536.065535.999969482区间内的数据。三、实验步骤1. 双击,启动CCS的仿真平台的配着选项。选择C5410 Device Simulator。2.点击project菜单栏的new选项,新建一个LAB的工程注意存储的路径。3. 把下图中用到的文件拷到工程文件目录的文件路径下。4.在ccs平台中将用到的程序导入到平台中,点击project>add file to project。选择多个文件时,可以按住ctrl键。5将程序中的start改为_main,INT_2改为_int_2。然

6、后点击保存。源程序代码* example.asm y=0.1*x1.2+35*20+15*x1.6 *.title “example.asm” ;为汇编源程序取名.mmregs ;定义存储器映象寄存器STACK .usect “STACK”,10h ;分配10个单元的堆栈空间.bss a,4 ;为系数a分配4个单元的空间.bss x,4 ;为变量x分配4个单元的空间.bss y,1 ;为结果y 分配1个单元的空间.def _c_int00 ;定义标号_c_int00   .data ;定义数据代码段table: .word 1,2,3,4 ;在标号table开始的8个单元中 .wor

7、d 8,6,4,2 ;为这8个单元赋初值.text ;定义文本代码段_c_int00 :STM #0,SWWSR ;软件等待状态寄存器置0,不设等待STM #STACK+10h,SP ;设置堆栈指针初值STM #a,AR1 ;AR1 指向 a的地址 RPT #7 ;从程序存储器向数据存储器 MVPD table,*AR1+ ;重复传送 8个数据 CALL SUM ;调用 SUM 实现乘法累加和的子程序end: B end ;循环等待SUM:STM #a,AR3 ;将系数a的地址赋给AR3STM #x,AR4 ;将变量x的地址赋给AR3RPTZ A,#3 ;将A清0,并重复执行下条指令4次MAC

8、 *AR3+,*AR4+,A ;执行乘法并累加,结果放在A中STL A,y ;将A的低字内容送结果单元yRET ;结束子程序 .end ;结束全部程序Map文件* TMS320C55x COFF Linker PC Version 3.83 *>> Linked Mon May 31 11:03:33 2010OUTPUT FILE NAME: <lab4a.out>ENTRY POINT SYMBOL: "_main" address: 0000e000MEMORY CONFIGURATION name origin length used att

9、r fill - - - - - -PAGE 0: EPROM 0000e000 00000100 0000001d RWIX vecs 0000ff80 00000004 00000000 RWIXPAGE 1: SPRAM 00000060 00000020 0000000b RWIX DARAM 00000080 00000100 0000001a RWIXSECTION ALLOCATION MAP output attributes/section page origin length input sections- - - - -.text 0 0000e000 0000001d

10、0000e000 0000001d LAB4A.obj (.text).bss 1 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)

11、打印源代码4)打印编译成功的信息5)打印map文件6)程序下载的截图过程三) 运行结果三、 实验步骤1、在ccs平台中将用到的程序导入到平台中,点击project>add file to project。选择多个文件时,可以按住ctrl键。2将所有的程序段中的start改为_main,将fft.Asm中的K_FFT_SIZE .set 32 ;NK_LOGN .set 5 ;LOG(N)改为K_FFT_SIZE .set 64 ;NK_LOGN .set 6 ;LOG(N)3、对源文件进行编译(注意先对每个.asm文件先进行编译,以防止程序有错误),没有错误时进行链接。4点击菜单file

12、à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<nm1;i+) if(i<j)

13、 /如果i<j,即进行变址 t=xinj; xinj=xini; xini=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 int le,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=l

14、og(2)N le=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分别表示

15、参加蝶形运算的两个节点 t=EE(xinip,u); /蝶形运算,详见公式 xinip.real=xini.real-t.real; xinip.imag=xini.imag-t.imag; xini.real=xini.real+t.real; xini.imag=xini.imag+t.imag; u=EE(u,w); /改变系数,进行下一个蝶形运算 Map文件* TMS320C55x COFF Linker PC Version 3.3 *>> Linked Sat May 30 23:48:27 2015OUTPUT FILE NAME: <lab.out>EN

16、TRY POINT SYMBOL: "_main" address: 0000e000MEMORY CONFIGURATION name origin length used attr fill - - - - - -PAGE 0: EPROM 0000e000 00000100 00000019 RWIXPAGE 1: SPRAM 00000060 00000020 0000000a RWIX DARAM 00000080 00000100 00000000 RWIXSECTION ALLOCATION MAP output attributes/section page

17、 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).bss 1 00000060 0000000a UNINITIALIZED 00000060 0000000a LAB2B.obj (.bs

18、s)GLOBAL SYMBOLS: SORTED ALPHABETICALLY BY Name address name- -00000060 .bss0000e012 .data0000e000 .text00000060 _bss_ffffffff _cinit_0000e012 _data_0000e017 _edata_0000006a _end_0000e012 _etext_ffffffff _pinit_0000e000 _text_00000000 _lflagsUNDEFED _c_int000000e000 _mainffffffff cinit0000e017 edata0000006a end0000e012 etextffffffff pinitGLOBAL SYMBOLS: SORTED BY Symbol Address address name- -00000000 _lflags00000060 _bss_00000060 .bss0000006a _end_0000006a end

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论