人人范文网 调研报告

dsp调研报告(精选多篇)

发布时间:2021-06-21 07:55:25 来源:调研报告 收藏本文 下载本文 手机版

推荐第1篇:dsp报告

第一章、基本算术运算 .....................................1 1.1、实验目的和要求 ...................................1 1.

2、实验原理 .........................................1 1.3、实验内容 .........................................2 第二章、C54X的汇编语言程序设计 ...........................7 2.

1、实验目的和要求 ...................................7 2.2、实验原理 .........................................7 2.

3、实验内容 .........................................8 第三章 、FFT算法的实现 ..................................13 3.1、实验目的和要求 ..................................13 3.

2、实验原理 ........................................13 3.3、实验内容 ........................................14 第四章 、ASK、PSK、FSK调制的实现 ........................16 4.

1、实验目的 ........................................16 4.2、实验原理 ........................................16 4.

3、实验内容 ........................................16 心得体会 ................................................20

0

第一章、基本算术运算

1.1、实验目的和要求

加、减、乘、除是数字信号处理中最基本的算术运算。DSP 中提供了大量的指令来 实现这些功能。本实验学习使用定点DSP 实现16 位定点加、减、乘、除运算的基本方法 和编程技巧。

1.2、实验原理

(1)、定点 DSP 中的数据表示方法

54X 是16 位的定点DSP。一个16 位的二进制数既可以表示一个整数,也可以表示一个小数。当它表示一个整数时,其最低位(D0)表示2,D1 位表示2,次高位(D14) 表示2。如果表示一个有符号数时,最高位(D15)为符号位,0 表示正数,1 表示负 数。例如,07FFFH 表示最大的正数32767(十进制),而0FFFFH 表示最大的负数-1(负

数用2 的补码方式显示)。当需要表示小数时,小数点的位置始终在最高位后,而最高位D15)表示符号位。这样次高位(D14)表示2 ,然后是2,最低位(D0)表示2301141215。所以 04000H 表示小数 0.5,01000H 表示小数2 = 0.125 ,而0001H 表示16 位定点(DSP 能表示的最小的小数(有符号)215 =0.000030517578125。在后面的实验中,除非有特别说明,我们指的都是有符号数。在C54X 中,将一个小数用16 位定点格式来表示的方法是用2乘以该小数,然后取整。

从上面的分析可以看出,在DSP 中一个16 进制的数可以表示不同的十进制数,或 者是整数,或者是小数(如果表示小数,必定小于1),但仅仅是在做整数乘除或小数乘 除时,系统对它们的处理才是有所区别的,而在加减运算时,系统都当成整数来处理。 (2)实现 16 位定点加法

C54X 中提供了多条用于加法的指令,如ADD,ADDC,ADDM 和ADDS。其中

ADDS 用于无符号数的加法运算,ADDC 用于带进位的加法运算(如32 位扩展精度加 法),而ADDM 专用于立即数的加法。 (3)实现 16 位定点减法

C54X 中提供了多条用于减法的指令,如SUB,SUBB,SUBC 和SUBS。其中SUBS 用于无符号数的减法运算,SUBB 用于带进位的减法运算(如32 位扩展精度的减法), 而SUBC 为移位减,DSP 中的除法就是用该指令来实现的。SUB 指令与ADD 指令一样, 有许多的寻址方式。

(4)实现 16 位定点整数乘法 15 1

在C54X 中提供了大量的乘法运算指令,其结果都是32 位,放在A 或B 寄存器 中。乘数在C54X 的乘法指令很灵活,可以是T 寄存器、立即数、存贮单元和A 或B 寄存器的高16 位。有关乘法指令的详细使用说明请参考《TMS320C54X 实用教程》。 在C54X 中,一般对数据的处理都当做有符号数,如果是无符号数乘时,要使用MPYU 指令。这是一条专用于无符号数乘法运算的指令,而其它指令都是有符号数的乘法。 5) 实现 16 位定点小数乘法

在 C54X 中,小数的乘法与整数乘法基本一致,只是由于两个有符号的小数相乘, 其结果的小数点的位置在次高的后面,所以必须左移一位,才能得到正确的结果。C54X 中提供了一个状态位FRCT,将其设置为1 时,系统自动将乘积结果左移一位。但注意 整数乘法时不能这样处理,所以上面的实验中一开始便将FRCT 清除。两个小数(16 位) 相乘后结果为32 位,如果精度允许的话,可以只存高16 位,将低16 位丢弃,这样仍可 得到16 位的结果。

(6) 实现 16 位定点整数除法

在 C54X 中没有提供专门的除法指令,一般有两种方法来完成除法。一种是用乘法 来代替,除以某个数相当于乘以其倒数,所以先求出其倒数,然后相乘。这种方法对于 除以常数特别适用。另一种方法是使用SUBC 指令,重复16 次减法完成除法运算。下 面我们以temp1/temp2 为例,说明如何使用SUBC 指令实现整数除法。其中变量temp1为被除数,temp2 为除数,结果即商存放在变量temp3 中。在完成整数除法时,先判断

结果的符号。方法是将两数相乘,保存A 或B 的高16 位以便判断结果的符号。然后只 做两个正数的除法,最后修正结果的符号。为了实现两个数相除,先将被除数装入A 或 B 的低16 位,接着重复执行SUBC 指令,用除数重复减16 次后,除法运算的商在累加 器的低16 位,余数在高16 位。 (7) 实现 16 位定点小数除法

在 C54X 中实现16 位的小数除法与前面的整数除法基本一致,也是使用循环的 SUBC 指令来完成。但有两点需要注意:第一,小数除法的结果一定是小数(小于1), 所以被除数一定小于除数。这与整数除法正好相反。所以在执行SUBC 指令前,应将被 除数装入A 或B 寄存器的高16 位,而不是低16 位。其结果的格式与整数除法一样,A 或B 寄存器的高16 位为余数,低16 位为商。第二,与小数乘法一样,应考虑符号位对 结果小数点的影响。所以应对商右移一位,得到正确的有符号数。

1.3、实验内容

本实验需要使用C54X汇编语言实现加、减、乘、除的基本运算,并通过DES的存 贮器显示窗口观察结果。实验分两步完成: (1) 编写实验程序代码

本实验的汇编源程序代码主要分为六个部分:加法、减法、整数乘法、小数乘法 整数除法和小数除法。每个部分后面都有一条需要加断点的标志语句:nop 当执行到这条加了断点的语句时,程序将自动暂停。这时你可以通过“存贮器窗口”检 查计算结果。当然你看到的结果都是十六进制的数。实验源程序请参见附录。 (2)用ccs simulator调试运行并观察结果

在完成实验程序代码的输入,并使用ccs进行编译并连接,得到out文件后,就可 以在simulator 上调试运行。 调试步骤如下:

a.启动ccs simulator。

2

b. 点击file ->load program,找到exer1.out(在产品光盘的code\base_operation\debug下)并装入。这时可在反汇编窗口看到程序代码。

c.打开“Memory”窗口,并在其中选择要查看的存贮器地址段:0x080-0x08e。

d.在反汇编窗口中在每个“nop”指令处都设一个断点,方法有两种:1.用鼠标双击该 指令将其点亮即可。2.在菜单栏中选择debugÆbreakpoint,然后在弹出的对话框中 键入欲加断点的地址即可(注意地址的格式)。 e.单击Run快捷键(或者F5按钮),启动执行基本算术运算程序,程序在执行完加法 运算后自动暂停。通过register window窗口可以看到寄存器A的内容为0x46,这 正是加法运算的结果。(注意,若在硬件仿真器环境下调试,受DSP指令流水线的影响,断点处可能看不到A寄存器的变化。)同样,在Memory窗口中,可以看到0x81,0x82,0x88的内容为分别为0012,0034,0x46。执行加法运算后,将0x81和0x82的内容相加结果放在0x88单元。 实验结果如下:

f.在Memory窗口中用鼠标左键双击0x81单元,这时可以修改该内存单元的内容。输 入新的数据0x0ffee(十进制的-18),编辑内容时请直接输入FFEE(十六进制),然 后回车确认,便完成对0x81单元的修改。

g.在register window窗口中修改PC值,方法也是鼠标左键双击PC寄存器的内容,输入新的PC值0x1085(编辑内容时直接输入1805),并用回车键确认。 h.单击Run快捷键(或者F5按钮),程序从当前PC继续运行,重新计算0x81和0x82 的和,结果在0x88中。当程序再次暂停时,可以看到A寄存器和0x88的内容为0x22 (十进制的34),这正是我们希望的结果:-18+52=34。 实验结果如下:

i.单击Run快捷键(或者F5按钮),程序从当前PC继续运行,完成减法运算。当程 序再次暂停时(断点位于0x1093),可以看到0x83和0x84单元的内容分别为FFEE 和0012,B寄存器的内容为ffdc0000,而0x89的内容为0xffdc(十进制-36),这正

是我们希望的结果: -18-18=-36。注意,该减法操作使用了辅助寄存器寻址,所以计算结果在B寄存器的高16位。 是实验结果如下:

j.单击Run快捷键(或者F5按钮),程序从当前PC继续运行,完成整数乘法运算。 当程序再次暂时(断点位于0x109d),可以看到0x81和0x82单元的内容分别为0012和0034,A寄存器的内容为000003A8,这正是我们希望的结果:18*52=936(0x3a8)。这时我们可以用1个16位的内容单元来保存结果,如将A寄存器的低16位存入0x8b单元。 实验结果如下:

3

但如果将0x81的内容修改为0x2000(十进制的8192),在register window中将PC修改为1098,然后继续运行,重新计算乘法。当程序完成乘法暂停时,可以看到A寄存器的内容为00068000,这也是一个正确的结果:8192*52=425984(0x68000)。此时将无法用一个16位的存贮单元来保存A寄存器中的结果。

实验结果如下:

k. 单击Run快捷键或者(F5按钮),程序从当前PC继续运行,完成小数乘法运算。 当程序再次暂停时(断点位于0x10A6),可以看到0x83和0x84单元的内容分别为4000和b548,A寄存器的内容为40000000,乘法的结果在B寄存器中为daa40000,这正是我们希望的结果:0.5*(-0.58374)=-0.29187(0x0daa4)。对于小数乘法,一般情况都可以用1个16位的内容单元将B寄存器的高16保存(如存入0x8c单元)。 实验结果如下:

l. 单击Run快捷键(或者F5按钮),程序从当前PC继续运行,完成整数除法运算。当程序再次暂时(断点位于0x10bb),可以看到0x81,0x82,0x8d和0x8e单元的内容分别为0034,0012,FFFE 和0010,这正是我们希望的结果:52 除以-18,商为-2(0xfffe) ,余数为16(0x10)。

m.单击Run快捷键(或者F5按钮),程序从当前PC继续运行,完成小数除法运算。当程序再次暂停时(断点位于0x10d2),可以看到0x81,0x82和0x8f单元的内容分别为4000,4ab8和6da3,这正是我们希望的结果:0.5/0.58374=0.8565457(0x6da3)。 实验结果如下:

n. 如果以上程序运行不正确,请检查代码是否输入正确,还可以在源代码中插入断点 调试,注意对中间结果的观察。 思考题 :

(1) 在减法操作中使用了辅助寄存器ar2,ar3,请说明在执行完减法计算后辅助寄存器 ar2和ar3的值为多少?

4

结果如下:

(2) 在小数乘法中使用了置FRCT标志为1的指令。如果将该语句取消,那么B寄存器的结果是多少?想想什么时候应该设置FRCT标志? 结果如下:

取消之前:

取消之后:

(3) 如何实现无符号数的乘法?

答:输入指令MPYU Smem,dst,输出结果为uns(T)*uns(Smem) (4)

请利用本实验程序计算以下算式的结果

①、0.25*0.58374

②、0.25/0.5

③、4653/345

④、0.789687/0.876

6

第二章、C54X的汇编语言程序设计

2.1、实验目的和要求

汇编语言程序设计是应用软件的基础,主要任务是利用汇编指令和伪指令编写源程序以完成指定的功能。本届实训我们将采用汇编语言指令、汇编伪指令、宏伪指令和规定的数字与字符来完成实验。通过实验帮助我们对汇编语言的理解和运用。

2.2、实验原理

1、汇编语言源程序由.asm为扩展名,可以用任意的编辑器编写源代码。源文件格式中助记符指令源语句的每行通常包含4个部分:标记区、助记符区、操作数区和注释区。

2、汇编语言中的常数与字符串

汇编器支持8种类型的常数:①二进制整数;②八进制整数;③十进制整数;④十六进制整数;⑤浮点数;⑥汇编时间常数;⑦字符常数;⑧字符串

3、汇编源程序中的符号用于标号、常数和替代字符。符号名最多可长达200个字符,由字母、数字以及下划线和美元符号等组成。

4、堆栈的使用方法

当程序调用中断服务程序或子程序时,需要将程序计数器PC的值和一些重要的寄存器值进行压栈保护,以便程序返回时能从间断处继续执行。

5、控制程序

TMS320C54x具有丰富的程序控制指令利用这些指令可以执行分支转移、子程序调用子程序返回、条件操作及循环操作等控制操作。控制程序包括:分支操作程序、循环操作程序。

6、算术运算程序

基本算术运算包括:加减法运算、乘法运算、除法运算、长字和并行运算。

7、实验中所需的“.cmd”文件如下: MEMORY { PAGE 0: EPROM: org=01000H len=01F80H VECS: org=0FF80H len=0004H PAGE 1: SPRAM: org=0060H len=0030H DARAM: org=0090H len=0200H } SECTIONS { .text :>EPROM PAGE 0 .data :>EPROM PAGE 0 .b :>SPRAM PAGE 1 } 7

2.3、实验内容

1、计算z(xy)*8w

程序如下:

.title "mjj.asm" .mmregs STACK .usect "STACK",10h .b x,1 .b y,1 .b w,1 .b z,1 .def _c_int00 .data table: .word 6,7,9 _c_int00: 结果图如下:

start: STM #0,SWWSR

STM #STACK+10h,SP STM #x,AR1

MVPD table,*AR1+ LD @x,A ADD @y,A LD A,3 SUB @w,A STL A,@z .end

2、计算y

ax。 iii14程序如下:

.title "jj.asm" .mmregs STACK .usect "STACK",10h .b a,4 .b x,4 .b y,1 .def _c_int00 .data table: .word 1,2,3,4 .word 8,6,4,2 .text _c_int00: start: STM #0,SWWSR 结果图如下:

STM #STACK+10h,SP STM #a,AR1 RPT #7

MVPD table,*AR1+ CALL SUM end: B end

SUM: STM #a,AR2 STM #x,AR3 RPTZ A,#3

MAC *AR2+,*AR3+,A STL A,@y RET .end

3、计算yax iii14程序如下:

.title "2xh.asm" .mmregs STACK .usect "STACK",10H ;a1=0.3 a2=0.2 a3=-0.4 a4=0.1 ;x1=0.6 x2=0.5 x3=-0.1 x4=-0.2 .b x,4 .b a,4 .b y,1 .def _c_int00 .data table: .word 3*32768/10 .word 2*32768/10 .word -4*32768/10

.word 1*32768/10

.word 6*32768/10

.word 5*32768/10 结果图如下:

.word -1*32768/10

.word -2*32768/10 .text _c_int00:

start: SSBX FRCT STM #x,AR3

RPT #7

MVPD table,*AR3+

STM #x,AR4

STM #a,AR5 RPTZ A,#3

MAC *AR4+,*AR5+,A

STH A,@y end: B end .end

4、计算yx1*a1x2*a2 程序如下:

.title "cc.asm" .mmregs STACK .usect "STACK",10h .b x1,1 .b a1,1 .b x2,1 .b a2,1 .b y,1 .def _c_int00 .data table: .word 1,2,3,4 _c_int00: 结果图如下:

start: STM #0,SWWSR

STM #STACK+10h,SP STM #x1,AR1 MVPD table,*AR1+ LD @x1,T MPY @a1,B LD @x2,T MAC @a2,B STL B,@y STH B,@y+1 .end 9

5、计算y

ax iii110 .title " cj.asm" .mmregs STACK .usect "STACK",10h .b a,10 .b x,10 .b y,1 .def _c_int00 .data table: .word 1,2,3,4,5,6,7,8,9,2 .word 8,6,4,2,3,1,5,2,1,3 .text _c_int00: start: STM #0,SWWSR

结果图如下:

STM #STACK+10h,SP STM #a,AR1 RPT #19

MVPD table,*AR1+ CALL SUM end: B end

SUM: STM #a,AR2 STM #x,AR3 RPTZ A,#9

MAC *AR2+,*AR3+,A STL A,@y RET .end

6、求一个数的绝对值 程序如下:

.title "jj.asm" .mmregs STACK .usect "STACK",10h .b x,1 .def _c_int00 .data table: .word -9 .text _c_int00: start: STM #0,SWWSR 结果图如下:

STM #STACK+10h,SP STM #x,AR1 MVPD table,*AR1 LD *AR1,A BC end,AGT ABS A STL A,@x end: B end .end 10

7、aixi(i=1,2,3,4)找出最大值 程序如下:

.title "mm.asm" .mmregs STACK .usect "STACK",10h .b a,4 .b x,4 .b y,1 .def _c_int00 .data table: .word 1,2,3,4 .word 6,4,5,3 .text _c_int00: start: STM #0,SWWSR STM #STACK+10h,SP STM #2,AR4

结果图如下:

STM #a,AR1 RPT #7

MVPD table,*AR1+ STM #a,AR2 STM #x,AR3 LD *AR2+,T MPY *AR3+,A LOOP1: LD *AR2+,T MPY *AR3+,B MAX A STL A,@y

BANZ LOOP1,*AR4- end: B end .end

8、对一个数组进行初始化:x[8]={0,0,0,0,0,0,0,0}.程序如下:

.title "hh.asm" start: STM #0,SWWSR .mmregs STM #STACK+10h,SP STACK .usect "STACK",10h STM #x,AR1 .b x,8 LD #0,A .def _c_int00 RPTZ A,#7 .data STL A,*AR1+ table: .word 1,2,3,4,5,6,7,8 end: B end .text .end _c_int00: 结果图如下:

11

9、对数组X[8]中的每个元素加1.程序如下:

.title "hh.asm" .mmregs STACK .usect "STACK",10h .b x,8 .def _c_int00 .data table: .word 1,2,3,4,5,6,7,8 .text _c_int00: start: STM #0,SWWSR STM #STACK+10h,SP STM #x,AR1 结果图如下:

RPT #7

MVPD table, *AR1+ LD #1,16,B STM #7,BRC STM #x,AR4 RPTB next-1

ADD *AR4,16,B,A STH A,*AR4+

next: LD #0,B end: B end .end

10、编写16348/512的程序段 程序如下: .title "mm.asm" .mmregs STACK .usect "STACK",10h .b num,1 .b den,1 .b quot,1 .def _c_int00 .def start .data table: .word 16384 .word 512 .text _c_int00: start: STM #0,SWWSR STM #STACK+10h,SP 结果图如下:

STM #num,AR1 RPT #1

MVPD table,*AR1+ LD @den,16,A MPYA @num ABS A

STH A,@den LD @num,A ABS A RPT #15 SUBC @den,A XC 1,BLT NEG A

STL A,@quot .end 12

第三章、FFT算法的实现

3.1、实验目的和要求

在数字信号处理系统中,FFT 作为一个非常重要的工具经常使用,甚至成为DSP 运 算能力的一个考核因素。FFT 是一种高效实现离散付氏变换的算法。离散付氏变换的目 的是把信号由时域变换到频域,从而可以在频域分析处理信息,得到的结果再由付氏逆 变换到时域。

本实验的目的在于学习FFT 算法,及其在TMS320C54X 上的实现,并通过编程掌握C54X的存储器管理、辅助寄存器的使用、位倒序寻址方式等技巧,同时练习使用CCS 的探针和图形工具。另外在BIOS 子目录下是一个使用DSP/BIOS 工具实现FFT 的程序。通过该程序,你可以使用DSP/BIOS 提供的分析工具评估FFT 代码执行情况。

3.2、实验原理

1、基 2 按时间抽取FFT 算法

对于有限长离散数字信号{x[n]},0 ≤ n ≤ N-1,其离散谱{x[k]}可以由离散付氏变换 (DFT)求得。DFT 的定义为:X(K)N1n0x[n]en0nkNN1j(2)nkN K=0,1,.....N-1可以方便的把它改写为如下形式:X(K)x[n]W k=0,1,....,N-1不难看出,WN 是周期性(nmN)(kLN)nk的,且周期为N,即WN m,l=0,1,2....WN的周期性是DFT 的关WN键性质之一。为了强调起见,常用表达式WN取代W 以便明确其周期是N。

由 DFT 的定义可以看出,在x[n]为复数序列的情况下,完全直接运算N 点DFT 需要(N1)2 次复数乘法和N(N-1)次加法。因此,对于一些相当大的N 值(如1024)来说,直接计算它的DFT 所作的计算量是很大的。FFT 的基本思想在于,将原有的N点序列分成两个较短的序列,这些序列的DFT 可以很简单的组合起来得到原序列的DFT。例如,若N 为偶数,将原有的N 点序列分成两个(N/2)点序列,那么计算N 点DFT 将只需要约

13

[(N/2)2 ·2]=N/2 次复数乘法。即比直接计算少作一半乘法。因子(N/2)2表示直接计算(N/2)点DFT 所需要的乘法次数,而乘数2 代表必须完成两个DFT。

上述处理方法可以反复使用,即(N/2)点的DFT 计算也可以化成两个(N/4)点的DFT(假定N/2 为偶数),从而又少作一半的乘法。这样一级一级的划分下去一直到最后就划分成两点的FFT 运算的情况。

2、实数 FFT 运算

对于离散傅立叶变换(DFT)的数字计算,FFT 是一种有效的方法。一般假定输入序列是复数。当实际输入是实数时,利用对称性质可以使计算DFT 非常有效。一个优化的实数FFT 算法是一个组合以后的算法。原始的2N 个点的实输入序列组合成一个N 点的复序列,之后对复序列进行N 点的FFT 运算,最后再由N 点的复数输出拆散成2N 点的复数序列,这2N 点的复数序列与原始的2N 点的实数输入序列的DFT输出一致。使用这种方法,在组合输入和拆散输出的操作中,FFT 运算量减半。这样利用实数FFT算法来计算实输入序列的DFT 的速度几乎是一般复FFT 算法的两倍。本实验就用这种方法实现了一个256 点实数FFT(2N = 256)运算。

a.实数 FFT 运算序列的存储分配

如何利用有限的 DSP 系统资源,合理的安排好算法使用的存储器是一个比较重要的问题。 b.基二实数 FFT 运算的算法

该算法主要分为四步:第一步,输入数据的组合和位倒序;第二步,N 点复数FFT;第三步,分离复数 FFT 的输出为奇部分和偶部分;第四步,产生最后的 N = 256 点的复数FFT 结果。

3、计算所求信号的功率

由于最后所得的 FFT 数据是一个复数,为了能够方便的在虚拟频谱仪上观察该信号的特征,我们通常对所得的FFT 数据进行处理取其实部和虚部的平方和,即求得该信号的功率。 23.3、实验内容

本实验在CCS 下完成256 点的实数FFT,并通过CCS 的图形显示工具观察结果。

其主程序为初始化,并通过探针工具读入256 点方波数据(在文件fft.dat 中,该数据文 件可以通过程序fft_data.c 修改,但注意数据的绝对值不要超过0x23ff)。FFT 的实现由 四个子程序代码bit_rev、fft、unpack 和power 代码完成。实验可以分为以下几步: (1) 启动 CCS,在Project 菜单选项中打开FFT 目录下的fft.pjt 文件。 (2) 用鼠标展开左面项目栏,打开 fft.asm 源程序。

(3) 使用 Bulid 命令完成编译、连接,并使用Load Program 将生成的fft.out 装入5410 片内存储器。

(4) 将光标移动到“call get_input”行,并设置一个探针点。将光标移动到下一行“nop”语句,使用工具设置一个断点。

(5) 在 File 菜单中打开选项“File I/O”,使用“Add File”在FFT 目录下打开数据文件 fft.dat,然后修改“Addre”参数为0x2300,修改“Length”参数为256。这表示程序执行到探针点时,将从fft.dat 文件中读出256 个数据,并将数据放入0x2300开始的存储器中。你可以选择“Wrap Around”,循环使用该数据文件。 (6)选择“Add Probe Point”,将探针点与数据文件连接起来。选择探针点,然后在“Connect”选项中选择需要使用的数据文件名,再选择“Replace”,按确定键完成。可以看到“Probe”项被自动修改为“Connected”,表示探针已经与数据文件成功相连。

(7)完成探针设置后,可以使用F5 或“Run”命令启动程序运行。程序执行到探针点时

14

自动从数据文件读出256 个点的数据放入输入缓冲0x2300。 (8)在“View”菜单项下选择“Graph ->Time/Frequency”,打开一个图形工具以便显示 输入数据波形。将“Start Addre”改为0x2300,将“Acquisition Buffer Size”改为128,将“DSP Data Type”改为“16-bit signed integer”,这样即可显示128 个输入点波形。 实验结果图如下:

(9)调整窗口显示大小,将光标移动到源程序的“b _c_int00”这行,使用Debug 中的 “Run to Cursor”项,程序将执行到这行并停下。这时FFT 程序已经计算完成。

再打开一个波形显示窗口,这次仅仅将“Start Addre”改为0x2200,便可以显示计算 完成后的谱波形。

(10)选择“Debug”下的“Animate”运行程序,这时程序将循环运行,不断从数据文件 fft.dat 中读出数据,并计算其频谱。这时你可以看到连续的输入/输出波形。

(11)选择原始数据波形窗口,单击鼠标右键,进入“Properties”属性对话框。你可以将 “Display Type”改为“FFT Magnitude”,这时输入数据将显示其频谱。

思考题:

||SUB *AR2+0%,B

答:SACDD B,*AR2,#1

DST B,*AR1,

LD *AR2+0%,16,B

SUB AR1,B (1) ST B,*AR3+

||LD *AR2,A 答:SACDD B,*AR3+,#1

LD *AR2,16,A

(2) ST B,*AR2 (3) ST B,*PX+ ||MPY *QX+,A 答:SACCD B,*PX+,BNEQ

MPY *QX+,A

15

第四章、ASK、PSK、FSK调制的实现

4.1、实验目的

数字调制信号又称为键控信号,其调制过程是用键控的方法由基带信号对载频信号的振幅、频率及相位进行调制。这种调制的最基本方法有三种:振幅键控(ASK)、相移键控(PSK)、频移键控(FSK)。本节实训将通过CCS软件来实现对ASK、PSK、FSK的调制,并掌握它们之间的联系与不同。

4.2、实验原理

1、FSK频移键控的基本原理:用数字基带信号来控制高频载波频率的变化,使载波的频率在f1和f2之间变化。二进制频移信号可以看成两个不同载波的二进制振幅键控信号的叠加。

2、PSK相移键控的基本原理:用数字调制信号的正负控制载波相位。当数字信号的振幅为正时载波起始相位取0;当数字信号的振幅为负时,载波起始相位取180度。相移键控抗干扰能力强,但在解调是需要有一个正确的参考相位,即需要相干解调。

3、ASK振幅键控的基本原理:是用调制信号去控制高频正弦载波的幅度,使其按调制信号的规律变化的过程。

4.3、实验内容

1、FSK的实现

汇编语言程序:

.title"fsk_asm.asm" .global _fsk ;定义为全局变量,提供给C调用 .global _y1 ;C程序变量 .global _y2 ;C程序变量 .global _Pulse ;C程序变量 .global _FskSignal ;C程序变量 .mmregs .text _fsk: rsbx CPL stm #8-1,AR1 ;循环变量 256/32=8 stm #_y1, AR4

16

stm #_y2, AR2 stm #_Pulse, AR3 stm #_FskSignal, AR5 loop: ld *AR3, A bc freq500, AEQ ;若原始数字信号为0,则调频信号为频率为500Hz的正弦波 sub #1, A bc freq1000, AEQ ;若原始数字信号为1,则调频信号为频率为1000Hz的正弦波 fskend: addm #32, AR3 banz loop, *AR1- ret freq500: rpt #32-1 freq1000: rpt #32-1 mvdd *AR4+, *AR5+ mvdd *AR2+, *AR5+ addm #-32,AR4 addm #-32,AR2 b fskend b fskend .end C语言程序:

extern void fsk(); // fc=(0x2000/0x10000)*fs=1000Hz, fs#include "C54MATH.H" 固定在8000 DATA x[256]; } DATA y1[256]; //正弦信号1 sine( x, y2, N ); DATA y2[256]; //正弦信号2 //原始信号 DATA Pulse[256]; //被调信号 for(i=0;iGraph->Time/Frequency Graph, 号

//按照当前文件夹内给出的图 for(i=0;i

{ for(;;){}; x[i]=i*0x2000; } 结果图如下:

17

2、PSK的实现 程序如下:

extern void fsk();

#include "C54MATH.H" DATA x[256]; DATA y1[256];

//正弦信号1 DATA y2[256];

//正弦信号2 DATA Pulse[256]; //被调信号

DATA FskSignal[256]; //2FSK调制信号 #define N 256 void main() {

int i,j;

//产生一个500Hz的正弦信号作为调制信号

for(i=0;i

x[i]=i*0x1000;

// fc=(0x1000/0x10000)*fs=500Hz, fs固定在8000

} sine( x, y1, N ); //产生一个1000Hz的正弦信号作为调制信号

for(i=0;i

x[i]=-i*0x1000;

// fc=(0x2000/0x10000)*fs=1000Hz, fs固定在8000

实验结果图如下:

} sine( x, y2, N ); //原始信号

for(i=0;i

{

j=i/32;

switch (j%2)

{

case 0:

Pulse[i]=0;

break;

case 1:

Pulse[i]=1;

break;

}

} fsk(); //运行到此处后,打开View->Graph->Time/Frequency Graph,

//按照当前文件夹内给出的图形属性设置,即可显示2FSK信号

for(;;){};

} 18

3、ASK的实现

extern void fsk(); #include "C54MATH.H" DATA x[256]; DATA y1[256]; //正弦信号1 DATA y2[256]; //正弦信号2 DATA Pulse[256]; //被调信号

DATA FskSignal[256]; //2FSK调制信号 #define N 256 void main() { int i,j; //产生一个500Hz的正弦信号作为调制信号

for(i=0;i

case 0: y1[i]=0; break; }

} //产生一个1000Hz的正弦信号作为调制信号

for(i=0;i

实验结果图如下:

// fc=(0x2000/0x10000)*fs=1000Hz, fs固定在8000 }

sine( x, y2, N ); //原始信号

for(i=0;i

j=i/32;

switch (j%2) {

case 0: Pulse[i]=0; break;

case 1: Pulse[i]=1; break; } }

fsk(); //运行到此处后,打开View->Graph->Time/Frequency Graph,

//按照当前文件夹内给出的图形属性设置,即可显示2FSK信号

for(;;){}; } 19

心得体会

为期两个星期的实训结束了,这两个周的实训让我收获颇多。在实训中我深深体会到了DSP技术及应用这门课的博大精深,里面包含的知识很多,紧靠平时的理论课程来理解是远远不够的。在理论课程中我们主要学习了TMS320C54x的硬件结构、它的指令系统,汇编语言程序的开发工具、汇编语言的程序设计还有应用程序设计等内容。这次实训的内容主要是基本算术运算、C54X算法的汇编语言程序设计、FFT算法的实现以及ASK、FSK、PSK调制的实现。

这次的实训课程说难也不是很难但说简单它也绝对不简单,看似简单是东西做起来就不一定了,在实验的过程中也出现不少的问题。因为之前没有接触过这个软件,所以在开始实验前我们是先对CCS软件进行了了解,再通过实际操作熟悉软件,然后再做实训内容。在这次实训中我学到了如何使用CCS软件来进行简单的运算,并且能通过该软件来查看实验结果和修改结果。我们还做了FFT算法的实现并且对ASK、FSK、PSK进行了简单的调制,调制过程中遇到了很多麻烦,比如图形出不来或是出现不规则图形等等的问题。但经过我们不懈的努力、重复的实验,在实验结果出来并且正确的时候我的心情是激动的。在实训过程中我们遇到了不少困难。因为对软件的不熟悉,导致不知道从什么地方查看结果,查看结果不正确也不知道该从哪修改,不过在老师耐心的讲解和同学的热心帮助下,我们还是顺利的完成了实训。

20

通过这次实训我收获了很多,也成长了很多,明白了理论联系实际的重要性,还知道了“团结就是力量”的真理,希望在以后的学习工作中我能将我所学到的知识发挥得淋漓尽致。最后感谢老师的谆谆教诲,没有您耐心的教导我们不可能这么顺利就完成任务。

21

推荐第2篇:数字信号处理(DSP)课程设计报告

中南大学

数字信号处理课程设计报告

专业班级: 通信工程1201

指导老师:李宏

名:

号:

完成日期:2014年10月18日

现代信号处理是将信号表示并处理的理论和技术,而数字信号处理与模拟信号处理是信号处理的子集。在本次课程设计中主要以数字信号处理来解决问题。数字信号处理的目的是对真实世界的连续模拟信号进行测量或滤波,因此在进行数字信号处理之前需要将信号从模拟域转换到数字域,这通常通过模数转换器实现。而数字信号处理的输出经常也要变换到模拟域,这是通过数模转换器实现的。

数字信号处理的算法需要利用计算机或专用处理设备如数字信号处理器(DSP)和专用集成电路(ASIC)等。数字信号处理技术及设备具有灵活、精确、抗干扰强、设备尺寸小、造价低、速度快等突出优点,这些都是模拟信号处理技术与设备所无法比拟的。数字信号处理的核心算法是离散傅立叶变换(DFT),是DFT使信号在数字域和频域都实现了离散化,从而可以用通用计算机处理离散信号。而使数字信号处理从理论走向实用的是快速傅立叶变换(FFT),FFT的出现大大减少了DFT的运算量,使实时的数字信号处理成为可能、极大促进了该学科的发展。

MATLAB是矩阵实验室(Matrix Laboratory)的简称,和Mathematica、Maple并称为三大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户接口、连接其它编程语言的程序等。

一、课程设计目的:

1.全面复习课程所学理论知识,巩固所学知识重点和难点,将理论与实践很好地结合起来。

2.掌握信号分析与处理的基本方法与实现

3.提高综合运用所学知识独立分析和解决问题的能力; 4.熟练使用一种高级语言进行编程实现。

二、课程设计题目:

(一):

1) 生成信号发生器:能产生频率(或基频)为10Hz的周期性正弦波、三角波和方波信号。绘出它们的时域波形

2) 为避免频谱混叠,试确定各信号的采样频率。说明选择理由。 3)对周期信号进行离散傅立叶变换,为了克服频谱泄露现象,试确定截取数据的长度,即信号长度。分析说明选择理由。 4)绘出各信号频域的幅频特性和相频特性

5)以正弦周期信号为例,观察讨论基本概念(频谱混叠、频谱泄漏、整周期截取等)。

(二):

已知三个信号aip(n),经调制产生信号s(n)aip(n)cos(in/4),其中ai为

i1常数,p(n)为具有窄带特性的Hanning信号。将此已调信号通过信道传输,描述该信道的差分方程为

y( n)1.1172y(n1)0.9841y(n2)0.4022y(n3)0.2247y(n4)0.2247x(n)0.4022x(n1)0.9841x(n2)1.1172x(n3)x(n4)

得到接收信号y(n)s(n)*h(n)

1)分析Hanning信号p(n)的时域与频域特性 2)分析已调信号s(n)的时域与频域特性 3)分析系统的单位脉冲响应h(n) 4)分析接收信号y(n)的频谱

5)设计带通滤波器从接收信号y(n)中还原出三个已调信号。

3(三):图像信号相关处理

1)读入一幅彩色图像

2)将彩色图像进行三原色分解,分解出R、G、B分量,并用图像显示出来

3)将彩色图像灰度化,转换为灰度图像并显示

4)对灰度图像用几种典型的边缘检测算子进行边缘检测,显示检测出的边缘。

三、调试及结果分析(截图):

(一):

1)

频率为10Hz的周期性正弦波:

频率为10Hz的周期性三角波:

频率为10Hz的周期性方波:

2)采样频率不能过低,必须fs>=2fm,即采样频率必须大于或等于最高截止频率的二倍(对采样频率的要求,即采样频率要足够大,采样的值要足够多,才能不失真的恢复原信号)。题目中信号频率为10Hz,则采样频率应该大于或等于20Hz,这样的话采样离散信号才能够无失真的恢复到原来的连续信号。 3)截取数据长度(即信号长度)N=T*fs=2 4)

频率为10Hz的周期性正弦波的幅频特性和相频特性:

频率为10Hz的周期性三角波的幅频特性和相频特性:

频率为10Hz的周期性方波的幅频特性和相频特性:

5)

频谱混叠:一个信号的最高频率比如是fmax,那它的频谱就是在-fmax~fmax之间有值。对这个信号进行时域采样(就是取离散的点),设采样率为fs。有一个定理:对信号进行时域fs的采样,信号的频谱就会在频域以fs为周期重复。那么如果fs>=2fmax,可想而知,频域宽度为fs的频带内,是可以放得下一整个完整的频谱的,所以不会混叠。如果fs

频谱泄露:对于频率为fs的正弦序列,它的频谱应该只是在fs处有离散谱。但是,在利用DFT求它的频谱做了截短,结果使信号的频谱不只是在fs处有离散谱,而是在以fs为中心的频带范围内都有谱线出现,它们可以理解为是从fs频率上“泄露”出去的,这种现象称 为频谱“泄露”。

整周泣截取:与周期函数一样,周期信号是每隔时间T以后,信号重复出现。T就称为信号的周期。

N取100时:

N取200时:

(二):

1)Hanning信号p(n)的时域与频域特性:

2)已调信号s(n)的时域与频域特性:

3)系统的单位脉冲响应h(n):

4)接收信号y(n)的频谱:

5)(设计带通滤波器)从接收信号y(n)中还原出三个已调信号:

(三):

1)读入一幅彩色图像:

2)将彩色图像进行三原色分解,分解出R、G、B分量,并用图像显示出来:

3)将彩色图像灰度化,转换为灰度图像并显示:

4)对灰度图像用几种典型的边缘检测算子进行边缘检测,显示检测出的边缘:

四、源程序:

(一): 1):

周期性正弦波: fs=10; w=2*pi*fs; t=0:0.01:2; y=sin(w*t); plot(t,y);grid on; axis([0 2 -2 2]); title(\'正弦信号\');

周期性三角波: t=-0.3:0.01:0.3; y=sawtooth(10*pi*t,0.5); plot(t,y);grid on; axis([-0.3 0.3 -1.5 1.5]); title(\'三角波信号\')

周期性方波: t=0:0.001:0.5; y=square(2*pi*10*t,50); plot(t,y);grid on; axis([0 0.5 -1.5 1.5]); title(\'周期方波信号\')

4):

周期性正弦波: t=0:0.001:0.999; subplot(311) a=sin(20*pi*t); plot(t,a);grid on;title(\'sin20pi*t\');xlabel(\'T\'); b=fft(a); subplot(312); stem(t*1000,abs(b)/1000,\'fill\');xlabel(\'Hz\'); axis([-10 50 0 0.5]); grid on;title(\'幅频特性\') subplot(313) stem(t*1000,angle(b)/1000,\'fill\');xlabel(\'Hz\'); axis([0 100 -0.004 0.004]) grid on;title(\'相频特性\')

周期性三角波: t=-0.3:0.01:0.3; a=sawtooth(10*pi*t,0.5); subplot(311) plot(t,a);grid on; axis([-0.3 0.3 -1.5 1.5]); title(\'三角波信号\') b=fft(a); subplot(312) stem(t*100,abs(b)/100,\'fill\'); axis([0 50 0 0.5]); grid on;title(\'幅频特性\') subplot(313) stem(t*100,angle(b)/100,\'fill\'); axis([0 25 -0.04 0.04]); grid on;title(\'相频特性\') 周期性方波: t=0:0.001:0.5; a=square(2*pi*10*t,50); subplot(311) plot(t,a);grid on; axis([0 0.5 -1.5 1.5]); title(\'周期方波信号\') b=fft(a); subplot(312) stem(t*100,abs(b)/100,\'fill\'); axis([0 50 0 4]); grid on;title(\'幅频特性\') subplot(313) stem(t*100,angle(b)/100,\'fill\'); axis([0 5 -0.04 0.04]); grid on;title(\'相频特性\')

5):

N=100(或:N=200); T=1;

t=linspace(0,T,N); x=sin(2*pi*10*t); dt=t(2)-t(1); f=1/dt; X=fft(x); F=X(1:N/2+1); f=f*(0:N/2)/N; subplot(2,1,1) plot(t,x)

title(\'x=sin(2*pi*50*t)\') xlabel(\'t\')

ylabel(\'Amplitude\') axis([0,1,-1,1]); subplot(2,1,2) plot(f,abs(F)) xlabel(\'Frequency\'); ylabel(\'|X(e^{jw})|\')

(二): 1): N=100; n=0:99; Rn=[ones(1,N-1) zeros(1, 101-N)]; pn=0.5*[1-cos((2*pi*n)/(N-1))].*Rn; subplot(211); stem(n,pn); title(\'汉宁信号\'); [H,w]=freqz(pn,1,200); magH=abs(H); length(w); length(H); magHdB=20*log10(magH); subplot(212); plot(w/pi,magHdB); 2):

N=100; n=0:99;

Rn=[ones(1,N-1) zeros(1,101-N)]; pn=0.5*[1-cos((2*pi*n)/(N-1))].*Rn;

sn=2*pn.*(cos(pi*n/4)+4*pn.*cos(pi*n/2)+6*pn.*cos(3*pi*n/4)); subplot(211); stem(n,sn);

title(\'已调信号\');

[H,w]=freqz(sn,1,200); magH=abs(H); length(w); length(H);

magHdB=20*log10(magH); subplot(212); plot(w/pi,magHdB);

3):

a=[1 -1.1172 0.9842 -0.4022 0.2247]; b=[0.2247 -0.4022 0.9842 -1.1172 1]; n=1:49;

hn=impz(b,a,n); stem(n,hn,\'k\',\'f\'); ylabel(\'脉冲响应 ¨h(n)\'); xlabel(\'序号(n)\'); title(\'单位脉冲响应\');

4):

a=[1 -1.1172 0.9842 -0.4022 0.2247]; b=[0.2247 -0.4022 0.9842 -1.1172 1]; k=0:0.1:100; p=0.5-0.5*cos(2*pi*k./74); s=p.*(cos(pi*k/4)+2*cos(pi*k/2)+3*cos(3*pi*k/4)); y=filter(b,a,s); z1=fft(y,256); plot([-128:127],fftshift(abs(z1)));axis([-30 30 0 120]);grid on;

5):

wp=200; ws=200; wp1=[0.2,0.3]; ws1=[0.1,0.4]; wp2=[0.4,0.6]; ws2=[0.3,0.7]; wp3=[0.7,0.8]; ws3=[0.6,0.9]; ap=1; as=20; N=100; n=0:99;

Rn=[ones(1,N-1) zeros(1,101-N)]; pn=0.5*[1-cos((2*pi*n)/(N-1))].*Rn;

sn=2*pn.*(cos(pi*n/4)+4*pn.*cos(pi*n/2)+6*pn.*cos(3*pi*n/4)); a=[1 -1.1172 0.9841 -0.4022 0.2277]; b=[0.2277 -0.4022 0.9841 -1.1172 1]; yn=filter(b,a,sn);

[n,wc]=cheb1ord(wp,ws,ap,as); [bz,az]=cheby1(n,ap,wc); subplot(311) bz1=bz;az1=az; x1=filter(bz1,az1,yn); plot(x1); subplot(312) bz2=bz;az2=az; x2=filter(bz2,az2,yn); plot(x2); subplot(313) bz3=bz;az3=az; x3=filter(bz3,az3,yn); plot(x3)

(三):

1):

clc; a=imread(\'F:\\星空.jpg\'); imshow(a),title(\'原彩色图像\'); 2):

clc; a=imread(\'F:\\星空.jpg\'); subplot(3,2,1),imshow(a),title(\'原彩色图像\');

ar=a(:,:,1); ag=a(:,:,2); ab=a(:,:,3); subplot(3,2,4),imshow(ar),title(\'R\');

subplot(3,2,5),imshow(ag),title(\'G\'); subplot(3,2,6),imshow(ab),title(\'B\'); 3):

clc; a=imread(\'F:\\星空.jpg\'); subplot(2,1,1),imshow(a),title(\'原彩色图像\'); b=rgb2gray(a); subplot(2,1,2),imshow(b),title(\'灰度图像\'); 4):

a=imread(\'F:\\星空.jpg\'); b=rgb2gray(a); b1=edge(b,\'sobel\'); b2=edge(b,\'prewitt\'); b3=edge(b,\'roberts\'); b4=edge(b,\'log\'); b5=edge(b,\'canny\'); subplot(3,2,1);imshow(b);title(\'灰度图像\'); subplot(3,2,2);imshow(b1);title(\'Sobel边缘检测\'); subplot(3,2,3);imshow(b2);title(\'Prewitt边缘检测\'); subplot(3,2,4);imshow(b1);title(\'Roberts边缘检测\'); subplot(3,2,5);imshow(b1);title(\'LoG边缘检测\'); subplot(3,2,6);imshow(b1);title(\'Canny边缘检测\');

五、总结与心得体会:

在课程设计的这段时间,我获益匪浅,不但进一步掌握了数字信号处理的基础知识及MATLAB的基本操作,还详细了解并掌握了信号的产生、采样及频谱分析的方法。我进一步了解到凡事都需要耐心,细心仔细是成功的重要保证之一。虽然在做的过程中遇到了一些问题,但是在研究生学姐、班级同学的帮助以及自己的努力下,问题最终都得以解决。这次课程设计对我各方面的能力有了很大的提高,对我以后的工作、实践都有很大的帮助。

在此次课程设计当中,我经常把C语言的语法知识照搬到MATALAB设计中,从而导致调试失败,所以下次用此类语言做课程设计时,应事先学习下这类语言的基本语法,以免与其他语言相混淆。还有就是有些不定参数存在时,可先取定值,用于调试,这样可以节约调试时间,从而提高效率。

本次课程设计不但让我又学到了一些知识,而且也提高了我的综合能力,使我在各个方面都得到了锻炼。以后有这样的机会一定会更加的很好利用,它不仅可以提高学习的针对性而且可以很好的锻炼动手能力以及自己的逻辑设计能力和处理问题的能力,希望在以后的学习生活中会有更多的机会来加强这方面的能力。

参考文献:

[1] 《数字信号处理(第二版)》.丁玉美等 西安电子科技大学出版社 [2] 《数字信号处理及其MATLAB实现》,陈怀琛等译,电子工业出版社;

[3] 《MATLAB及在电子信息课程中的应用》,陈怀琛等,电子工业出版社

推荐第3篇:DSP简介

DSP简介

1. 什么是DSP芯片

DSP芯片,也称数字信号处理器,是一种具有特殊结构的微处理器。DSP芯片的内部采用程序和数据分开的哈佛结构,具有专门的硬件乘法器,广泛采用流水线操作,提供特殊的DSP 指令,可以用来快速地实现各种数字信号处理算法。根据数字信号处理的要求,DSP芯片一般具有如下的一些主要特点:

(1) 在一个指令周期内可完成一次乘法和一次加法。 (2) 程序和数据空间分开,可以同时访问指令和数据。

(3) 片内具有快速RAM,通常可通过独立的数据总线在两块中同时访问。

(4) 具有低开销或无开销循环及跳转的硬件支持。 (5) 快速的中断处理和硬件I/O支持。

(6) 具有在单周期内操作的多个硬件地址产生器。 (7) 可以并行执行多个操作。

(8) 支持流水线操作,使取指、译码和执行等操作可以重叠执行。 与通用微处理器相比,DSP芯片的其他通用功能相对较弱些。 2.DSP芯片的发展

世界上第一个单片DSP芯片是1978年AMI公司宣布的S2811,1979年美国Iintel公司发布的商用可编程期间2920是DSP芯片的一个主要里程碑。这两种芯片内部都没有现代DSP芯片所必须的单周期芯片。 1980年。日本NEC公司推出的μPD7720是第一个具有乘法器的商用DSP 芯片。第一个采用CMOS工艺生产浮点DSP芯片的是日本的Hitachi 公司,它于1982年推出了浮点DSP芯片。1983年,日本的Fujitsu公司推出的MB8764,其指令周期为120ns ,且具有双内部总线,从而处理的吞吐量发生了一个大的飞跃。而第一个高性能的浮点DSP芯片应是AT&T公司于1984年推出的DSP32。

在这么多的DSP芯片种类中,最成功的是美国德克萨斯仪器公司(Texas Instruments,简称TI)的一系列产品。TI公司灾982年成功推出启迪一代DSP芯片TMS32010及其系列产品TMS320

11、TMS32C10/C14/C15/C16/C17等,之后相继推出了第二代DSP芯片TMS32020、TMS320C25/C26/C28,第三代DSP芯片TMS32C30/C31/C32,第四代DSP芯片TMS32C40/C44,第五代DSP芯片TMS32C50/C51/C52/C53以及集多个DSP于一体的高性能DSP芯片TMS32C80/C82等。

自1980年以来,DSP芯片得到了突飞猛进的发展,DSP芯片的应用越来越广泛。从运算速度来看,MAC(一次乘法和一次加法)时间已经从80年代初的400ns(如TMS32010)降低到40ns(如TMS32C40),处理能力提高了10多倍。DSP芯片内部关键的乘法器部件从1980年的占模区的40左右下降到5以下,片内RAM增加一个数量级以上。从制造工艺来看,1980年采用4μ的N沟道MOS工艺,而现在则普遍采用亚微米CMOS工艺。DSP芯片的引脚数量从1980年的最多64个增加到现在的200个以上,引脚数量的增加,意味着结构灵活性的增加。此外,DSP芯片的发展,是DSP系统的成本、体积、重量和功耗都有很大程度的下降。

3.DSP芯片的分类

DSP的芯片可以按照以下的三种方式进行分类。 (1)按基础特性分

这是根据DSP芯片的工作时钟和指令类型来分类的。如果DSP芯片在某时钟频率范围内的任何频率上能正常工作,除计算速度有变化外,没有性能的下降,这类DSP芯片一般称之为静态DSP芯片。

如果有两种或两种以上的DSP芯片,它们的指令集和相应的机器代码机管脚结构相互兼容,则这类DSP芯片称之为一致性的DSP芯片。 (2)按数据格式分

这是根据DSP芯片工作的数据格式来分类的。数据以定点格式工作的DSP芯片称之为定点DSP芯片。以浮点格式工作的称为DSP芯片。不同的浮点DSP芯片所采用的浮点格式不完全一样,有的DSP芯片采用自定义的浮点格式,有的DSP芯片则采用IEEE的标准浮点格式。 (3)按用途分

按照DSP芯片的用途来分,可分为通用型DSP芯片和专用型的DSP芯片。通用型DSP芯片适合普通的DSP应用,如TI公司的一系列DSP芯片。专用型DSP芯片市为特定的DSP运算而设计,更适合特殊的运算,如数字滤波,卷积和FFT等。 4.DSP芯片的基本结构 DSP芯片的基本结构包括:

(1)哈佛结构。哈佛结构的主要特点是将程序和数据存储在不同的存储空间中,即程序存储器和数据存储器是两个相互独立的存储器,每个存储器独立编址,独立访问。与两个存储器相对应的是系统中设置了程序总线和数据总线,从而使数据的吞吐率提高了一倍。由于程序和存储器在两个分开的空间中,因此取指和执行能完全重叠。

(2)流水线操作。流水线与哈佛结构相关,DSP芯片广泛采用流水线以减少指令执行的时间,从而增强了处理器的处理能力。处理器可以并行处理二到四条指令,每条指令处于流水线的不同阶段。

(3)专用的硬件乘法器。乘法速度越快,DSP处理器的性能越高。由于具有专用的应用乘法器,乘法可在一个指令周期内完成。

(4)特殊的DSP指令。特殊的DSP指令DSP芯片是采用特殊的指令。

(5)快速的指令周期。快速的指令周期哈佛结构、流水线操作、专用的硬件乘法器、特殊的DSP指令再加上集成电路的优化设计可使DSP芯片的指令周期在200ns以下。

5.DSP系统的特点

数字信号处理系统是以数字信号处理为基础,因此具有数字处理的全部特点:

(1) 接口方便。DSP系统与其它以现代数字技术为基础的系统或设备都是相互兼容,这样的系统接口以实现某种功能要比模拟系统与这些系统接口要容易的多。

(2) 编程方便。DSP系统种的可编程DSP芯片可使设计人员在开发过程中灵活方便地对软件进行修改和升级。

(3) 稳定性好。DSP系统以数字处理为基础,受环境温度以及噪声的影响较小,可靠性高。

(4) 精度高。16位数字系统可以达到的精度。

(5) 可重复性好。模拟系统的性能受元器件参数性能变化比较大,而数字系统基本上不受影响,因此数字系统便于测试,调试和大规模生产。 (6) 集成方便。DSP系统中的数字部件有高度的规范性,便于大规模集成。

6.DSP芯片的应用

现代数字信号处理器是执行高速数字信号处理的IC电路、它恰好适应多媒体信息化社会需求,迅速发展壮大。如今,世界电子器件市上,各种各样的DSP器件已相当丰富。大大小小封装形式的DSP器件,已广泛应用于各种产品的生产领域,而且DSP的应用领域仍在不断地扩大,发展迅速异常。 (1)数字化移动电话

数字化移动电话尽管花样繁杂,但基本上可划为两大类:高速移动电话和低速移动电话。其中,高速移动电话顾名思义是在高速移动体里使用的电话,诸如可在飞机、轮船和汽车等里自由通话的电话。虽然数字化高速移动通过标准很多,但当今普遍应用的是欧洲GSM(GlobalSystemforMobileCommunication)标准。自从推出数字化蜂窝式电话机以来,现已遍布全球70多个国家广泛应用。俗称GSM标准的数字化蜂窝电话,叫作数字化大哥大,它具备国际漫游(Roaming)功能,SIMC(SubscriberIdentificationModuleCard)给用户带来使用大哥大的方便。现正在扩展数据通信服务能力以及它与ISDN系统兼容性,例如,英国BT公司的Cellnet部已经利用GSM提供数字化数据和传真服务,于是东芝笔记本电脑也安上了数字化的大哥大。

低速移动电话就其实质而论。它是数字化无绳电话,仍然保持模拟式无绳电话的子母式结构:子机亦称为手机,可以距母机为百米左右半径内的空间里自由步行移动情况下实现通话;母机也称为基地站,可作为家庭里的留守电话,也可悬挂在商店的墙壁上,街道的电线柱上,广为分布。由统一的交换设施进行管理,实现无缝交递(SeamleHandOn)功能。这类低速移动电话式标准很多。例如,欧洲较为普遍应用的DECI(DigitalEuropeanCordleTelecommunictaion),日本、韩国、东南亚应用的PHS(PersonalHandy-phoneSystem)以及Philips和我国联合开发的DCCT(DigitalChinaCordleTelephone)。其中,尤以PHS和DECT制式低速移动电话发展较快,我国的DCCT由于缺乏关键性的DSP技术仍处于设计阶段。

数字化移动电话(包括高速和低速)的每个手机,都要用至少1个DSP器,因此,高速发展的数字化移动电话急需极为大量的DSP器件。 (2)数据调制解调器

从所周知,数字信号处理器的传统应用领域之一,就是调制解调器。如今,调制解调器作为联系通信与多媒体信息处理系统的纽带,日益受到重视。特别是近年来Internet热潮,方兴未艾,普通百姓在Internet上冲浪蔚然成风。利用PC机通过调制解调器经由电话线路,实现拨号连接Internet已是最简便的访问形式。由于Internet用户急剧增加,一度致使28.8Kbps的调制解调器成为市场上的脱销产品。特别是由PC机上利用浏览程序调用活动图像信息时,期望使用数据传送速度更高的调制解调器。为适应这种新需求,国际上已制订出高速(33.6Kbps)调制解调器国际标准。这就意味,在高速调制解调器里需要更高性能的DSP器件。这种33.6Kbps的调制解调器(V.34)

是为传送数据而设计的,在此基础上发展出DSVD调制解调器,它既可传送数据又可传送声音。无疑,这样一来将需要更高功能的DSP器件。

随着高性能调制解调器不断出现,似乎低速的调制解调器如像V.17(14.4Kbps)再也没有用武之地。事实上,刚刚相反,如今信息家电抬头,例如PHS母机留守电话与个人FAX一体化的产品大量上市。这就是说,V.17(14.4Kbps)型的调制解调器仍有市场。于是,各种调制解调器里要求的DSP也是多种多样的。

(3)磁盘/光盘控制器需求

随着多媒体信息化的发展,各种信息存储媒体产品都应运而生,诸如磁盘存储器、CD-ROM和DVD(DigitalVersatileDisk)-ROM新产品纷纷上市。今日的磁盘驱动器HDD,存储容量已相当可观,大型HDD姑且不谈,就连普通PC机的HDD的存储容量已高在1GB以上,详见照片4。小型HDD向高密度、高存储容量和高速存取方向发展,其控制器必须具备高精度和高速响应特性,它所用的DSP性能也是今非昔比,高速DSP是必不可少的关键性器件。

日本的HDD技术不能超过美国,于是把主攻方向集中到光盘技术,在1996年日本第35届ElectronicsShow'96上,终于把DVD-ROM产品公布于众。而且,日本并不以此为满足,志在夺取可擦写的DVD-RAM。仅就DVD-ROM而论,单面1片12cm盘片记录4.7GB信息量,相当于直径12cm的软盘FD片3200张之多,比CD-ROM存储容量高出6倍。如此高密度的DVD-ROM,读出控制的精细程度可想而知。

HDD和光盘机的控制器里之所以必须利用高速DSP,主要是利用其高速\"积和\"处理能力。因为,盘片旋转控制、磁头定位控制和光盘中的激光束聚焦控制,都是采数字伺服与系统控制技术。这是现在控制技术,建立在数学模型基础之上。通过复杂的矩阵运算实现控制。没有高速运算的DSP,是绝对不行的。 (4)图形图像处理需求

DVD里应用的活动图像压缩/解压缩用MPEG2编码/译码器,同时也广泛地应用于视频点播VOD、高品位有线电视和卫星广播等诸多领域。在这些领域里,应用的DSP应该具备更高的处理速度和功能。而且,活动图像压缩/解压技术也日新月异,例如,DCT变换域编码很难提高压缩比与重构图像质量,于是出现了对以视觉感知特性为指导的小波分析图像压缩方法。新的算法出现,要求相应的高性能DSP。最近,日本各大学和高技术企业对于开发虚拟现实VR系统,投入相当力量,利用现代计算机图像学CG生成3维图形,迫切需要多个DSP并行处理系统。其中,系统里的结点DSP单元,要求采用与并行处理相适应的体系结构。

彩色静止图像压缩/解压,现在普遍应用JPEG标准,其核心算法也是离散余弦变换。JPEG编码/译码器的应用,除了数字化照像机之外,估计彩色打印机和彩色扫描器也将要应用。因此,对于普通DSP的用量,必将日益增长。

(5)汽车电子系统及其它应用领域

汽车电子系统日益兴旺发达起来,诸如装设红外线和毫米波雷达,将需用DSP进行分析。如今,汽车愈来愈多,防冲撞系统已成为研究热点。而且,利用摄像机拍摄的图像数据需要经过DSP处理,才能在驾驶系统里显示出来,供驾驶人员参考。

应用DSP的领域可以说是不胜枚举,电视会议系统里,也大量应用DSP器件。视听机器里也都应用DSP。随着科学技术的发展,将会出现许许多多的DSP新应用领域。

推荐第4篇:dsp学习心得

一.我是已经从事DSP开发有几年了,看到许多朋友对DSP的开发非常感兴取,我结合这几年对DSP的开发写一写自己的感受,一家之言,欢迎指教。我上研究生的第一天起根据老板的安排就开始接触DSP,那时DSP开发在国内高校刚刚开始,一台DSP开发器接近一万还是ISA总线的,我从206开始240、2407A都作过产品,对540

2、28

12、5471在产品方案规划制定和论证时也研究过。由于方向所限对6X、8X系列没有接触。 我发现在国内无论在公司或高校许多地方为了加快开发周期往往把一个产品开发分为硬件和软件两个相对独立部分,由不同的人完成。这在具有一定技术和管理基础的公司,由总设计师统一规划协调,分任务并行完成的情况下是可行的,也是符合现代产品开发规律的。但是在高校人员的流动很大,研究生的有效科研时间很短、基础差(许多研究生起步时对电熔、电阻、三极管的分类和选型都很困难,我也是这样过来的)更不用说系统规划设计了,况且许多老板自己也不太懂,师兄有自己的任务,他们搞明白时也毕业了。在许多高校做DSP就是找一个算法加到自己的主程序里,在板子上跑一下,基本达到效果就可以了,至于可靠性是次要的,产业化无从谈起,这已经算不错的了。其实我觉得一个系统的完成,系统的规划是最重要的,在规划时对硬件设计的知识和认识是决定性的,它可以让你知道什么是可行的,什么是不可行的,当你同时具有软件设计能力时,就可以合理的分配系统功能,完成使用VHDL进行系统行为描述-―系统功能划分―― 系统子结构设计这样的自顶向下的设计规划流程,成为系统设计专家、项目经理,否则只是硬件工程师、软件工程师。无论作

51、19

6、还是DSP都是这样。下面分别谈谈我对硬件和软件设计的感受硬件设计是系统设计的关键,国内和国外产品的差距往往是硬件设计水平高低决定的,任何软件设计思想没有可靠的物理载体都是空中楼阁,纸上谈兵。学校的研究生很多都想避开硬件设计,对于一个全新的设计与其说不屑不如说不敢。试想一下烧几个片子的压力要比跑飞几段程序的压力大的多,尤其是功率器件,一旦烧掉,弄不好火光冲天,人的自信都没了。况且改一次板周期长,经费高,还不知行不行。其实在国外实力一般的公司也是尽量避免硬件的更新设计,产品一旦定型往往通过软件升级,这是公司的发展策略,对个人而言物以希为贵,培养一个硬件设计师往往要比软件设计师时间长花费多。在设计dsp硬件时,开始设计最小系统板,系统按功能分板设计调试,注意分板电路的稳定性可能不如整板电路,要多加入抗干扰环节,分板间的引线包括电源线地线要短,尽量在10公分以内,实在不行加入光耦隔离、采用隔离电源。切记电源线、地线的干扰远比信号干扰对系统的危害大得多,又常常被人忽视。电路板工作正常的先决条件就是电源正常!当分板电路正常后再更居情况设计整板电路。在调试时发现的问题一定要找到原因解决,即使是飞线,割线,不要寄希望于下一板改了再看,除非原理性错误。每一个功能环节多准备几套方案。DSP的选型要根据系统功能而定,2000是一个功能比较全的控制器,但运算性能相对低,但目前大部分控制类、家电类包括中低层次的工业总线通信产品足够了,281X不错但太贵,而且开发技术不成熟。54XX更像一个协处理器,其实高端产品5471就很好,功能完*,但BGA封装对产品的开发有一定难度。如果没有从事过嵌入式系统开发的朋友其实可以从51看起,许多思想是共通的,51很经典没有哪一款微处理器像51那样使用持久和普遍。在硬件设计时更多的精力放在外围电路设计上,外围电路设计的灵活性要比DSP本身高得多,难度大得多。建议多考虑CPLD。软件设计上,着眼点不要仅局限于某种算法和控制策略,而是软件系统框架的制定,即操作系统的选择和实现,算法和控制策略只是其中技巧性很强的子程序和子程序间参数相互关系,建议设计软件时能具有操作系统、数据结构和编译原理方面的知识,特别是使用C。对DSP的内部硬件结构一定要掌握,特别是中断结构和流程、流水线操作,不然飞都不知道怎么飞的。在语言选择上我当时是这么给自己规定的先编20个左右的汇编程序,每个代码量超过4K,使用语句范围覆盖全部语句的60%-70%,在此基础上使用C。现在发现用C构建程序的主体框架(操作系统)比较快而其不容易出错,(我现在正在用ASM根据UCOSII的思想重写自己的操作系统)但对系统实时性影响比较大的运算算法一般采用MATLAB――C――ASM的办法仿真调试优化,这里的优化不单单是利用优化器优化,而是根据数据的特点改变运算方法,以除法为例C里的/号其实掩盖了许多技巧,当除数为常数时就可以放大倒数移位相乘移位的办法进行,精度高速度快。这些办法只有掌握了ASM语言并用ASM语言思考才会熟练应用。另外我想告诉一些作算法特别是控制算法的朋友,千万不要随意评判一个算法的优劣,在程序中程序和代码优化的程度往往影响了控制效果好坏,而不是算法本身的思想。其实在实际中往往PID甚至PI、PD就够了,神经元、模糊、小波适用于研究和写论文,模糊在实际中用的多一点,主要是小日本用的比较成熟,我再恨日本人,这点也服气,小日本就是滑,许多物理现象搞不透,就用这法,还管用,题外话。最后我想说的是,当我们面对市场要求时,产品往往考虑的是可靠性、性能、价格而不是你用的什么芯片,在满足性能的基础上结构越简单就越可靠,芯片越通用价格就越低,能用51就不用196,能用2407就不用2812,除非把芯片本身作买点利用高成本赢取高利润。无论2000还是5000、6000系列都有市场前景,关键是要做深做透获取知识的方法、处理项目的能力是相通的,具体的说就是不要把目光盯在做硬件还是做软件上,用ASM还是C,要勤动手打好基础,提高自己对系统总体设计的能力,从系统的眼光看问题。为什么都是做DSP的有的毕业拿3000,有的5000、8000,除了运气和关系外,重要的是你对事物的认识深度和高度。我一直都记住这句话:有前途的人做什么都有前途,没前途的人做什么都没前途。 二.与其说是钻在里面,毕业设计是搞240,在老师的压力做出了一点东西,这期间主要是对DSP的各种基础知识的熟悉与理解,对DSP的真正深入是在公司工作以后。当初进公司,因为正有一个项目需要用5410要我接手。说实话,在学校期间我5000的书都没有看过一眼,可没办法,只能靠自己了。不过好的是我2000DSP的基础很好。接过项目后,我第一个星期就全部看的是5000的指令,DSP的结构倒没怎么看,因为项目硬件已成型,主要是算法。这样,花了一个星期熟悉指令与项目相关的程序,第二个星期也就开始编程了。半个月以后我对5410也就用很熟了的,当然主要还是讲在算法方面。这个项目太概做了四个月吧,系统程序是我编写的,主要有如64位加减乘除乘方开方、及时域方面的一些算法。现在又做一个控制系统,用2407开发的,硬件主要有直交变频,并把2407的所有外设资源全部用到了。现在我可以这样自夸一句吧:TI的2000系列与5000系列的我都熟悉,要我去以此做个系统,没问题。上面是把我搞DSP的经历简单说了一下的吧,在这里我想对正在学及想学DSP的难兄们说一句的是,DSP并不是很难。当然,这个前提是你的基础要好,我单片机,接口都还行,当初就是从单片机改成DSP的。有了单片机的基础再去学2000第列的DSP(下面的DSP单指2000系列,另有说明为止),你就可以把DSP看成一个super microcontroller了。相比之下,DSP除了比单片机多了更丰的外设接口(SPI,SCI、CAN、PWM、CAP、QEP等等),他就是一块单片机,只不过在单片机来说你要另加芯片的工作,DSP全部把它做在一块芯片去了,我现在看DSP也真就这么简单。前面有人提到DSP主要是做算法,这句话有一定的片面性: TI有很多系列的DSP,现在主流的DSP主要为2000系列、3000系列、4000系列、5000系列、6000系列。除了2000与5000系列是定点DSP外,其余的均为浮点系列。 TI的2000系列主要长处是在用于控制系统,因为它的资源非常丰富,前面提到,在控制系统中用到的一些外设2000系列均在片内集成了。 TI的5000系列主要长处是用于数字信号的算法处理,这里所讲算法处理主要是指在数字信号处理时的一些算法,如FIR、IIR、FFT等等。5000系列的DSP的速度比2000快,2407最快只能到40M,2800系列除外,5410的DSP可以达到160M,如现在我们主要用来做数字信号方面的处理以及简单的静态图像处理等这样一些在资源需要处于中等的一些算法。 TI的6000系列主要是用在实时图像处理,这个就更则重于算法处理。一般的硬件很少自制,我们是用TI的DSK板再加上自主板相结合。 三.使用C/C++语言编写基于DSP程序的注意事项

1、不影响执行速度的情况下,可以使用c或c/c++语言提供的函数库,也可以自己设计函数,这样更易于使用“裁缝师”优化处理,例如:进行绝对值运算,可以调用fabs()或abs()函数,也可以使用if...else...判断语句来替代。

2、要非常谨慎地使用局部变量,根据自己项目开发的需要,应尽可能多地使用全局变量和静态变量。

3、一定要非常重视中断向量表的问题,很多朋友对中断向量表的调用方式不清楚。其实中断向量表中的中断名是任意取定的,dsp是不认名字的,它只认地址!!中断向量表要重新定位。这一点很重要。

4、要明确dsp软件开发的第一步是对可用存储空间的分析,存储空间分配好坏关系到一个dsp程序员的水平。对于dsp,我们有两种名称的存储空间,一种是物理空间,另一种是映射空间。物理空间是dsp上可以存放数据和程序的实际空间(包括外部存储器),我们的数据和程序最终放到物理空间上,但我们并不能直接访问它们。我们要访问物理空间,必须借助于映射空间才行!!但是映射空间本身是个“虚”空间,是个不存在的空间。所以,往往是映射空间远远大于实际的物理空间,有些映射空间,如io映射空间,它本身还代表了一种接口。只有那些物理空间映射到的映射空间才是我们真正可访问(读或写)的存储空间。

5、尽可能地减少除法运算,而尽可能多地使用乘法和加法运算代替。

6、如果ti公司或第三方软件合作商提供了dsplib或其他的合法子程序库供调用,应尽可能地调用使用。这些子程序均使用用汇编写成,更为重要之处是通过了tms320算法标准测试。而且,常用的数字信号处理算法均有包括!!

7、尽可能地采用内联函数!!而不用一般的函数!!可以提高代码的集成度。

8、编程风格力求简炼!!尽可能用c语言而不用c++语言。我个人感到虽然c++终代码长了一些,好象对执行速度没有影响。

9、因为在c5000中double型和float型均占有2个字,所以都可以使用,而且,可以直接将int型赋给float型或double型,但,尽可能地多使用int数据类型代替!这一点需要注意!!

10、程序最后至少要加上一个空行,编译器当这个空行为结尾提示符。

11、大胆使用位运算符,非常好用!!

12、2003年6月份从ti的网站上下到了关于tms320c67x系列dsp的快速算法库,于是,tms320c5000和c6000全系列的快速算法库都问世了,这些算法库均可供c/c++语言直接调用,优化程度100%,实际编程时尽可能地使用

推荐第5篇:DSP实验报告

实验0 实验设备安装才CCS调试环境

实验目的:

按照实验讲义操作步骤,打开CCS软件,熟悉软件工作环境,了解整个工作环境内容,有助于提高以后实验的操作性和正确性。 实验步骤:

以演示实验一为例:

1. 使用配送的并口电缆线连接好计算机并口与实验箱并口,打开实验箱电源; 2.启动CCS,点击主菜单“Project->Open”在目录“C5000QuickStart\sinewave\”下打开工程文件sinewave.pjt,然后点击主菜单“Project->Build”编译,然后点击主菜单“File->Load Program”装载debug目录下的程序sinewave.out;

3. 打开源文件exer3.asm,在注释行“set breakpoint in CCS !!!”语句的NOP处单击右键弹出菜单,选择“Toggle breakpoint”加入红色的断点,如下图所示; 4. 点击主菜单“View->Graph->Time/Frequency„”,屏幕会出现图形窗口设置对话框

5. 双击Start Addre,将其改为y0;双击Acquisition Buffer Size,将其改为1;DSP Data Type设置成16-bit signed integer,如下图所示;

6. 点击主菜单“Windows->Tile Horizontally”,排列好窗口,便于观察

7. 点击主菜单“Debug->Animate”或按F12键动画运行程序,即可观察到实验结果:

心得体会:

通过对演示实验的练习,让自己更进一步对CCS软件的运行环境、编译过程、装载过程、属性设置、动画演示、实验结果的观察有一个醒目的了解和熟悉的操作方法。熟悉了DSP实验箱基本模块。让我对DSP课程产生了浓厚的学习兴趣,课程学习和实验操作结合为一体的学习体系,使我更好的领悟到DSP课程的实用性和趣味性。

实验二 基本算数运算

2.1 实验目的和要求

加、减、乘、除是数字信号处理中最基本的算术运算。DSP 中提供了大量的指令来 实现这些功能。本实验学习使用定点DSP 实现16 位定点加、减、乘、除运算的基本方法 和编程技巧。本实验的演示文件为exer1.out。

2.2 实验原理

1) 定点 DSP 中的数据表示方法

C54X 是16 位的定点DSP。一个16 位的二进制数既可以表示一个整数,也可以表

示一个小数。当它表示一个整数时,其最低位(D0)表示20,D1 位表示21,次高位(D14) 表示214。

2) 实现 16 位定点加法

C54X 中提供了多条用于加法的指令,如ADD,ADDC,ADDM 和ADDS。其中

ADDS 用于无符号数的加法运算,ADDC 用于带进位的加法运算(如32 位扩展精度加 法),而ADDM 专用于立即数的加法。

3) 实现 16 位定点减法

C54X 中提供了多条用于减法的指令,如SUB,SUBB,SUBC 和SUBS。其中SUBS 用于无符号数的减法运算,SUBB 用于带进位的减法运算(如32 位扩展精度的减法), 而SUBC 为移位减,DSP 中的除法就是用该指令来实现的。

4) 实现 16 位定点整数乘法

在C54X 中提供了大量的乘法运算指令,其结果都是32 位,放在A 或B 寄存器 中。乘数在C54X 的乘法指令很灵活,可以是T 寄存器、立即数、存贮单元和A 或B 寄存器的高16 位。

5) 实现 16 位定点小数乘法

在 C54X 中,小数的乘法与整数乘法基本一致,只是由于两个有符号的小数相乘, 其结果的小数点的位置在次高的后面,所以必须左移一位,才能得到正确的结果。C54X 中提供了一个状态位FRCT,将其设置为1 时,系统自动将乘积结果左移一位。但注意 整数乘法时不能这样处理,所以上面的实验中一开始便将FRCT 清除。两个小数(16 位) 相乘后结果为32 位,如果精度允许的话,可以只存高16 位,将低16 位丢弃,这样仍可 得到16 位的结果。

6) 实现 16 位定点整数除法

在 C54X 中没有提供专门的除法指令,一般有两种方法来完成除法。一种是用乘法 来代替,除以某个数相当于乘以其倒数,所以先求出其倒数,然后相乘。这种方法对于 除以常数特别适用。另一种方法是使用SUBC 指令,重复16 次减法完成除法运算。

7) 实现 16 位定点小数除法

在 C54X 中实现16 位的小数除法与前面的整数除法基本一致,也是使用循环的

SUBC 指令来完成。但有两点需要注意:第一,小数除法的结果一定是小数(小于1),

1 所以被除数一定小于除数。

2.3 实验内容

本实验需要使用C54X 汇编语言实现加、减、乘、除的基本运算,并通过DES 的存 贮器显示窗口观察结果。

1) 编写实验程序代码

2) 用 ccs simulator 调试运行并观察结

2.4 实验结果

1、加法结果

2、乘法结果

3、减法结果

4、除

4 2.5 思考题(0.5、0.25)

5 实验三 C54X的浮点数的算术运

一、实验目的

1) 练习TMS320C54X 汇编程序的编写与调试方法,重点练习C54X 程序流程控制的方法。 2) 学习并掌握应用 TMS320C54X 来进行浮点数的各种算术运算的算法实现。

3) 练习并掌握 TMS320C54X 的汇编语言的汇编指令系统的使用方法,重点练习具有C54X 特点的一些在功能上有所扩展的特殊指令,并了解这些指令在进行算术运算或各种控制时所带来的方便。

4) 练习并掌握用 CCS 调试程序的一些基本操作。

二.实验原理

1) 浮点数的表示方法

在定点运算中,小数点是在一个特定的固定位置。例如,如果一个 32-bit 的数把小数点放在最高有效位(也就是符号位)之后,那么就只有分数(绝对值小于1)才能被显示。在定点运算系统中,虽然在硬件上实现简单,但是表示的操作数的动态范围要受到限制。

3) 浮点数运算的步骤

程序代码分成四个 ASM 文件输入,通过编译生成.obj 文件,连接生成.out 文件后就可以在DES320PP-U 实验系统上调试运行(先要创建一个工程文件,然后加入四个工程文件,并且一起编译,连接。因为每个文件都对下一个文件作了引用)。步骤如下:

a.首先启动 setup CCS C5000,在其中设置目前需要的CCS 的工作状态为C54xxsimulator,保存这一设置并退出。然后再启动CCS 实验系统软件CCS C5000。

b.在下拉菜单中选择“File”->“Load Program”以装入所要调试的程序fc.out,这时,在反汇编窗口中能看到程序的源代码。

c.在下拉菜单中选择“View”->“CPU Registers”->“CPU Register”,可以看见在CCS 界面下部份会出现CPU 中的相关寄存器;选择“View”->“Memory…”,在弹出的“Memory Window Options”窗口中选择要观察的区域为数据区,地址开始为0x80h,然后就可以看见出现一个Data Memory 窗口,其中显示了从0x80h 开始的 .b 区。

d.在反汇编窗口中需要观察的地方设置断点:在这条指令处双击将其点为红色即可。比如在加法程序中有指令nop 的位置都可以加一个断点。

e.在下拉菜单中选择“调试”——“连续运行”(或直接点击“运行程序”按钮)运行浮点数程序。如果编写程序时在计算完毕后遇到一个断点,那么程序到此会自动停止。

f.当示范程序在第一个断点处停下来时,此时就可以看见程序初始化后的情况:被加数12.0 以浮点数的格式放在内存区0x08a-0x08b 中,其值为4140h 和0000h。加数12.0 放在内存区0x08c-0x08d 中,其值也为4140h 和0000h。

6 g.再点击“运行程序”按钮,之后程序会在下一个断点处停下来,这时可以看见被加数被格式转换后的变量op1hm、op1lm 和op1se 的值在内存区0x084-0x086 中,分别为00c0h、0000h 和0082h。同样加数被格式转换后的变量op2se、op2hm 和op2lm的值在内存区0x087-0x089 中,分别为0082h、00c0h 和0000h。

h.再点击“运行程序”按钮,程序停下来时就可以观察到在存储器窗口中表示结果的变量rlthm、rltlm、rltsign 和rltexp 的值在内存区0x080-0x083 中,其值分别为0040h、0000h、0180h 和0083h。

i.这时可以看到 A 寄存器中的值为AH=41c0h,AL=0000h 这就是最后的以浮点数的格式表示的结果值24(=12+12)。加法运算到此结束。

j.继续点击“运行程序”按钮,当程序再次停下来时就可以看见在A 寄存器中显示的13.0 与12.0 进行减法运算的结果:AH=3f80h,AL=0000h。这是用浮点数格式表示的数1(=13-12)。减法运算的程序到此结束。

k.继续点击“运行程序”按钮,当程序再次停下来时就可以看见在A 寄存器中显示的12.0 与12.0 进行乘法运算的结果:AH=4310h,AL=0000h。这是用浮点数格式表示的数144(=12*12)。乘法运算的程序到此结束。

l.继续点击“运行程序”按钮,当程序再次停下来时就可以看见在A 寄存器中显示的12.0 与4.0 进行除法运算的结果:AH=4040h,AL=0000h。这是用浮点数格式表示的数3(=12/4)。至此加、减、乘、除四种运算都运行完毕。

m.如果程序运行不正确,请检查源程序是否有误,必要时可以在源程序中多插入断点语句。程序在执行到断点语句时自动暂停,此时可以通过检查各个寄存器中的值以及内存单元中的值来判断程序执行是否正确。

三.在 CCS 的C54xx simulator 上调试观察实验结果

浮点加法断点一:

7 浮点加法断点二:

浮点加法断点三:

8 浮点减法

浮点数乘法

9 浮点数除法

四 心得体会

通过学习C54X的浮点数的算术运算,以及实验结果的观察,使我了解了浮点数运算的原理,学习并掌握用TMS320C54X来进行浮点数的各种算术运算的算法实现。 实验四用定时器实现数字振荡器

10 实验四 用定时器实现数字振荡器

4.1 实验目的

在数字信号处理中,会经常使用到正弦/余弦信号。通常的方法是将某个频率的正弦/余弦值预先计算出来后制成一个表,DSP 工作时仅作查表运算即可。在本实验中将介绍另一种获得正弦/余弦信号的方法,即利用数字振荡器用叠代方法产生正弦信号。本实验除了学习数字振荡器的DSP 实现原理外,同时还学习C54X 定时器使用以及中断服务程序编写。另外,在本实验中我们将使用汇编语言和C 语言分别完成源程序的编写。

4.2 实验要求

本实验利用定时器产生一个 2kHz 的正弦信号。定时器被设置成每25uS 产生一次中断(等效于采样速率为40K)。利用该中断,在中断服务程序中用叠代算法计算出一个SIN值,并利用CCS 的图形显示功能查看波形。

4.3 实验原理

1) 数字振荡器原理

设一个传递函数为正弦序列 sinkωT,其z 变换为 H(z)=

其中,A=2cosωT, B=-1, C=sinωT。设初始条件为0,求出上式的反Z 变换得:

y[k]=Ay[k-1]+By[k-2]+Cx[k-1] 2) C54X 的定时器操作

C54X 的片内定时器利用CLKOUT 时钟计数,用户使用三个寄存器(TIM,PRD,TCR)来控制定时器,参见表4-1。在表4-2 中列出了定时器控制寄存器的各个比特位的具体定义。‘VC5402 的另一个定时器(定时器1)的控制寄存器分别为:0x30(TIM1),0x31(PRD1),0x32(TCR1)。

3) C54X 中断的使用

在 C54X 中用户可以通过中断屏蔽寄存器IMR 来决定开放或关闭一个中断请求。图4-1 给出了C5402 的IMR 寄存器的各个比特位的定义。

图 4-1 ‘C5402 的IMR 寄存器

其中,HPINT 表示HPI 接口中断,INT3-INT0 为外部引脚产生的中断,TXINT 和TRINT 为TDM 串口的发送和接收中断,BXINT0 和BRINT0 为BSP 串口的发送和接收中断,TINT0 为定时器0 中断。在中断屏蔽寄存器IMR 中,1 表示允许CPU 响应对应的中断,0 表示禁止。当然要CPU 响应中断,ST1 寄存器中的INTM 还应该为0(允许所有的中断)。

本实验的初始化程序读取中断向量表的启始地址,然后设置PMST 的高9 位,以便DSP 能正确响应中断,代码如下:

ld #0,dp ;设置DP 页指针 bx intm ;关闭所有中断

11 ld #vector, a ;读出中断向(地址vector 在中断向量表程序中定义) and #0FF80h, a ;保留高9 位(IPTR) andm #007Fh, pmst ;保留PMST 的低7 位 or pmst, a ;

stlm a, pmst ;设置PMST(其中包括IPTR)

4.4 实验内容

本实验需要使用 C54X 汇编语言或C 语言实现数字振荡器,并通过CCS 提供的图形显示窗口观察出信号波形以及频谱。实验分下面几步完成:

1) 根据确定数字振荡器的频率,确定系数。 2) 启动 CCS,新建工程文件。

3) 选择 Project 菜单中的Options 选项,或使用鼠标右键单击工程文件名(如sinewave.pjt)并选择build options 项来修改或添加编译、连接中使用的参数。选择Linker 窗口,在“Output Filename”栏中写入输出OUT 文件的名字,如sine.out,你还可以设置生成的MAP 文件名。

4) 完成编译、连接,正确生成OUT 文件。

5) 选 View→Graph→Time/Frequency„打开图形显示设置窗口。 6) 在汇编源程序的中断服务程序(_tint)中的“nop”语句处设置断点。 7) 用右键单击图形显示窗口,并选择“Proporties”项以便修改显示属性。

12 8) 清除所有断点,关闭除波形显示窗口外的所有窗口,并关闭工程文件。 9) 完成编译、连接,正确生成OUT 文件。

10)打开 C 源程序(timer.c)窗口,在中断服务程序(函数tint())的“con_buf=0;”语句处增加一个断点。同样打开图形显示窗口,并将“Start Addre”改为buf;“Acquisition Buffer Size”改为“Display Data Size”改为128,“DSP DataType”为“32-bit floating point”

11)选择 Debug→Animate,运行程序,观察输出波形。

推荐第6篇:DSP实验报告

实验0 实验设备安装才CCS调试环境 实验目的:

按照实验讲义操作步骤,打开CCS软件,熟悉软件工作环境,了解整个工作环境内容,有助于提高以后实验的操作性和正确性。 实验步骤:

以演示实验一为例:

1. 使用配送的并口电缆线连接好计算机并口与实验箱并口,打开实验箱电源;

2.启动CCS,点击主菜单“Project->Open”在目录“C5000QuickStart\sinewave\”下打开工程文件sinewave.pjt,然后点击主菜单“Project->Build”编译,然后点击主菜单“File->Load Program”装载debug目录下的程序sinewave.out;

3. 打开源文件exer3.asm,在注释行“set breakpoint in CCS !!!”语句的NOP处单击右键弹出菜单,选择“Toggle breakpoint”加入红色的断点,如下图所示;

4. 点击主菜单“View->Graph->Time/Frequency…”,屏幕会出现图形窗口设置对话框

5. 双击Start Addre,将其改为y0;双击Acquisition Buffer Size,将其改为1;DSP Data Type设置成16-bit signed integer,如下图所示;

6. 点击主菜单“Windows->Tile Horizontally”,排列好窗口,便于观察

7. 点击主菜单“Debug->Animate”或按F12键动画运行程序,即可观察到实验结果:

心得体会:

通过对演示实验的练习,让自己更进一步对CCS软件的运行环境、编译过程、装载过程、属性设置、动画演示、实验结果的观察有一个醒目的了解和熟悉的操作方法。熟悉了DSP实验箱基本模块。让我对DSP课程产生了浓厚的学习兴趣,课程学习和实验操作结合为一体的学习体系,使我更好的领悟到DSP课程的实用性和趣味性。 实验二 基本算数运算

2.1 实验目的和要求

加、减、乘、除是数字信号处理中最基本的算术运算。DSP 中提供了大量的指令来

实现这些功能。本实验学习使用定点DSP 实现16 位定点加、减、乘、除运算的基本方法

和编程技巧。本实验的演示文件为exer1.out。

2.2 实验原理

1 定点 DSP 中的数据表示方法

C54X 是16 位的定点DSP。一个16 位的二进制数既可以表示一个整数,也可以表

示一个小数。当它表示一个整数时,其最低位(D0)表示20,D1 位表示21,次高位(D14) 表示214。

2 实现 16 位定点加法

C54X 中提供了多条用于加法的指令,如ADD,ADDC,ADDM 和ADDS。其中

ADDS 用于无符号数的加法运算,ADDC 用于带进位的加法运算(如32 位扩展精度加

法),而ADDM 专用于立即数的加法。

3 实现 16 位定点减法

C54X 中提供了多条用于减法的指令,如SUB,SUBB,SUBC 和SUBS。其中SUBS 用于无符号数的减法运算,SUBB 用于带进位的减法运算(如32 位扩展精度的减法),

而SUBC 为移位减,DSP 中的除法就是用该指令来实现的。

4 实现 16 位定点整数乘法

在C54X 中提供了大量的乘法运算指令,其结果都是32 位,放在A 或B 寄存器

中。乘数在C54X 的乘法指令很灵活,可以是T 寄存器、立即数、存贮单元和A 或B 寄存器的高16 位。

5 实现 16 位定点小数乘法

在 C54X 中,小数的乘法与整数乘法基本一致,只是由于两个有符号的小数相乘,

其结果的小数点的位置在次高的后面,所以必须左移一位,才能得到正确的结果。C54X 中提供了一个状态位FRCT,将其设置为1 时,系统自动将乘积结果左移一位。但注意

整数乘法时不能这样处理,所以上面的实验中一开始便将FRCT 清除。两个小数(16 位)

相乘后结果为32 位,如果精度允许的话,可以只存高16 位,将低16 位丢弃,这样仍可

得到16 位的结果。 6 实现 16 位定点整数除法

在 C54X 中没有提供专门的除法指令,一般有两种方法来完成除法。一种是用乘法

来代替,除以某个数相当于乘以其倒数,所以先求出其倒数,然后相乘。这种方法对于

除以常数特别适用。另一种方法是使用SUBC 指令,重复16 次减法完成除法运算。

7 实现 16 位定点小数除法

在 C54X 中实现16 位的小数除法与前面的整数除法基本一致,也是使用循环的

SUBC 指令来完成。但有两点需要注意:第一,小数除法的结果一定是小数(小于1),

所以被除数一定小于除数。

2.3 实验内容

本实验需要使用C54X 汇编语言实现加、减、乘、除的基本运算,并通过DES 的存 贮器显示窗口观察结果。 1 编写实验程序代码

2 用 ccs simulator 调试运行并观察结

2.4 实验结果

1、加法结果

2、乘法结果

3、减法结果

4、除

2.5 思考题(0.5、0.25)

实验三 C54X的浮点数的算术运

一、实验目的

1 练习TMS320C54X 汇编程序的编写与调试方法,重点练习C54X 程序流程控制的方法。

2 学习并掌握应用 TMS320C54X 来进行浮点数的各种算术运算的算法实现。

3 练习并掌握 TMS320C54X 的汇编语言的汇编指令系统的使用方法,重点练习具有C54X 特点的一些在功能上有所扩展的特殊指令,并了解这些指令在进行算术运算或各种控制时所带来的方便。

4 练习并掌握用 CCS 调试程序的一些基本操作。 二.实验原理 1 浮点数的表示方法

在定点运算中,小数点是在一个特定的固定位置。例如,如果一个 32-bit 的数把小数点放在最高有效位(也就是符号位)之后,那么就只有分数(绝对值小于1)才能被显示。在定点运

算系统中,虽然在硬件上实现简单,但是表示的操作数的动态范围要受到限制。 3 浮点数运算的步骤

程序代码分成四个 ASM 文件输入,通过编译生成.obj 文件,连接生成.out 文件后就可以在DES320PP-U 实验系统上调试运行(先要创建一个工程文件,然后加入四个工程文件,并且一起编译,连接。因为每个文件都对下一个文件作了引用)。步骤如下:

a.首先启动 setup CCS C5000,在其中设置目前需要的CCS 的工作状态为C54xxsimulator,保存这一设置并退出。然后再启动CCS 实验系统软件CCS C5000。

b.在下拉菜单中选择“File”->“Load Program”以装入所要调试的程序fc.out,这时,在反汇编窗口中能看到程序的源代码。

c.在下拉菜单中选择“View”->“CPU Registers”->“CPU Register”,可以看见在CCS 界面下部份会出现CPU 中的相关寄存器;选择“View”->“Memory…”,在弹出的“Memory Window Options”窗口中选择要观察的区域为数据区,地址开始为0x80h,然后就可以看见出现一个Data Memory 窗口,其中显示了从0x80h 开始的 .b 区。

d.在反汇编窗口中需要观察的地方设置断点:在这条指令处双击将其点为红色即可。比如在加法程序中有指令nop 的位置都可以加一个断点。

e.在下拉菜单中选择“调试”——“连续运行”(或直接点击“运行程序”按钮)运行浮点数程序。如果编写程序时在计算完毕后遇到一个断点,那么程序到此会自动停止。

f.当示范程序在第一个断点处停下来时,此时就可以看见程序初始化后的情况:被加数12.0 以浮点数的格式放在内存区0x08a-0x08b 中,其值为4140h 和0000h。加数12.0 放在内存区0x08c-0x08d 中,其值也为4140h 和0000h。

g.再点击“运行程序”按钮,之后程序会在下一个断点处停下来,这时可以看见被加数被格式转换后的变量op1hm、op1lm 和op1se 的值在内存区0x084-0x086 中,分别为00c0h、0000h 和0082h。同样加数被格式转换后的变量op2se、op2hm 和op2lm的值在内存区0x087-0x089 中,分别为0082h、00c0h 和0000h。

h.再点击“运行程序”按钮,程序停下来时就可以观察到在存储器窗口中表示结果的变量rlthm、rltlm、rltsign 和rltexp 的值在内存区0x080-0x083 中,其值分别为0040h、0000h、0180h 和0083h。

i.这时可以看到 A 寄存器中的值为AH=41c0h,AL=0000h 这就是最后的以浮点数的格式表示的结果值24(=12+12)。加法运算到此结束。

j.继续点击“运行程序”按钮,当程序再次停下来时就可以看见在A 寄存器中显示的13.0 与12.0 进行减法运算的结果:AH=3f80h,AL=0000h。这是用浮点数格式表示的数1(=13-12)。减法运算的程序到此结束。

k.继续点击“运行程序”按钮,当程序再次停下来时就可以看见在A 寄存器中显示的12.0 与12.0 进行乘法运算的结果:AH=4310h,AL=0000h。这是用浮点数格式表示的数144(=12*12)。乘法运算的程序到此结束。

l.继续点击“运行程序”按钮,当程序再次停下来时就可以看见在A 寄存器中显示的12.0 与4.0 进行除法运算的结果:AH=4040h,AL=0000h。这是用浮点数格式表示的数3(=12/4)。至此加、减、乘、除四种运算都运行完毕。

m.如果程序运行不正确,请检查源程序是否有误,必要时可以在源程序中多插入断点语句。程序在执行到断点语句时自动暂停,此时可以通过检查各个寄存器中的值以及内存单元中的值来判断程序执行是否正确。

三.在 CCS 的C54xx simulator 上调试观察实验结果

浮点加法断点一:

浮点加法断点二:

浮点加法断点三:

浮点减法

浮点数乘法

浮点数除法

四 心得体会

通过学习C54X的浮点数的算术运算,以及实验结果的观察,使我了解了浮点数运算的原理,学习并掌握用TMS320C54X来进行浮点数的各种算术运算的算法实现。 实验四用定时器实现数字振荡器

实验四 用定时器实现数字振荡器

4.1 实验目的

在数字信号处理中,会经常使用到正弦/余弦信号。通常的方法是将某个频率的正弦/余弦值预先计算出来后制成一个表,DSP 工作时仅作查表运算即可。在本实验中将介绍另一种获得正弦/余弦信号的方法,即利用数字振荡器用叠代方法产生正弦信号。本实验除了学习数字振荡器的DSP 实现原理外,同时还学习C54X 定时器使用以及中断服务程序编写。另外,在本实验中我们将使用汇编语言和C 语言分别完成源程序的编写。

4.2

本实验利用定时器产生一个 2kHz 的正弦信号。定时器被设置成每25uS 产生一次中断(等效于采样速率为40K)。利用该中断,在中断服务程序中用叠代算法计算出一个SIN值,并利用CCS 的图形显示功能查看波形。

4.3 实验原理

1 数字振荡器原理

sinkωT

,其

z 变换为

H(z=

其中,A=2cosωT, B=-1, C=sinωT。设初始条件为0,求出上式的反Z 变换得:

y[k]=Ay[k-1]+By[k-2]+Cx[k-1] 2 C54X 的定时器操作

C54X 的片内定时器利用CLKOUT 时钟计数,用户使用三个寄存器(TIM,PRD,TCR)来控制定时器,参见表4-1。在表4-2 中列出了定时器控制寄存器的各个比特位的具体定义。‘VC5402 的另一个定时器(定时器1)的控制寄存器分别为:0x30

TIM1 ) ,0x31 ( PRD1 ) ,0x32 ( TCR1 )。

3 C54X 中断的使用

C54X 中用户可以通过中断屏蔽寄存器 IMR 来决定开放或关闭一个中断请求。图 4-1 给出了 C5402 的 IMR 寄存器的各个比特位的定义。

图 4-1 ‘C5402 的IMR 寄存器

其中,

表示HPI 接口中断,INT3-INT0 为外部引脚产生的中断,TXINT 和TRINT 为TDM 串口的发送和接收中断,BXINT0 和BRINT0 BSP 串口的发送和接收中断,14

为定时器 0 中断。在中断屏蔽寄存器 IMR 中, 1 表示允许 CPU 响应对应的中断, 0 表示禁止。当然要 CPU 响应中断,

INTM 还应该为 0 (允许所有的中断)。

本实验的初始化程序读取中断向量表的启始地址,然后设置的高

DSP 能正确响应中断,代码如下:

ld #0,dp ;设置DP 页指针 bx intm ;关闭所有中断

ld #vector, a ;读出中断向(地址vector 在中断向量表程序中定义)

and #0FF80h, a ;保留高9 位(IPTR) andm #007Fh, pmst ;保留PMST 的低7 位 or pmst, a ;

stlm a, pmst ;设置PMST(其中包括IPTR)

4.4 实验内容

C54X 汇编语言或C 语言实现数字振荡器,并通过CCS 提供的图形显示窗口观察出信号波形以及频谱。实验分下面几步完成:

1 根据确定数字振荡器的频率,确定系数。 2 启动 CCS,新建工程文件。

选择 Project 菜单中的Options 选项,或使用鼠标右键单击工程文件名(如sinewave.pjt)并选择build options 项来修改或添加编译、连接中使用的参数。选择Linker Output Filename”栏中写入输出OUT 文件的名字,如sine.out,你还可以设置生成的MAP 文件名。 4 完成编译、连接,正确生成OUT 文件。 5 选 View→Graph→

1

5…打开图形显示设置窗口。

6 在汇编源程序的中断服务程序(_tint)中的“nop”语句处设置断点。

7 用右键单击图形显示窗口,并选择“Proporties”项以便修改显示属性。

8 清除所有断点,关闭除波形显示窗口外的所有窗口,并关闭工程文件。

9 完成编译、连接,正确生成OUT 文件。

10打开 C 源程序(timer.c)窗口,在中断服务程序(函数tint()的“con_buf=0

Start Addre ”改为 buf ;“ Acquisition Buffer Size ”改为“ Display Data Size 128,“DSP DataType”为“32-bit floating point”

11选择 Debug→Animate,运行程序,观察输出波形。

推荐第7篇:DSP课程设计

TMS320C54x与PC通信系统的设计(单号)

一、设计目的

本次课程设计的目的是为了进一步提高学生的自我开发能力,培养学生的查阅资料,独立分析问题、解决问题以及实际动手的能力。也是对理论学习的一个应用和补充的过程。

二、设计的内容及要求

1、设计内容

主机接口HPI是一种高速、异步并行接口。TMS320C54x通过HPI接口与PC并行口的通信。

2、设计要求

(1)DSP最小硬件系统的设计

(2)TMS320C54x与PC并行口硬件电路设计 (3)软件设计

三、总体设计方案

四、硬件系统设计

五、软件系统设计

六、心得体会

七、参考文献

附录1 软件系统设计程序 附录2 硬件系统原理图

(注:按以上七个部分编写论文,内容自己扩充) 在PDF文档中P158-177中有相关资料可查阅

本系统设计是要实现

TMS320C54x与TLC320AD50的通信系统的设计(双号)

一、设计目的

本次课程设计的目的是为了进一步提高学生的自我开发能力,培养学生的查阅资料,独立分析问题、解决问题以及实际动手的能力。也是对理论学习的一个应用和补充的过程。

二、设计的内容及要求

1、设计内容

模/数接口设计是DSP系统设计中一个重要的组成部分。本系统设计是要实现对模拟信号的采集,并将其转换为数字信号通过TMS320C54x的串行通信接口将数据存储、处理及输出等功能。

2、设计要求

(1)DSP最小硬件系统的设计

(2)TMS320C54x与TLC320AD50串行口硬件电路设计 (3)软件设计

三、总体设计方案

四、硬件系统设计

五、软件系统设计

六、心得体会

七、参考文献

附录1 软件系统设计程序 附录2 硬件系统原理图

(注:按以上七个部分编写论文,内容自己扩充)

推荐第8篇:dsp作业

.c图

实验二

#define UINT unsigned int UINT i,*p,*n; void main(void) {

p=(UINT *)0x0300;

for(i=0;i

{

if(*p==0x8888)

n=p;

p++;

} }.cmd图

MEMORY {

PAGE 0: PROG:

origin = 1a00h, length = 2580h

vectors: origin = 3f80h, length = 80h

PAGE 1: DATA:

origin = 0200h, length = 1800h }

SECTIONS {

.text

>PROG PAGE 0

.cinit >PROG PAGE 0

//.switch >PROG PAGE 0

vect

>vectors PAGE 0

.data

>DATA PAGE 1

.b

>DATA PAGE 1

.const >DATA PAGE 1

.sysmem >DATA PAGE 1

.stack >DATA PAGE 1 } xf高低电平等时间循环变化截图如下所示:

找出由地址0x0300~0x0320中存储数据为0x8888的地址截图如下所示:

心得体会:

经过这次实验,理解了对地址0x0300~0x0320中存储数据为0x8888的寻找和设置。

推荐第9篇:DSP学习心得

数字信号处理—DSP课程学习的认识

今年学习了DSP这门课程后,有了一些自己的认识和见解,并且体会到了它强大的功能和作用,它不但在高端的技术领域有很重要的地位,如通信、雷达、声纳、语音合成和识别、图像处理、高速控制等;而且在生活中有它不小的作用,如,影视、仪器仪表、医疗设备、家用电器等众多领域。

但是,由于DSP技术发展很快,生产DSP芯片的厂家又多,这既是它的优点同时又是缺点,因为这样会导致产品更新换代的周期越来越短,还有,每一种芯片,都有其独特的硬件结构和一套专门的指令系统与开发工具,这更加的带来了学习DSP技术的困难。在我自己的学习体系里,有自己的一点经验可以用来辅助的学习这门课程。古时候的一个习语说的是“窥一斑而知全豹”这个同时可以用来指导学习DSP,尽管它的更新换代很快,但也只是为了完善它而更好用和借助其它的技术为它添加一些别的功能而使其更强大,其实质的理论还没有变话,所以,我们可以就其某一个芯片的知识来指导其它的芯片的学习和利用。这里,以TMS320系列DSP芯片为例来进行知识的梳理。

x(t)→抗混叠滤波器→A/D→数字信号处理器→D/A→低通滤波器→y(t)

数字信号处理系统简化框图

这个作为基本的理论模型,然后开始主要内容:1.1,TMS320系列DSP芯片的概述﹑分类及应用、平台;1.2,主要特性有①CPU,②存储器,③指令系统,④在片外围电路,⑤电源,⑥在片仿真接口,⑦速度、组成框图;1.3,总线结构;

1.4,存储器空间分配、存储器(程序存储器、数据存储器);1.5,中央处理单元中,算术逻辑运算单元①ALU的输入,②ALU的输出,③溢出处理,④进位位,⑤双16位算术运算,累加器A和B(保存累加器的内容、累加器移位和循环移位、专用指令),桶形移位器乘法器/加法器单元,比较、选择和存储单元,指数编码器,CPU状态和控制寄存器;1.6,数据寻址方式①立即寻址,②绝对寻址,③累加器寻址,④直接寻址,⑤间接寻址;⑥存储器映像寄存器寻址,⑦堆栈寻址;1.7程序存储器地址生成方式,程序计数器,分支转移,调用与返回,条件操作,重复操作(重复执行单条指令、程序块重复操作),复位操作,中断(中断类型、中断标志寄存器和中断屏蔽寄存器、中断处理过程),省电方式;

1.8,流水线①流水线操作,②延迟分支转移,③条件执行,④双寻址存储器与流水线,⑤单寻址存储器与流水线,⑥流水线冲突和插入等待周期(流水线冲突、等待周期表);1.9,在片围电路①并行I/O口及通用I/O引脚,②定时器,③时钟发生器(硬件配置的PLL软件可编程PLL),④主机接口;1.10,串行口;串行口概述(标准串行口、缓冲串行口、时分多路串行口、多通道缓冲串行口);

1.11,DMA控制器①DMA控制器的基本特征,②子地址寻址方式,③DMA通道优先级和使能控制寄存器,④DMA通道现场寄存器,⑤DMA编程举例;1.12,外部总线①外部总线接口,②外部总线操作的优先级别,③等待状态发生器,④分区切换逻辑,⑤外部总线接口定时器(存储器寻址定时图、I/O寻址定时图);⑥复位和IDLE3省电工作方式(外部总线复位定时图、“唤醒”IDLE3省电方式的定时图);1.13,TMS320C54x引脚信号说明。

推荐第10篇:太原理工大学DSP课设报告

一、设计摘要

摘要:

DSP数字信号处理(Digital Signal Proceing,简称DSP)是一门涉及许多学科而又广泛应用于许多领域的新兴学科。DSP 芯片是一种特别适合数字信号处理运算的微处理器,主要用来实时、快速地实现各种数字信号处理算法用DSP 芯片实现IIR 数字滤波器,不仅具有精确度高、不受环境影响等优点,而且因DSP 芯片的可编程性,可方便地修改滤波器参数,从而改变滤波器的特性,设计十分灵活。IIR数字滤波器有其独特的优点,IIR数字滤波器单位响应为无限脉冲序列, IIR数字滤波器采用递归型结构,即结构上带有反馈环路。

本课题主要应用MATLAB软件设计IIR数字滤波器,并对所设计的滤波器进行仿真;应用DSP集成开发环境——CCS调试汇编程序。利用MATLAB仿真得到的滤波器系数,编程实现IIR数字滤波器,得出滤波结果波形,并对结果进行分析与总结。

关键字:DSP

IIR滤波器

编程

二、设计目的

(1)通过设计对DSP芯片有进一步的了解。 (2)掌握IIR滤波器的设计方法。 (3)培养一定的汇编及c语言能力。

三、设计原理

3.1 IIR数字滤波器的理论分析

从IIR数字滤波器的实现来看,有直接型、级联型、并联型和格型等基本网络结构。不同的结构形式会有不同的运算误差,其稳定性、运算速度、所占用的存储空间等也有所不同。其中直接Ⅱ型仅需要N级延迟单元,且可作为级联型和并联型结构中的基本单元,是最常用的IIR数字滤波器结构之一。IIR数字滤波器的设计方法有两类[4],一类是借助于模拟滤波器的设计方法设计出模拟滤波器,利用冲激响应不变法或双线性变换法转换成数字滤波器,然后用硬件或软件实现;另一类是直接在频域或时域中进行设计,设计时需要作辅助工具。对系统传递函数为

1

[3]

H(z)bzrr0Nk0Mr

1akzk对应的差分方程为:

y(n)brx(nr)aky(nk)

r0k1MN的IIR数字波滤器来说,设计的任务就是寻求一种因果关系和物理上可实现的系统传递函数使H(z)满足上述的关系,为此可这样使其频率响应能够满足所希望得到的频域指标。

3.2 TMS320C5502的体系结构

TMS320VC5402处理器在本系列中处于先进水平。它具有运算速度快,内部存储空间大,外部接口性能好等优点。所以我选择了技术上比较先进,价格又较便宜的C5402作为硬件开发对象。下面结合C5402的实际情况,介绍一下该芯片的体系结构。C5402共有144个引脚,其中有20根地址线AO-A19,16根数据线DO-D15,4个外部可屏蔽引脚INTO#-INT3#和一个不可屏蔽中断引脚BIO#,剩下的引脚可以分成以下几类:存储器控制引脚,时钟/晶振引脚,多通道缓冲串口引脚,主机接口通讯引脚,电源引脚,初始化和复位引脚,通用输入/输出引脚,以及用于测试的IEEE1149.1标准JTAG口。

3.3 IIR数字滤波器的设计流程

在设计滤波器时首先要有清晰的思路,因此流程图的设计至关重要。本设计采用的是基于DSP的IIR数字滤波,针对其要完成的功能,对其流程进行了初步规划,如图1所示:

2

开始系统初始化分配数据空间设置数据指针从指定端口读数据x(n)并从数据存储器读读取系数完成数据的乘加运算修改数据指针为下一次乘加运算做准备保存结果从指定端口输出结果图1 IIR数字滤波器设计流程

根据设计流程,通过DSP仿真软件编译出适合参数要求的汇编程序。运用汇编语言进行程序编写使其具有更好的实时性,此外运用汇编语言编写更有助于以后的设计拓展。

利用TMS320C5402实现IIR的程序中应注意以下几点:

(1)数据存放要求。因为采用MAC指令和循环寻址,所以输入数据和滤波器系数的存放要按照一定的要求。数据块和系数块都要放在双寻址数据存储区。 (2)循环寻址的使用。为了使用循环寻址,除了对数据的存放有要求外,先还要设置BK为块长N。由于使用了循环寻址,数据和系数的指针在操作后以循环的方式增加1。

(3)数据的初始化。输入数据块要初始化为全0。这样在运算中不会对输入产生影响。

四、IIR数字滤波器的软件和硬件设计

3 4.1 IIR数字滤波器的数据存储器设计

TMS320C54X定点DSP提供了单周期乘/累加指令MAC和循环寻址方式,使IIR数字滤波器每个样值的计算可以在一个周期内完成。IIR数字滤波器每个样值的计算就是实现两数组对应项乘积的累加和。在计算时有前向通道和反馈通道两部分,因此在计算设计时要充分考虑x(n)、y(n)和h(n)系数的存放位置,并正确初始化这两个存储块指针,这样在计算中才能够准确取数据,实现乘加运算。数据存储器X:AR2X0X1X2AR1COEF:数据存储器B2B1B0A2A1

图2 存储过程

4.2 IIR滤波器的MATLAB辅助设计

对于脉冲响应不变法,它是将s域内的H(s)转换成z域内的H(z),但是在映射时,S域内不能一一对应到Z域内的单位圆上,因此容易在仿真中易产生混叠现象,影响实验效果。基于此,本次设计在MATLAB的仿真中优先考虑应用双线性变换法。

IIR低通数字滤波器根据相关技术指标进行matlab仿真,从而计算出相应的传输函数。其仿真结果结果如图3所示:

4

图3 利用matlab仿真图

根据以上仿真结果及相应的系数和N值,在相关技术指标不变的情况下,我选用了ChebyshevI型双线性变换法。

4.3基于DSP的IIR数字滤波器的硬件设计 硬件设计总体方案:

TI公司的2000系列和5000系列的DSP都通用型的芯片,考虑到2000系列的DSP多用于控制方面,而5000系列较2000系列具有更高的时钟频率、更低的价格和更加强大的运算功能,所以在数字滤波器系统的设计中采用了TI公司的一款高性能、低功耗的定点DSP: TMS320VC5402。该DSP具有较快的运算速度:运算速度最快可达532MIPS;采用了低功耗设计方式:内核电压为1.8V,I/O电压为3.3 V。数字滤波系统的具体方案框图如图6所示:

ADCTMS320VC5402FLASHSRAMJTAG时钟电源DAC图4数字滤波器系统方案框图

通常的设计中会采用SV供电并行的ADC(模数转换)和DAC(数模转换)芯

5 片与DSP连接,传输数据过程中会占用总线的时间,而且需要采用多片电平转换器件将SV电平转换为3.3V的逻辑电平。考虑到TMS320VC5402的片上包含两个McBSP(多通道缓冲串行口)接口,可以将这两个通道模仿实现SPI的时序,因此本设计中采用了SPI接口器件,ADC芯片采用的是TLV 1570,实现将需要滤波信号从模拟转换到数字信号的实时采样。数模转换芯片采用的是TLV 5608,实现滤波后的信号从数字信号恢复为所需要的模拟信号。JTGA口供DSP芯片下载程序调试。

PMST=FFA0H, ST1=2300H,; SWWSR=0, OVM=1, FRCT=1, SXM=1STM #X, AR1STM #Y,AR2 STM #d,AR3 ; RPT A,#5 ;初始化d(n),d(n-1),d(n-2)=0 STL A,*AR3+ STM #2,AR0 ;初始化Arn是地址偏移量为常数 INLOOP:STM #d+5,AR3 ; STM #table,AR4 ;IIR的系数A2,A1,B2,B1,B0 PORTR 100H,*AR1 ;从端口读入数据

LD *AR1,7,ASTM #N-1,BRC ;计算IIR的节数N RPT ELOOP LOOP:MAC *AR4+,*AR3-,A ;input+d(n-2)*A2 MAC*AR4,*AR3,A-;input+d(n-2)*A2+d(n-1)*A1 MAC*AR4+,*AR3-,A STH A,*AR3+0;d(n)=input+d(n-2)*A2+d(n-1)*A1 MPY *AR4+,*AR3-,A ;d(n-2)*B2 MAC*AR4+,*AR3,A;d(n-2)*B2+d(n-1)*B1 DELAY*AR3-;d(n-2)=d(n-1)

6 MAC*AR4+,*AR3,A;d(n-2)*B2+d(n-1)*B1+d(n)*B0 DELAY*AR3-;d(n-1)=d(n) ELOOP:STHA,*AR2;output=d(n-2)*B2+d(n-1)*B1+d(n)*B0 PORTW *AR2,200h ;将结果写入文件中BINLOOP

END

五、仿真分析及结果

5.1 CCS仿真细节

CCS是一个开放的环境,可以通过设置不同的驱动程序完成对不同环境的支持。CCS setup 配置程序就是用来定义DSP芯片和目标板类型的。在第一次使用CCS之前必须首先运行CCS setup 配置程序。在以后的使用中,若想改变CCS应用平台的类型,可以再次运行该配置程序来改变设置。CCS软件集成了TI公司的Simulator和Emulatord 的驱动程序,用户可以直接用TI的仿真器进行开发测试。

5.2 IIR数字滤波的软件调试

在效果图中,上面波形为DSP实验箱产生的滤波前的效果图,下面波形为进行IIR滤波后的效果图。从两图的比较可以看出,所设计的IIR滤波器收到了较好的效果,完成了设计要求。

在编写及调试的过程中主要遇到以下问题:

(1)在编写程序的过程中要对所涉及的存储单元进行初始化,这样在数据或是代码段进行汇编时才不会出现问题。

(2)编写程序需要对数据段、代码段、堆栈段进行设置。要编写相应的.cmd(链接命令文件)文档对其进行合理化的分配空间。

(3)在编写程序时一定要编写相应的中断向量表文件,这样在汇编时才不会出错。

5.3 芯片选择

此设计中采用的是C5502 Device Simulator芯片,IIR输入信号入口地址data_in,输出地址为out。

7

图4 芯片选择

5.4创建项目

图5 创建项目

5.5加载程序

图6 加载程序

8 5.6程序

(1)IIR.asm .global _iir,_init,_outdata _iir

bset frct

sub #1,t0

mov t0,mmap(csr) add t0,ar0 mov xar2,xdp mov ar2,cdp mov #0,ac0 rpt csr macmz *ar0-,*cdp+,ac0 add t0,ar1 mov xar3,xdp mov ar3,cdp rpt csr macmz *ar1-,*cdp+,ac0 mar *ar1+ mov hi(ac0),*ar1 mov hi(ac0),t0 bclr frct ret _init

sub #1,t0 mov t0,mmap(csr) mov #0,ac0 rpt csr mov ac0,*ar0+ rpt csr mov ac0,*ar1+ ret _outdata

mov t1,ac0 sub #2,ac0 mov ac0,mmap(csr) add ac0,ar0 rpt csr delay *ar0- mar *ar0+ mov t0,*ar0 ret

9

图7 汇编源程序

(2)IIR55.c #include \"math.h\" #define signal_1_f 500 #define signal_2_f 10000 #define signal_sample_f 25000 #define pi 3.1415926 #define IIRNUMBER_L 2 #define bufer_L 256 int N_L=IIRNUMBER_L; int data_in[bufer_L]; int out[bufer_L] ; int x[IIRNUMBER_L+1]; int y[IIRNUMBER_L+1]; int k=0; int bufer=bufer_L; int fBn[IIRNUMBER_L]={0,0x634a}; int fAn[IIRNUMBER_L]={0xe5c,0xe5c}; extern int iir(int *x,int *y,int *fAn,int *fBn,int N_L); extern int init(int *,int *,int); extern int outdata(int *,int,int); void inputwave(); void main() { int iirout;

10 inputwave(); init(x,y,N_L); while(1) { x[0]=data_in[k]; iirout=iir(x,y,fAn,fBn,N_L); outdata(out,iirout,bufer); k++; if(k>=bufer_L) { k=0; } } } void inputwave() { float wt1; float wt2; int i; for(i=0;i

图8 c程序

(3)Ink.cmd -stack 0x0500

11 -sytack 0x0500 -heap 0x1000 -c -u _Reset -l rts55.lib MEMORY { PAGE 0:

RAM(RWIX): origin=0x000100,

length=0x01ff00

ROM(RIX): origin=0x020100,

length=0x01ff00

VECS(RIX): origin=0xffff00,

length=0x000200 PAGE 2:

IOPORT(RWI):origin=0x000000, length=0x020000 } SECTIONS {

.text >ROM PAGE 0

.data >ROM PAGE 0

.b >RAM PAGE 0

.const >RAM PAGE 0

.sysmem >RAM PAGE 0

.stack >RAM PAGE 0

.cio

>RAM PAGE 0

.sytack >RAM PAGE 0

.switch >RAM PAGE 0

.cinit >RAM PAGE 0

.pinit >RAM PAGE 0

.vectors >VECS PAGE 0

.ioport >IOPORT PAGE 2

}

图9 命令程序

12 5.7运行结果

图10 运行结果

5.8更改图形参数

图11 更改参数过程

13 5.9波形图

图12波形图

图13 滤波前时域波形

14

图14滤波前频域波形

图15 滤波后时域波形

15

图16 滤波后频域波形

六、心得体会

参考文献

【1】汪春梅,孙洪波TMS320C55x DSP原理及应用.电子工业出版社.2011.6 【2】 戴明桢.TMS320C54xDSP结构、原理及应用[M].北京航空航天大学出版社,2001,8.【3】 胡圣尧.DSP原理及应用[M].东南大学出版社,2008.7.【4】清源科技.TMS320C54xDSP应用程序设计教程[M].机械工业出版社,2004,1.【5】邹彦.DSP原理及应用[M].北京:电子工业出版社,2005,1.

16

第11篇:DSP结课论文报告格式

《DSP原理与应用》

结课论文

楷体小初居中

设计题目:××××××

宋体小二居中

业:农业电气化与自动化

级:09农电一班

名:霍 春 阳

号:20094072107

宋体小三居中

(空两行)

宋体二号居中

1………………………………………………………………页码 2………………………………………………………………页码 (要求:给出一级目录,宋体加粗,四号字,1.5倍行距。)

宋体四号 (报告正文部分):

(要求:正文部分一律用小四号字,宋体,1.5倍行距。一级大标题靠左,加粗。二级大标题靠左,不加粗。) 题目设计的内容如下: 1.设计目的

2.设计题目描述和要求

根据选定的监测项目来确定课程设计的题目。 3.题目设计报告内容 3.1 XXXXXXXXXXXXXXXX 3.2 XXXXXXXXXXXXXXXX 3.3 XXXXXXXXXXXXXXXX

(注:设计原理图必须保证描绘清楚,也可以用手画)

4.总结

参考书目:(五号,宋体加粗) [1] 柴诚敬,刘国维,李阿娜,《化工原理课程设计》,天津,天津科学技术出版社,1994年 [2] …………………………………………………………………………..

(要求:五号字,宋体,单倍行距。按作者、书名、出版社、地点、出版时间格式逐一列出,中间用逗号格开)

第12篇:DSP大作业

C54x,C55x,C6000芯片的比较

简介

DSP是一种特别适合于进行数字信号处理运算的微处理器,主要用于实时2快速实现个二中数字信号处理的算法。在二十世纪八十年代以前,由于受实现方法的限制,数字信号处理的理论还不能得到广泛的应用。直到二十世纪八十年代初,世界上第一块单片可编程DSP的诞生,才将理论运用到实际当中。

DSP芯片的发展非常迅速,硬件结构方面主要是向多处理器的并行处理结构,便于外部数据交换的串行总线传输,大容量片上RAM和ROM,程序加密,增加I/O驱动能力,外围电路内装化,低功耗等方面发展。

C54x,C55x,C6000是DSP系统常用的芯片,下面就他们的硬件结构,运算性能,指令系统,应用场景上的区别进行分析。 (1) C54x:  硬件结构

C54x主要有CPU,内部总线控制,特殊功能寄存器,数据存储器,数据存储器RAM,程序存储器ROM等构成。 CPU:  内部总线结构

C54x有8组16位总线:1组程序总线,3组数据总线和4组地址总线,可在一个指令周期内产生两个数据存储地址,实现流水线并行数据处理。  特殊功能寄存器

该芯片共有26个特殊功能寄存器,用来对片内各功能模块进行管理,控制,监视。它们位于具有特殊功能的RAM区。 存储器

可访问的最大存储空间为64k的程序,64k的数据以及64k的I/O空间。片内ROM,可配置为程序存储器和数据存储器。  指令系统

支持单指令重复和块指令重复操作 支持存储器块传送指令 支持32位长操作数的读指令

具有能并行存储和并行加载的算术指令 支持条件存储指令及中断快速返回指令 1) 算术运算指令 2) 逻辑运算指令 3) 程序控制指令 4) 加载和存储指令  速度

5.0V电压的器件,其速度可达到40MIPS,指令周期时间为25ns。3.3V电压器件,其速度可达到80MIPS,指令周期时间为12.5ns。 2.5V电压的器件,其速度可达到100MIPS,指令周期时间为10ns。 1.8V电压的器件,其速度可达到200MIPS,指令周期时间为10ns  应用

该芯片具有很高的处理速度和广泛的应用适应性,采用模块化的设计,功耗小,常用于扩频通信,移动通信,语音识别,发动机控制,超声设备等等。 (2)C55x TMS320C55x在C54x的基础上发展起来的新一代低功耗,高性能数字信号处理器。

1) 软件具有C54x兼容模式;

2) 工作时钟大大超过了C54x系列处理器;

3) CPU内部通过增加功能单元增强了DSP的运算能力

具有更高的性能和更低的功耗,在无线通信,个人数字系统以及高效率的多通道数字压缩语音电话中得到广泛应用。  硬件结构

1) 主要由CPU,存储器,和片上设备构成。

2) 两个乘法累加器,在一个单周期执行双乘法操作;40位的算术逻辑单元和一个16位的算术逻辑单元,实现高精度算术和逻辑操作,对主ALU完成简单的逻辑运算;

3) 4个累加器,可以保留计算结果,减少对存储单元的访问;算术逻辑单元具有并行处理能力。

4) 具有3根读总线,2根写总线,6根地址总线,16位的数据字长,辅助寄存器字长为3个字节,8个辅助寄存器,统一的程序/数据存储空间,4个数据寄存器。

 指令系统

1) 算术指令系统 2) 位操作指令

3) 扩展辅助寄存器操作指令 4) 逻辑运算指令 5) 移动指令 6) 程序控制指令  速度 与C54x相比,处理速度明显提高,功耗明显降低。300MHz的C55x比120MHz的C54x处理速度提高了5倍,功耗降到C54x的1/6。

 应用

C55x应用在高功效的设施,要求提高信道密度,但又有严格的功耗和空间限制。适合于刚刚推出使用的3G手机,用于因特网的音频,视频,数据的移动产品等。可以延长电池的寿命,将数字蜂窝电话,便携式声音播放器,数码相机的电池使用时间,从小时延长到天。 (3)C6000  硬件结构

TMS320C6000产品是美国TI公司于1997年推出的dsp芯片,该DSP芯片定点、浮点兼容,其中,定点系列是TMS320C62xx系列,浮点系列是TMS320C67xx系列,2000年3月,TI发布新的C64xx内核,主频为1.1GHz,处理速度9000MIPS,在图像处理和流媒体领域得到了广泛的应用。

C6000片内有8个并行的处理单元,分为相同的两组。DSP的体系结构采用超长指令字结构,单指令字长为32位,指令包里有8条指令,总字长达到256位。执行指令的功能单元已经在编译时分配好,程序运行时通过专门的指令分配模块,可以将每个256为的指令包同时分配到8个处理单元,并有8个单元同时运行。芯片最高时钟频率为300MHz(67xx系列),且内部8个处理单元并行运行时,其最大处理能力可达到1600MIPS。  指令系统

1) 程序转移类指令 2) 算术运算类指令 3) 逻辑即位域操作指令 4) 搬移类指令 5) LOAD/STORE类指令 6) C6000公共指令  应用

C6000系列的高速处理能力以及其出色的对外接口能力,使得它在雷达声呐,医疗仪器和图像处理等领域具有非常大的应用潜力。

运算速度比传统的快很多,因此在军事投稿信,电子对抗,雷达系统和制导武器等应用比较广泛。

第13篇:DSP实验学习心得

DSP实验学习心得

论DSP发展前景

DSP 即为数字信号处理器(Digital Signal Proceing),是在模拟信号变换成数 字信号以后进行高速实时处理的专用处理器。它的工作原理是将现实世界的模拟信号转换 成数字信号,再用数学方法处理此信号,得到相应的结果。自从数字信号处理器(Digital Signal Proceor)问世以来,由于它具有高速、灵活、可编程、低功耗和便于接口等特 点,已在图形、图像处理,语音、语言处理,通用信号处理,测量分析,通信等领域发挥 越来越重要的作用。随着成本的降低,控制界已对此产生浓厚兴趣,已在不少场合得到成 功应用。DSP 数字信号处理器 DSP 芯片采用了数据总线和程序总线分离的哈佛结构及改 进的哈佛结构,较传统处理器的冯?诺依曼结构具有更高的指令执行速度。其处理速度比最 快的 CPU 快 10-50 倍。在当今数字化时代背景下,DSP 已成为通信、计算机、消费类电 子产品等领域的基础器件,被誉为信息社会革命的“旗手”。

最初的 DSP 器件只是被设计成用以完成复杂数字信号处理的算法。DSP 器件 紧随着数字信号理论的发展而不断发展。DSP发展最快,现在的 DSP 属于第五代产品,它与第四代相比,系统集成度更高,将 DSP 芯核及外围组件综合集成在单一芯片上。这种集成度极高的 DSP 芯片不仅在通信、计算机领域大显身手,而且逐渐渗透 到人们日常消费领域,前景十分可观。近年来,随着通信技术的飞速发展,DSP已经成为信号与信息处理领域里一门十分重要的新兴学科,它代表着当今无线系统的主流发展方向。现在,通信领域中许多产品 都与 DSP 密切联系,例如,Modem、数据加密、扩频通信、可视电话等。而寻找 DSP 芯片来实现算法最开始的目标是在可以接受的时间内对算法做仿真,随后是将波形存储起 来,然后再加以处理。

在短短的十多年 时间,DSP芯片已经在信号处理、通信、雷达等许多领域得到广泛的应用。目前, DSP 芯片的价格也越来越低,性能价格比日益提高,具有巨大的应用潜力。DSP 芯片的应用主要有: (1)

信号处理--如,数字滤波、自适应滤波、快速傅里叶变换、相关运算、频谱分析、卷积等。 (2) 通信--如,调制解调器、自适应均衡、数据加密、数据压缩、回坡抵消、多路复用、传真、扩频通信、纠错编码、波形产生等。 (3) 语音--如语音编码、语音合成、语音识别、语音增强、说话人辨认、说话人确认、语音邮件、语音储存等。 (4) 图像/图形--如二维和三维图形处理、图像压缩与传输、图像增强、动画、机器人视觉等。 (5) 军事--如保密通信、雷达处理、声纳处理、导航等。

(6) 仪器仪表--如频谱分析、函数发生、锁相环、地震处理等。 (7)

自动控制--如引擎控制、深空、自动驾驶、机器人控制、磁盘控制。 (8)

医疗--如助听、超声设备、诊断工具、病人监护等。(9) 家用电器--如高保真音响、音乐合成、音调控制、玩具与游戏、数字 电话/电视等 DSP 的发展前景 DSP 的功能越来越强,应用越来越广,达到甚至超过了微控制器的功能,比 微控制器做得更好而且价格更便宜, 许多家电用第二代 DSP 来控制大功率电机就 是一个很好的例子。汽车、个人通信装置、家用电器以及数以百万计的工厂使用 DSP 系统。数码相机、IP 电话和手持电子设备的热销带来了对 DSP 芯片的巨大需 求。而手机、PDA、MP3 播放器以及手提电脑等则是设备个性化的典型代表,这 些设备的发展水平取决于 DSP 的发展。新的形势下,DSP 面临的要求是处理速度 更高,功能更多更全,功耗更低,存储器用量更少。

DSP 的技术发展将会有以下 一些走势: (1)系统级集成 DSP 是潮流。小 DSP 芯片尺寸始终是 DSP 的技术发展方向。 当前的 DSP 尺寸小、功耗低、性能高。各 DSP 厂商纷纷采用新工艺,改进 DSP 芯核,并将几个 DSP 芯核、MPU 芯核、专用处理单元、外围电路单元、存储单元 统统集成在一个芯片上,成为 DSP 系统级集成电路。 (2)追求更高的运算速度和进一步降低功耗和几何尺寸。由于电子设备的 个人化和客户化趋势,DSP 必须追求更高更快的运算速度,才能跟上电子设备的 更新步伐。同时由于 DSP 的应用范围已扩大到人们工作生活的各个领域,特别是 便携式手持产品对于低功耗和尺寸的要求很高,所以

DSP 有待于进一步降低功 耗。按照 CMOS 的发展趋势,依靠新工艺改进芯片结构,DSP 运算速度的提高和 功耗尺寸的降低是完全可能的。

(3)DSP 的内核结构进一步改善。DSP 的结构主要是针对应用,并根据应用 优化 DSP 设计以极大改进产品的性能。多通道结构和单指令多重数据、超长指令 字结构、超标量结构、超流水结构、多处理、多线程及可并行扩展的超级哈佛结 构(SHARC)在新的高性能处理器中将占据主导地位。 (4)DSP 嵌入式系统。DSP 嵌入式系统是 DSP 系统嵌入到应用电子系统中 的一种通用系统。这种系统既具有 DSP 器件在数据处理方面的优势,又具有应用 目标所需要的技术特征。在许多嵌入式应用领域,既需要在数据处理方面具有独 特优势的 DSP,也需要在智能控制方面技高一筹的微处理器(MCU)。因此,将 DSP 与 MCU 融合在一起的双核平台,将成为 DSP 技术发展的一种新潮流。 DSP 的发展非常迅速,而销售价格逐年降低目前 DSP 的结构、总线、资源和 接口技术都趋于标准化,尤其接口的标准化进展更快。这给从事系统设计的工程 技术人员带来很大机遇, 采用先进的 DSP 将会使开发的产品具有更强的市场竞争 力。

近几年来,DSP芯片、应用软件和系统的发展非常迅速,每年增长速度高达40%。 其市场驱动力主要是因特网、无线通信、硬盘驱动器、可视电话和会议电视以及其它消费 类电子产品。也就是说,DSP产业的发展依赖于通信技术和通信市场。随着新的通信体 制、传输方式和多媒体智能终端的迅速发展,其算法、标准和规程都需要在实践中不断发 展、改进和优化。DSP编程的灵活性和不断增强的运算能力,同时又将使通信技术向更 高层次迈进。这对通信领域的广大科技人员是一个机遇。抓住这个机遇,我们将大有作为。

通过这几次实验,我初步的对dsp有了一定了解。虽然是在老师们的指导下完成实验要求的,但是我想我还是收获蛮多的。希望在以后的学习生活中能对dsp有更多的学习和研究。

第14篇:Dsp学习笔记

1 GPIO作为通用I/O口使用

a) EALLOW;//防止私自写或覆盖寄存器的内容,加了这句,接下来可以操作寄存器了 b) GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 0; // GPIO0复用为普通I/O功能 c) GpioCtrlRegs.GPADIR.bit.GPIO0 = 1;// 1,设置为输出;0设置为输入 d) EDIS;//加了这句,接下来不可以操作寄存器

注:EALLOW,EDIS总是成对出现

2 中断过程(代码以配置SCIB模块的接收中断为例,LSPCLK是37.5MHz)

中断共分三级,1,外设级;2,PIE级;3,CPU级;外设级的中断标志必须手动清零;PIE级和CPU级的中断标志位由硬件自动清零。中断响应例程:

第一步,配置中断源,即允许产生什么类型点中断。例如,定时器中断,串口中断,外部中断等。ScibRegs.SCICTL2.bit.RXBKINTENA =1;允许接收中断

第二步,配置PIE(外部中断扩展)

a)InitPieCtrl();//初始化Pie控制

b)InitPieVectTable();//初始化Pie向量表控制

c)EALLOW;

d)PieVectTable.SCIRXINTB=&scibreceive;//指定中断服务程序地址e)EDIS;

f)PieCtrlRegs.PIECTRL.bit.ENPIE=1;//使能从PIECTRL中读取中断向量 g)PieCtrlRegs.PIEIER9.bit.INTx3=1;//使能SCIB的接收中断

h)IER |= M_INT9;//允许外部中断

i)EINT;

j)ERTM;

第三步,中断响应

在中断服务程序里,必须用PieCtrlRegs.PIEACK.all = PIEACK_GROUP9;//清楚中断已响应标识,再写自己等程序代码

3 串口配置

InitScibGpio(); scib_echoback_init();

4 AD转换

InitAdc();//允许ADC时钟,带隙和参考电路上电,核中模拟电路上电

AdcRegs.ADCTRL2.all = 0x2000;//ADC模块开始转换

程序在FLASH运行时,需要加如下两句代码:(不知道具体原因)

MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart);InitFlash();

第15篇:DSP理论课总结

GX_Joe 第一次课-----DSP概念 Q1:DSP的概念:

DSP可以代表数字信号处理技术( Digital Signal Proceing) ,也可以代表数字信号处理器( Digital Signal Proceor)。 前者是理论和计算方法上的技术,后者是指实现这些技术的通用或专用可编程微处理器芯片。

数字信号处理包括两个方面的内容: 1.算法的研究

算法的研究是指如何以最小的运算量和存储器的使用量来完成指定的任务。诸如:语音与图像的压缩编码、识别与鉴别,信号的调制与解调、加密和解密,信道的辨识与均衡,智能天线,频谱分析等各种快速算法 2.数字信号处理的实现

数字信号处理的实现是用硬件、软件或软硬结合的方法来实现各种算法。它和单片机的主要区别在于数值处理和高速运算。数字信号处理的实现一般有以下几种方法:

基于软件仿真的MATLAB,基于PC的应用程序,单片机,FPGA,DSP,ASIC

Q2:DSP结构特点:(手把手P1)

强调实时性;除了具备普通微处理器所强调的高速运算和控制能力外,针对实时数字信号处理的特点,在处理器的结构、指令系统、指令流程上作了很大的改进,其主要特点如下:

(PS比较哈佛和冯诺依曼结构的区别)

冯.诺依曼指出:程序只是一种(特殊)的数据,它可以像数据一样被处理,因此可以和数据一起被存储在同一个存储器中——这就是著名的冯.诺依曼原理。注意:数据总线和地址总线共用。

哈佛结构是一种并行体系结构,它的主要特点是将程序和数据存储在不同的存储空间中,即程序存储器和数据存储器是两个独立的存储器,每个存储器独立编址、独立访问。

数据指令存储区是分开的,但总线是分时复用得----改进型的哈佛结构

哈佛结构 Q3:DSP分类

Q4:选型(以TI公司为例) 手把手P2-P3

Q5:DSP主要应用

Q6:DSP技术的现状和发展趋势

Q7:DSP系统的构成和工作过程 构成:

一个典型的DSP系统应包括抗混叠滤波器、数据采集A/D转换器、数字信号处理器DSP、D/A转换器和低通滤波器组成。

工作过程:

① 将输入信号x(t)进行抗混叠滤波,滤掉高于折叠频率的分量,以防止信号频谱的混叠;

② 经采样和A/D转换器,将滤波后的信号转换为数字信号x(n); ③ 数字信号处理器对x(n)进行处理,得数字信号y(n); ④ 经D/A转换器,将y(n)转换成模拟信号;

⑤ 经低通滤波器,滤除高频分量,得到平滑的模拟信号y(t)。 Q8:什么是定点DSP和浮点DSP?

DSP数字信号处理器是一种特别适合于进行数字信号处理的微处理器,主要用于实时快速地实现各种数字信号处理算法。定点运算 DSP 在应用中已取得了极大的成功,而且仍然是DSP应用的主体。

和定点运算 DSP 相比,浮点运算 DSP 具有许多优越性: 浮点运算 DSP 比定点运算 DSP 的动态范围要大很多。定点 DSP 的字长每增加 1bit,动态范围扩大 6dB。16bit 字长的动态范围为 96dB。32bit 浮点运算 DSP 的动态范围可以作到 1536dB,这不仅大大扩大了动态范围,提高了运算精度,还大大节省了运算时间和存储空间,因为大大减少了定标,移位和溢出检查。

由于浮点 DSP 的浮点运算用硬件来实现,可以在单周期内完成,因而其处理速度大大高于定点 DSP。这一优点在实现高精度复杂算法时尤为突出,为复杂算法的实时处理提供了保证。32bit 浮点 DSP 的总线宽度较定点 DSP 宽得多,因而寻址空间也要大得多。这一方面为大型复杂算法提供了可能、因为省的 DSP 目标子程序已使用到几十MB 存储器或更多;另一方面也为高级语言编译器、DSP 操作系统等高级工具软件的应用提供了条件。DSP 的进一步发展,必然是多处理器的应用。新型的浮点 DSP 已开始在通信口的设置和强化、资源共享等方面有所响应。

第二次课-------阅读TI文档(可以在user guide中通过索引找到) Q1:引脚分布

TMS320C5515/14/05/04/VC05/VC04 DSP General-Purpose Input/Output User's Guide 手把手---2.3 Q2:54X和55X的区别

Q3:HPI的概念及适用情况

HPI是HOST PORT INTERFACE(主机接口总线)的简称。HPI是一个与主机通信的并行接口,主要用于DSP与其他总线或CPU进行通信。信息可通过'C54x的片内存储器与主机进行数据交换。

第三次课---------外设及软件程序介绍 Q1:IIC总线及SPI总线比较 I2C VS SPI SPI是[单主设备( single-master )]通信协议(是一种高速的,全双工,同步的通信总线,以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少4根线,事实上3根也可以(单向传输时)),这意味着总线中的只有一支中心设备能发起通信。

IIC 是多主设备的总线(IIC是一种多向控制总线,也就是说多个芯片可以连接到同一总线结构下,同时每个芯片都可以作为实时数据传输的控制源),IIC没有物理的芯片选择信号线,没有仲裁逻辑电路,只使用两条信号线—— ‘serial data’ (SDA) 和 ‘serial clock’ (SCL)。

第一总线拓扑结构/信号路由/硬件资源耗费

IIC 只需两根信号线,而标准SPI至少四根信号,如果有多个从设备,信号需要更多。一些SPI变种虽然只使用三根线——SCLK, SS和双向的MISO/MOSI,但SS线还是要和从设备一对一根。另外,如果SPI要实现多主设备结构,总线系统需额外的逻辑和线路。用IIC 构建系统总线唯一的问题是有限的7位地址空间,但这个问题新标准已经解决——使用10位地址。从第一点上看,IIC是明显的大赢家。

第二数据吞吐/传输速度

如果应用中必须使用高速数据传输,那么SPI是必然的选择。因为SPI是全双工,IIC 的不是。SPI没有定义速度限制,一般的实现通常能达到甚至超过10 Mbps。IIC 最高的速度也就快速+模式(1 Mbps)和高速模式(3.4 Mbps),后面的模式还需要额外的I/O缓冲区,还并不是总是容易实现的。

Q2:多媒体卡控制器(只是简介) 作用:

多媒体卡控制器可以读写多媒体卡( MultiMediaCard,简称MMC卡)和数字存储卡( Secure Digital Memory Card,简称SD卡)上的存储器。 该控制器有如下特点:

支持MMC/SD协议和SPI协议;软件支持未来的扩展升级;MMC控制器的运行频率可以通过程序设置; MMC控制器与存储卡之间控制传输速率的时钟可以通过编程设置。

MMC控制器可以在存储卡和CPU或DMA控制器之间传输数据,也可以进行卡对卡之间的传输。它们之间的通信可以按照MMC/SD协议也可以按照SPI协议进行,在基于MMC/SD协议时使用一条双向数据线( MMC卡)或4条双向数据线( SD卡),基于SPI协议时则是用两条串行数据线,一条向卡上存储数据,一条从卡上读回数据。下面是MMC控制器信号连接图。

从图中可以看到连接的信号有时钟信号

( CLK),控制信号( CMD)和数据信号,当连接的是MMC卡时,只

使用DAT0数据线,而连接的是SD卡时,则使用DAT0~3数据线。

应用实时时钟芯片支持库函数首先需要在头文件中包含csl_rtc.h文件。。。。。。 Q6:异步串口UART 1. 异步串口发送部分

异步串口发送部分包括一个发送保持寄存器( URTHR) 和一个发送移位寄存器( URTSR) , 当异步串口工作在FIFO模式下时, 发送保持寄存器可以缓存16个字节。 发送部分由异步串口线路控制寄存器( URLCR) 控制, 发送格式如下: 1个起始位

5、

6、7或者8个数据位 1个奇偶校验位(可选)

1、1.5或者2个停止位

如果串口发送保持寄存器从内部数据总线接收到数据,当发送移位寄存器准备好时,异步串口模块将数据从送到保持寄存器发送到发送移位寄存器,发送移位寄存器通过TX引脚将串行数据发送出去。

在非FIFO模式下,当发送保持寄存器没有数据存储时,如果中断使能寄存器使能发送寄存器空中断,则产生该中断,而当一个新的字节被装入发送保持寄存器时这个中断被清除;在FIFO模式下,发送FIFO为空时产生中断,当新的字节被装入FIFO时中断被清除。 2. 异步串口接收部分

异步串口接收部分包括一个接收移位寄存器( URRSR) 和一个接收缓冲寄存器( URRBR) 。 当异步串口工作在FIFO模式下时, 接收缓冲寄存器可以缓冲16个字节。 接收部分的定时器由16倍接收时钟提供, 在异步串口控制寄存器的控制下, 接收部分可以接收如下格式数据: 1个起始位

5、

6、7或者8个数据位 1个奇偶校验位(可选) 1个停止位

当接收移位寄存器从RX引脚收到数据后,将组合好的数据送到接收缓冲寄存器或者接收FIFO,异步串口可以为每个收到的字节存储3个错误状态信息位,包括奇偶校验错 误、帧错误和接收间断。

在非FIFO模式下时,如果一个字符被放到接收数据缓冲寄存器中,并且中断使能时将产生中断,该字符被读走时中断被清除;在FIFO模式下时,如果FIFO存储的数据量达到FIFO控制寄存器( URFCR)设定的触发值时将产生中断,而当FIFO存储的数据量小于触发值时中断被清除。 3. 波特率产生器

异步串行通信需要满足各种不同通信速率的要求, 模块采用波特率产生器, 通过对输入时钟分频来适应串口的通信速率。 波特率产生器的分频数可以从1到65535任意选择, 异步串口的工作时钟BCLK应为波特率的16倍, 即每个输入输出的位都将持续16个工作时钟, 而如果串口工作在接收状态下, 将在第8个工作时钟对该位采样, 下面给出分频数的计算公式:

4.

中断申请和DMA。。。。。。

Q7:寻址方式

当硬件执行指令时,寻找指令所指定的参与运算的操作数的方法——寻址方式。

根据程序的要求采用不同的寻址方式,可以有效地缩短程序的运行时间和提高代码执行效率。

C54x芯片的寻址方式可以分为两类:

数据寻址

程序寻址

Q8:指令表示方法

Q9:算术运算指令---实现数学计算

Q10:数据传送指令

Q11:逻辑运算指令

Q12:程序控制指令

Q13:并行操作指令

Q14:重复操作指令

可以使紧随其后的一条指令或程序块重复执行,分为单指令重复和程序块重复。

Q17:探测点

探测点是一种设置在源文件某条语句上的特殊断点,主要用来与一个外部文件的读/写相关联。

当用户程序运行到探测点时,自动地从与该探测点连接的外部文件中读入数据或将计算的结果输出给外部文件。完成数据的传输后,自动恢复程序的运行。 探测点在算法开发过程中是一个有用的工具,可用来与PC主机进行数据通信。 探测点可以进行一下工作:

1从PC主机的文件中,传输输入数据至目标系统的缓冲区,作为算法开发的模拟数据;

2从目标系统的缓冲区中,传输输出数据至PC主机的文件中,以便进行数据分析;

3更新窗口,例如图形、数据等。

PS:Probe Point 和 Break Point比较-----手把手P64

Probe Point 的使用方法-----手把手P67(实验中有) Q18:数据观察方法

图形显示:graph。。。。时域/频率 手把手P62 第4课--------DSP+XXX:相关设计的架构

第5课--------DSP硬件系统设计:ADC Q1:ADC理论 采样与编码

Q3:分类

1.SAR(逐次逼近)型ADC:

逐次比较型AD由一个比较器和DA转换器通过逐次比较逻辑构成,从MSB开始,顺序地对每一位将输入电压与内置DA转换器输出进行比较,经n次比较而输出数字值。其电路规模属于中等。其优点是速度较高、功耗低,在低分辩率(12位)时价格很高。

TLC0831 (德州仪器公司(TI)推出的TLC0831/2是广泛应用的8位A/D转换器。) TLC0831可以外接高精度基准以提高转换精度,TLC0832的基准输入在片内与VCC连接。TLC0831/2的操作非常类似TLC0834/8(更多输入通道),为以后升级提供便利

2.Σ-Δ(Delta-Sigma)调制型 ADC:

Σ-Δ型AD由积分器、比较器、1位DA转换器和数字滤波器等组成。原理上近似于积分型,将输入电压转换成时间(脉冲宽度)信号,用数字滤波器处理后得到数字值。电路的数字部分基本上容易单片化,因此容易做到高分辨率。主要用于音频和测量。

3.流水线ADC结构适合于几Msps到100Msps采样速率,其复杂性随分辨率的增加只是线性(而不是指数)增加,具有高速、高精度和低功耗特性,适用于各种场合,特别是数字通讯领域,在这些领域中转换器的动态性能经常比微分非线性(DNL)和积分非线性等传统的ADC特性更重要。在大多数的应用中,流水线ADC的数据延迟都无关紧要。

PS:AD转换器分类

下面简要介绍常用的几种类型的基本原理及特点:积分型、逐次逼近型、并行比较型/串并行型、Σ-Δ调制型、电容阵列逐次比较型及压频变换型。

1)积分型(如TLC7135)

积分型AD工作原理是将输入电压转换成时间(脉冲宽度信号)或频率(脉冲频率),然后由定时器/计数器获得数字值。其优点是用简单电路就能获得高分辨率,但缺点是由于转换精度依赖于积分时间,因此转换速率极低。初期的单片AD转换器大多采用积分型,现在逐次比较型已逐步成为主流。 2)逐次比较型(如TLC0831)

逐次比较型AD由一个比较器和DA转换器通过逐次比较逻辑构成,从MSB开始,顺序地对每一位将输入电压与内置DA转换器输出进行比较,经n次比较而输出数字值。其电路规模属于中等。其优点是速度较高、功耗低,在低分辩率(12位)时价格很高。 3)并行比较型/串并行比较型(如TLC5510)

并行比较型AD采用多个比较器,仅作一次比较而实行转换,又称FLash(快速)型。由于转换速率极高,n位的转换需要2n-1个比较器,因此电路规模也极大,价格也高,只适用于视频AD转换器等速度特别高的领域。

串并行比较型AD结构上介于并行型和逐次比较型之间,最典型的是由2个n/2位的并行型AD转换器配合DA转换器组成,用两次比较实行转换,所以称为Half flash(半快速)型。还有分成三步或多步实现AD转换的叫做分级(Multistep/Subrangling)型AD,而从转换时序角度又可称为流水线(Pipelined)型AD,现代的分级型AD中还加入了对多次转换结果作数字运算而修正特性等功能。这类AD速度比逐次比较型高,电路规模比并行型小。 4)Σ-Δ(Sigma?/FONT>delta)调制型(如AD7705)

Σ-Δ型AD由积分器、比较器、1位DA转换器和数字滤波器等组成。原理上近似于积分型,将输入电压转换成时间(脉冲宽度)信号,用数字滤波器处理后得到数字值。电路的数字部分基本上容易单片化,因此容易做到高分辨率。主要用于音频和测量。

5)电容阵列逐次比较型

电容阵列逐次比较型AD在内置DA转换器中采用电容矩阵方式,也可称为电荷再分配型。一般的电阻阵列DA转换器中多数电阻的值必须一致,在单芯片上生成高精度的电阻并不容易。如果用电容阵列取代电阻阵列,可以用低廉成本制成高精度单片AD转换器。最近的逐次比较型AD转换器大多为电容阵列式的。 6)压频变换型(如AD650) 压频变换型(Voltage-Frequency Converter)是通过间接转换方式实现模数转换的。其原理是首先将输入的模拟信号转换成频率,然后用计数器将频率转换成数字量。从理论上讲这种AD的分辨率几乎可以无限增加,只要采样的时间能够满足输出频率分辨率要求的累积脉冲个数的宽度。其优点是分辩率高、功耗低、价格低,但是需要外部计数电路共同完成AD转换。

第16篇:DSP实验心得体会

篇一:dsp实验报告心得体会

tms320f2812x dsp原理及应用技术实验心得体会

1.设置环境时分为软件设置和硬件设置,根据实验的需要设置,这次实验只是

软件仿真,可以不设置硬件,但是要为日后的实验做准备,还是要学习和熟悉硬件设置的过程。

2.在设置硬件时,不是按实验书上的型号选择,而是应该按照实验设备上的型

号去添加。

3.不管是硬件还是软件的设置,都应该将之前设置好的删去,重新添加。设置好的配置中

只能有一项。 4.ccs可以工作在纯软件仿真环境中,就是由软件在pc机内存中构造一个虚拟的

dsp环境,可以调试、运行程序。但是一般无法构造dsp中的外设,所以软件仿真通常用于调试纯软件算法和进行效率分析等。

5.这次实验采用软件仿真,不需要打开电源箱的电源。

6.在软件仿真工作时,无需连接板卡和仿真器等硬件。

7.执行write_buffer一行时。如果按f10执行程序,则程序在mian主函数中运行,

如果按f11,则程序进入write_buffe函数内部的程序运行。

8.把str变量加到观察窗口中,点击变量左边的“+”,观察窗口可以展开结构变

量,就可以看到结构体变量中的每个元素了。

9.在实验时,显示图形出现问题,不能显示,后来在graph title 把input的大写

改为input,在对volume进行编译执行后,就可以看到显示的正弦波图形了。

10.在修改了实验2-1的程序后,要重新编译、连接执行程序,并且必须对.out 文件进行重新加载,因为此时.out文件已经改变了。如果不重新加载,那么修改执行程序后,其结果将不会改变。 11.再观察结果时,可将data和data1的窗口同时打开,这样可以便于比较,观察

结果。

12.通过这次实验,对tms320f2812x dsp软件仿真及调试有了初步的了解与认识,因为做

实验的时候都是按照实验指导书按部就班的,与真正的理解和掌握还是有些距离的。但是这也为我们日后运用这些知识打下了基础,我觉得实验中遇到的问题,不要急于问老师或者同学,先自己想办法分析原因,想办法解决,这样对自身的提高更多吧。通过做实验,把学习的知识利用起来,也对这门课程更加有兴趣了。

组员:叶孝璐 冯焕芬 郑玮仪 庞露露

2012年4月10号 篇二:dsp实验报告+心得体会

龙 岩 学 院

实 验 报 告

班 级 07电本(1)班 学号 2007050344 姓 名 杨宝辉 同组人 独立 实验日期 2010-5-18 室温 大气压 成 绩

基础实验

一、实验目的

二、实验设备

三、实验原理

浮点数的表达和计算是进行数字信号处理的基本知识;产生正弦信号是数字信号处理1.一台装有ccs软件的计算机; 2.dsp实验箱的tms320f2812主控板; 3.dsp硬件仿真器。 1.掌握ccs实验环境的使用; 2.掌握用c语言编写dsp程序的方法。 中经常用到的运算;c语言是现代数字信号处理表达的基础语言和通用语言。写实现程序时需要注意两点:(1)浮点数的范围及存储格式;(2)dsp的c语言与ansi c语言的区别。

四、实验步骤 1.打开ccs 并熟悉其界面;

2.在ccs环境中打开本实验的工程(example_base.pjt),编译并重建 .out 输出文件,然后通过仿真器把执行代码下载到dsp芯片中;

3. 把x0 , y0 和z0添加到watch窗口中作为观察对象(选中变量名,单击鼠标右键,在弹出菜单中选择“add watch window”命令);

4. 选择view->graph->time/frequency„ 。 设置对话框中的参数: 其中“start addre”

设为“sin_value”,“acquisition buffer size”和“display data size”都设为“100”,并且把“dsp data type”设为“32-bit floating point”,

设置好后观察信号序列的波形(sin函数,如图);

5. 单击运行;

6. 观察三个变量从初始化到运算结束整个过程中的变化;观察正弦波形从初始化到运算结束整个过程中的变化;

7. 修改输入序列的长度或初始值,重复上述过程。

五、实验心得体会

通过本次实验,加深了我对dsp的认识,使我对dsp实验的操作有了更进一步的理解。基本掌握了ccs实验环境的使用,并能够使用c语言进行简单的dsp程序设计。

从软件的安装到使用软件进行程序设计与仿真,锻炼了自己的动手能力,也遇到了不少的坎坷,例如芯片的选择,不能因为麻烦而省略该步骤,否则将会运行出错。

附录实验程序:

#include math.h #include stdio.h #define n 100 #define pi 3.14159 float sin_value[100]; float x0,y0,z0; void main(void) { int i; for(i=0;i

/* 0.100 0000 0000 0000 */ z0=x0*y0;

/* 00.01 0000 0000 0000 0000 0000 0000 0000 */ for(i=0;i

实 验 报 告

班 级 07电本(1)班 学号 2007050344姓 名 杨宝辉 同组人 独立 实验日期 2010-5-20 室温 大气压 成 绩

数码管控制实验

一、实验目的 1. 2. 3.熟悉2812的指令系统; 熟悉74hc573的使用方法。 熟悉dsp的io操作使用方法。

二、实验设备 1.一台装有ccs2000软件的计算机;

2.插上2812主控板的dsp实验箱; 3.dsp硬件仿真器。

三、实验原理

此模块由数码管和四个锁存器组成 。数码管为共阴极型的。数据由2812模块的低八位输入,锁存器的控制信号由2812模块输出,但经由cpld模块译码后再控制对应的八个

四、实验步骤

1.把2812模块小板插到大板上;

2.在ccs2000环境中打开本实验的工程编译example_7segled.prj,生成输出文件,通过仿真器把执行代码下载到dsp芯片;

3.运行程序;数码管会显示1~8的数字。

4.参考源代码自行修改程序改变显示样式。

五、实验心得体会

通过本次实验中,基本掌握了2812的指令系统的特点,并能够了解并熟悉74hc573的使用方法,进一步加深了对dsp的认识。同时,通过实验操作dsp的io操作使用方法,对于dsp的io操作可以熟悉的运用,学到更多的知识。

程序见附录:

#include include/dsp281x_device.h // dsp281x headerfile include file #include include/dsp281x_examples.h // dsp281x examples include file // prototype statements for functions found within this file. void delay_loop(void); void gpio_select(void); // global variable for this example short codetab[17]= {0x4020,0x6cc0,0x5800,0x4840,0x6440,0xc040,0xc000,0x4cc0, 0x4000,0x4040,0x4400,0xe000,0xd080,0xe800,0xd000,0xd400,0xffff}; main() { short i; // step 1.initialize system control: // pll, watchdog, enable peripheral clocks // this example function is found in the dsp281x_sysctrl.c file. initsysctrl(); // specific clock setting for this example: 篇三:dsp实验学习心得

dsp实验学习心得

论dsp发展前景

dsp 即为数字信号处理器(digital signal proceing),是在模拟信号变换成数 字信号以后进行高速实时处理的专用处理器。它的工作原理是将现实世界的模拟信号转换 成数字信号,再用数学方法处理此信号,得到相应的结果。自从数字信号处理器(digital signal proceor)问世以来,由于它具有高速、灵活、可编程、低功耗和便于接口等特 点,已在图形、图像处理,语音、语言处理,通用信号处理,测量分析,通信等领域发挥 越来越重要的作用。随着成本的降低,控制界已对此产生浓厚兴趣,已在不少场合得到成 功应用。dsp 数字信号处理器 dsp 芯片采用了数据总线和程序总线分离的哈佛结构及改 进的哈佛结构,较传统处理器的冯?诺依曼结构具有更高的指令执行速度。其处理速度比最 快的 cpu 快 10-50 倍。在当今数字化时代背景下,dsp 已成为通信、计算机、消费类电 子产品等领域的基础器件,被誉为信息社会革命的“旗手”。

最初的 dsp 器件只是被设计成用以完成复杂数字信号处理的算法。dsp 器件 紧随着数字信号理论的发展而不断发展。dsp发展最快,现在的 dsp 属于第五代产品,它与第四代相比,系统集成度更高,将 dsp 芯核及外围组件综合集成在单一芯片上。这种集成度极高的 dsp 芯片不仅在通信、计算机领域大显身手,而且逐渐渗透 到人们日常消费领域,前景十分可观。近年来,随着通信技术的飞速发展,dsp已经成为信号与信息处理领域里一门十分重要的新兴学科,它代表着当今无线系统的主流发展方向。现在,通信领域中许多产品

都与 dsp 密切联系,例如,modem、数据加密、扩频通信、可视电话等。而寻找 dsp 芯片来实现算法最开始的目标是在可以接受的时间内对算法做仿真,随后是将波形存储起 来,然后再加以处理。

在短短的十多年 时间,dsp芯片已经在信号处理、通信、雷达等许多领域得到广泛的应用。目前, dsp 芯片的价格也越来越低,性能价格比日益提高,具有巨大的应用潜力。dsp 芯片的应用主要有:(1)

信号处理--如,数字滤波、自适应滤波、快速傅里叶变换、相关运算、频谱分析、卷积等。 (2) 通信--如,调制解调器、自适应均衡、数据加密、数据压缩、回坡抵消、多路复用、传真、扩频通信、纠错编码、波形产生等。 (3) 语音--如语音编码、语音合成、语音识别、语音增强、说话人辨认、说话人确认、语音邮件、语音储存等。 (4) 图像/图形--如二维和三维图形处理、图像压缩与传输、图像增强、动画、机器人视觉等。 (5) 军事--如保密通信、雷达处理、声纳处理、导航等。

(6) 仪器仪表--如频谱分析、函数发生、锁相环、地震处理等。 (7) 自动控制--如引擎控制、深空、自动驾驶、机器人控制、磁盘控制。 (8) 医疗--如助听、超声设备、诊断工具、病人监护等。(9) 家用电器--如高保真音响、音乐合成、音调控制、玩具与游戏、数字 电话/电视等 dsp 的发展前景 dsp 的功能越来越强,应用越来越广,达到甚至超过了微控制器的功能,比 微控制器做得更好而且价格更便宜, 许多家电用第二代 dsp 来控制大功率电机就 是一个很好的例子。汽车、个人通信装置、家用电器以及数以百万计的工厂使用 dsp 系统。数码相机、ip 电话和手持电子设备的热销带来了对 dsp 芯片的巨大需 求。而手机、

pda、mp3 播放器以及手提电脑等则是设备个性化的典型代表,这 些设备的发展水平取决于 dsp 的发展。新的形势下,dsp 面临的要求是处理速度 更高,功能更多更全,功耗更低,存储器用量更少。

dsp 的技术发展将会有以下 一些走势: (1)系统级集成 dsp 是潮流。小 dsp 芯片尺寸始终是 dsp 的技术发展方向。 当前的 dsp 尺寸小、功耗低、性能高。各 dsp 厂商纷纷采用新工艺,改进 dsp 芯核,并将几个 dsp 芯核、mpu 芯核、专用处理单元、外围电路单元、存储单元 统统集成在一个芯片上,成为 dsp 系统级集成电路。 (2)追求更高的运算速度和进一步降低功耗和几何尺寸。由于电子设备的 个人化和客户化趋势,dsp 必须追求更高更快的运算速度,才能跟上电子设备的 更新步伐。同时由于 dsp 的应用范围已扩大到人们工作生活的各个领域,特别是 便携式手持产品对于低功耗和尺寸的要求很高,所以 dsp 有待于进一步降低功 耗。按照 cmos 的发展趋势,依靠新工艺改进芯片结构,dsp 运算速度的提高和 功耗尺寸的降低是完全可能的。

(3)dsp 的内核结构进一步改善。dsp 的结构主要是针对应用,并根据应用 优化 dsp 设计以极大改进产品的性能。多通道结构和单指令多重数据、超长指令 字结构、超标量结构、超流水结构、多处理、多线程及可并行扩展的超级哈佛结 构(sharc)在新的高性能处理器中将占据主导地位。( 4)dsp 嵌入式系统。dsp 嵌入式系统是 dsp 系统嵌入到应用电子系统中 的一种通用系统。这种系统既具有 dsp 器件在数据处理方面的优势,又具有应用 目标所需要的技术特征。在许多嵌入式应用领域,既需要在数据处理方面具有独 特优势的 dsp,也需要在

智能控制方面技高一筹的微处理器(mcu)。因此,将 dsp 与 mcu 融合在一起的双核平台,将成为 dsp 技术发展的一种新潮流。 dsp 的发展非常迅速,而销售价格逐年降低目前 dsp 的结构、总线、资源和 接口技术都趋于标准化,尤其接口的标准化进展更快。这给从事系统设计的工程 技术人员带来很大机遇, 采用先进的 dsp 将会使开发的产品具有更强的市场竞争 力。

近几年来,dsp芯片、应用软件和系统的发展非常迅速,每年增长速度高达40%。 其市场驱动力主要是因特网、无线通信、硬盘驱动器、可视电话和会议电视以及其它消费 类电子产品。也就是说,dsp产业的发展依赖于通信技术和通信市场。随着新的通信体 制、传输方式和多媒体智能终端的迅速发展,其算法、标准和规程都需要在实践中不断发 展、改进和优化。dsp编程的灵活性和不断增强的运算能力,同时又将使通信技术向更 高层次迈进。这对通信领域的广大科技人员是一个机遇。抓住这个机遇,我们将大有作为。

通过这几次实验,我初步的对dsp有了一定了解。虽然是在老师们的指导下完成实验要求的,但是我想我还是收获蛮多的。希望在以后的学习生活中能对dsp有更多的学习和研究。 篇四:dsp课程设计实验报告总结

dsp课程设计总结

(2013-2014学年第2学期)

题 目 : 专业班级 : 电子1103 学生姓名 : 万 蒙 学 号 : 11052304 指导教师 : 设计成绩 :

2014 年 6 月

目 录

一 设计目的--------3 二 系统分析--------3 三 硬件设计

3.1 硬件总体结构----------------------------3 3.2 dsp模块设计----------------------------4 3.3 电源模块设计---------------------------4 3.4 时钟模块设计---------------------------5 3.5 存储器模块设计-------------------------6 3.6 复位模块设计---------------------------6 3.7 jtag模块设计-------------------------7 四 软件设计

4.1 软件总体流程----------------------7 4.2 核心模块及实现代码--------8 五 课程设计总结----------------------14

一、设计目的

设计一个功能完备,能够独立运行的精简dsp硬件系统,并设计简单的dsp控制程序。

二、系统分析 1.1设计要求 硬件要求:

(1)使用tms320vc5416作为核心芯片。 (2)具有最简单的led控制功能。 (3)具有存放程序的外部flash芯片。 (4)外部输入+5v电源。 (5)绘制出系统的功能框图。

(6)使用ad(altium designer)绘制出系统的原理图和pcb版图。 软件要求:

利用实验箱的模拟信号产生单元产生不同频率的信号,或者产生两个频率的信号的叠加。在dsp中采集信号,并且对信号进行频谱分析,滤波等。通过键盘选择算法的功能,将计算的信号频率或者滤波后信号的频率在lcd上显示。

三、硬件设计 3.1 硬件总体结构

3.2 dsp总体结构

3.3 电源模块设计

3.4 时钟模块设计

3.5 存储器模块设计

3.6复位模块设计

篇五:dsp实验报告(完美版) dsp实验报告

班 级:11050641 学 号:

姓 名:

指导教师:

实验一 、二 dsp芯片的开发工具及应用实验 1.实验目的

(1)熟悉ccs集成开发环境,掌握工程的生成方法;

(2)熟悉seed-dtk dad实验环境;

(3)掌握ccs集成开发环境的调试方法。

2.实验设备

dsp实验箱,计算机,ccs软件。

3.实验内容及步骤

(1) ccs软件的安装;

(2) 了解seed-dtk5416实验环境;

(3) 打开ccs集成开发环境,进入ccs的操作环境;

(4) 新建一个工程文件

1在c:\ti\myprojects中建立文件夹 volume1(如果ccs安装在其他○

d:\ti ,则在d:\ti\myprojects中);

2将c:\ti\tutorial\target\volume1○拷贝到c:\ti\myprojects\ volume1;

3从在ccs 中的project 菜单,选择 new; ○

4在project name域中,键入volume1; ○

5在location区域中,浏览步骤1所建立的工作文件夹; ○

6在project type 域中,选择executable(.out); ○

7在target域中,选择ccs配置的目标,并单击完成。 ○

(5) 向工程中添加文件

1从project/add files to project,选择 volume.c,单击 open(或右○

击project view图标,选择add files to project );

2选择project/add files to project,在files of type对话框中,选○

择asm source files (*.a*, *.s*)。选择vectors.asm 和 load.asm, 单击open; 3选择 project/add files to project, 在files of type 对话框中选○

4选择project/add files to project, 到编辑器库文件夹○

(c:\ti\c5400\cgtools\lib),在files of type对话框中选择object and library files (*.o*, *.lib)。选择rts.lib文件,单击open。这个库提供目标dsp 运行时间支持(runtime-support);

5project view窗口,右击volume1.pjt,选择scan all dependencies,○

volume.h将出现在project view窗中的libraries文件夹;

头文件不要手动添加,自动到:当前目录(源文件所在)或预编译器的“include search path (-i)”option所指定的位置。显示头文件:project—>show dependencies。

6单击 volume1.pjt上的+号,展开工程列表。这个列表称为project ○

view。

(6) 查看源程序代码

双击project view中 volume.c文件,ccs窗口的右半窗中出现c源代码。

(7) 编译与运行程序

1选择project/rebuild all或单击(rebuild all)菜单条按钮,ccs重○

新进行编辑、汇编、连接工程里的所有文件。这个处理的有关信息在窗口低部一个小框里显示;

2默认时,.out文件编译到位于当前工程文件夹中的调试(debug),目录中○

也可以通过ccs工具条选择一个存储目录;

3选择file/load program。选中volume1.out,并按open。○

( c:\ti\myprojects\volume1\debug\ 文件夹中。)ccs将程序装载到目标dsp上,打开显示程序反汇编指令的disaembly窗口;

4选择view/mixed source/asm.,这样可以同时查看c源程序和产生的汇○

编代码;

5在混合窗口单击汇编指令(单击有效指令,而不是指令的地址或指令所○

传递的区域),单击f1,ccs可以寻找此指令的帮助。这是学习指令的很好的方法;

6选择debug/go main,从主程序开始执行; ○

7选择debug/run或单击 (run)按钮; ○

8选择debug/ halt,退出程序运行。 ○

(8) 更改程序的选择、定位语法错误

1选择project/build options; ○

preproceor,在define symbols区域键入fileio,按tab键; 3单击ok,保存新的选择设置; ○ 4选择project/rebuild all或单击 (rebuild all)按钮。只要工程选择○

更改,则必须重新编译所有的文件;

5编译信息显示,程序包含编辑错误。单击build,你可以看见语法错误信○

息;

6双击描述语法错误位置的红色文字(第68行)○。注意volume.c源程序已打开,且光标位于下面的行上: proceing(input, output); ; 7语法错误位于光标位置的上一行(丢了个分号)○,如:puts(begin proceing); ;

8注意:edit窗口标题栏中的文件名附近出现星号(*)○,指示源程序已经被修改,文件保存后,星号消失; 9选择file/save,或按ctrl+s,将更改保存到volume.c; ○

10选择project/build,或(incremental build)单击工具条,ccs重新编○

译已经修改的文件; 11选择file/load program,选中volume1.out; ○

12选择debug/go main,从主函数开始执行。由→执行可以暂停; ○

13选择debug/run或(run)单击菜单条; ○

14选择debug/halt,退出程序运行。 ○

(9) 使用断点(breakpoints)和观察窗口(watch window) 程序执行时常常需要检查变量的值。 1file/reload program; ○

2双击project view 窗中的volume.c。可以将窗口变大,看到更多的源○

代码;

3将光标放在dataio( ); ○

4单击(toggle breakpoint)工具条,或按f9。选择空白区指示断点已经设○

置(红色图标); 5window,在ccs窗口的右下角出现单个区域,同时,这○

量的值;

6选择debug/go main; ○

7或按f5; ○

8 9达式图标,键入要观察的变量名dataio; ○

10中的白色区域,保存更改。这个值将立即出现在下面的例○

11over)或按f10,跨过对dataio()的调用; ○

12(remove all breakpoints)。 ○

的watch window 的值,也可以观察一个结构的元素的值。

1 2表达式图标,键入要观察表达式名称str; ○

3的白色空间,保存更改。数值将立即出现在下面的例子○

4source code调出 volume.c中全局申明、并初始化的○

构。volume.h定义了parms的结构类型;

5ccs将结构中所有元素和元素值。双击结构中元素的○

value选择view/watch 个区域显示观察变如果不在主程序,选择debug/run,选择watch1; ○ 单击name栏中表单击观察窗口子中;

单击 (step 完成后,单击(10)使用带结构除了观察简单变量选择watch1; ○ 单击name栏中的单击观察窗口中中;

从reviewing the 类型为parms的结单击str上的+号,,编辑元素的值;

6在watch window 中value栏,更改变量的值。注意:watch window中○

数值的更改,数值也变为红色,表示已经手动修改;

7选择watch window中str变量,按delete 键。其他变量同理; ○

8选择debug/breakpoints,在breakpoints中,单击delete all,然后○

单击ok。

(11)添加探针probe point(为了文件i/o)

可以添加探针(probe point),从pc机中的文件读数据。

按照下面的步骤使用探针:

从主pc中传递输入数据,到算法所使用的目标的缓冲器中;

从目标的缓冲器中传递输出数据,到主pc中;

用数据修改窗口。

下面将学习如何使用probe point ,将pc文件中的内容,作为测试数据,传递到目标dsp中。另外,也可以使用断点修改所有打开的窗口。 1选择file/load program,选中volume1.out,单击open; ○

2双击project view中的volume.c; ○

3将光标放到主程序中dataio(); ○

4单击(toggle probe point)。选择空白区域指示探针已经设置(兰色图○

标),如果废止

选择区,此行为兰色显亮;

5从file菜单,选择file i/o。出现file i/o对话框,因此可以选择输○

入输出文件; 6在file input,单击add file; ○

7浏览volume1工程文件夹,选中sine.dat,单击open。sine.dat文件是○

正弦波的十六进制数值,出现sine.dat文件的控制窗口。再后,当运行程序时,可以在数据文件中使用此窗口启动、停止、返回、或快进; 8在file i/o对话框,更改addre 为inp_buffer,length为100,在○

wrap around中可以添加选中符号;

9单击add probe point。出现 break/probe points对话框中的 probe ○

points; 10在 probe point列表中,显亮行为:volume.c line 61 -->no ○

connection; 11区域中,单击下箭头,从列表中选中sine.dat; ○

12probe point列表改向显示这个probe point连接到○

sine.dat 13i/o对话框显示文件现在连接到probe point; ○

14file i/o对话框。 ○

以查看关于时间的信号图形。

在connect to单击 replace。文件; 单击ok。file 单击ok,关闭(12)显示图形 在这个例子中,可

第17篇:DSP实验学习心得

DSP实验学习心得

DSP即为数字信号处理器(Digital Signal Proceing),是在模拟信号变换成数字信号以后进行高速实时处理的专用处理器。它的工作原理是将现实世界的模拟信号转换成数字信号,再用数学方法处理此信号,得到相应的结果。自从数字信号处理器(Digital Signal Proceor)问世以来,由于它具有高速、灵活、可编程、低功耗和便于接口等特点,已在图形、图像处理,语音、语言处理,通用信号处理,测量分析,通信等领域发挥越来越重要的作用。随着成本的降低,控制界已对此产生浓厚兴趣,已在不少场合得到成功应用。DSP 数字信号处理器DSP 芯片采用了数据总线和程序总线分离的哈佛结构及改进的哈佛结构,较传统处理器的冯诺依曼结构具有更高的指令执行速度。其处理速度比最快的CPU快10-50倍。在当今数字化时代背景下,DSP 已成为通信、计算机、消费类电子产品等领域的基础器件,被誉为信息社会革命的“旗手”。

最初的DSP器件只是被设计成用以完成复杂数字信号处理的算法。DSP器件紧随着数字信号理论的发展而不断发展。DSP发展最快,现在的DSP属于第五代产品,它与第四代相比,系统集成度更高,将DSP 芯核及外围组件综合集成在单一芯片上。这种集成度极高的DSP 芯片不仅在通信、计算机领域大显身手,而且逐渐渗透到人们日常消费领域,前景十分可观。近年来,随着通信技术的飞速发展,DSP已经成为信号与信息处理领域里一门十分重要的新兴学科,它代表着当今无线系统的主流发展方向。现在,通信领域中许多产品都与DSP 密切联系,例如,Modem、数据加密、扩频通信、可视电话等。而寻找DSP芯片来实现算法最开始的目标是在可以接受的时间内对算法做仿真,随后是将波形存储起

来,然后再加以处理。在短短的十多年时间,DSP芯片已经在信号处理、通信、雷达等许多领域得到广泛的应用。目前, DSP 芯片的价格也越来越低,性能价格比日益提高,具有巨大的应用潜力。DSP 芯片的应用主要有:(1)信号处理--如,数字滤波、自适应滤波、快速傅里叶变换、相关运算、频谱分析、卷积等。(2)通信--如,调制解调器、自适应均衡、数据加密、数据压缩、回坡抵消、多路复用、传真、扩频通信、纠错编码、波形产生等。(3)语音--如语音编码、语音合成、语音识别、语音增强、说话人辨认、说话人确认、语音邮件、语音储存等。(4)图像/图形--如二维和三维图形处理、图像压缩与传输、图像增强、动画、机器人视觉等。(5)军事--如保密通信、雷达处理、声纳处理、导航等。(6)仪器仪表--如频谱分析、函数发生、锁相环、地震处理等。(7)自动控制--如引擎控制、深空、自动驾驶、机器人控制、磁盘控制。(8)医疗--如助听、超声设备、诊断工具、病人监护等。(9)家用电器--如高保真音响、音乐合成、音调控制、玩具与游戏、数字电话/电视等DSP 的发展前景DSP的功能越来越强,应用越来越广,达到甚至超过了微控制器的功能,比微控制器做得更好而且价格更便宜,许多家电用第二代DSP 来控制大功率电机就是一个很好的例子。汽车、个人通信装置、家用电器以及数以百万计的工厂使用DSP 系统。数码相机、IP 电话和手持电子设备的热销带来了对DSP芯片的巨大需求。而手机、PDA、MP3 播放器以及手提电脑等则是设备个性化的典型代表,这些设备的发展水平取决于DSP 的发展。新的形势下,DSP面临的要求是处理速度更高,功能更多更全,功耗更低,存储器用量更少。

这学期我们学习了DSP的理论课程,也进行了相应的实验,实际操作让我们学习的更加深入。我们的主处理芯片: TMS320VC5502PGF300;

低功耗设计,比上一代 C54XX 器件功耗低 30%左右;

处理速度更快,双乘法器结构,处理速度 600MMACS;

软件程序兼容 C54XX DSP;

片内存贮空间 32K× 16Bit( DARAM)( 64K Bytes);

最大外部寻址空间 8M× 16Bit; SDRAM: 1M× 16Bit; 2 路 8bit 板上 A/D 接口;

2 路的 TLC7528 转换, 5M/S, 8Bit;

片上 UART 接口,符合 RS232 标准;

8Mbit 扩展 FLASH,存储大量固化程序和数据;

设计有用户可以自定义的开关和测试指示灯;

3U 标准的 DSP 扩展总线,包括数据、地址、I/O、控制; 4 组标准扩展连接器,为用户进行二次开发提供条件;

具有 IEEE1149.1 相兼容的逻辑扫描电路,该电路仅用于测试和仿真; +5V 电源输入,内部+3.3V、+1.26V 电源管理;

高保真语音接口设计,双路语音采集,每路 48K/S; 4 层板设计工艺,稳定可靠;

具有自启动功能设计,可以实现脱机工作;

可以选配多种应用接口板,包括图像板,网络板等; 开发环境

开发 TMS320C55xx 应用系统一般需要以下设备和软件调试工具: 1.通用 PC 一台,安装 Windows2000 或 WindowsXP 操作系统及常用软件(如: WinRAR 等)。

2. TMS320C55xx 评估板及相关电源。如: ICETEK– VC5502-A 评估板。

3.通用 DSP 仿真器一台及相关连线。如: ICETEK-5100USB 仿真器。

4.控制对象(选用)。如: ICETEK-CTR 控制板。

5. TI 的 DSP 开发集成环境 Code Composer Studio。如: CCS3.1。

6.仿真器驱动程序。 7.实验程序及文档。

ICETEK-DSP 教学实验箱的硬件连接

1 .连接电源:打开实验箱,取出三相电源连接线(如右图),将电源线的

一端插入实验箱外部左侧箱壁上的电源插孔中。 确认实验箱面板上电源总

开关(位于实验箱底板左上角)处于“关”的位置,连接电源线的另一端至

220V 交流供电插座上,保证稳固连接。

2.使用电源连接线(如右图,插头是带孔的)连接各模块电源:确认实验

箱总电源断开。 连接 ICETEK-CTR 板上边插座到实验箱底板上+12V 电源

插座; ICETEK-CTR 板下边插座到实验箱底板上+5V 电源插座;如使用

PP(并口 )型仿真器,则连接仿真器上插座到实验箱底板上+5V 电源插座;

连接 DSP 评估板模块电源插座到实验箱底板上+5V 电源插座。注意各插

头要插到底,防止虚接或接触不良。

3.连接 DSP 评估板信号线:当需要连接信号源输出到 A/D 输入插座时,

使用信号连接线(如右图)分别连接相应插座。

4. 接通电源: 检查实验箱上 220V 电源插座(箱体左侧)中保险管是否完好, 在连接电源线以后,

检查各模块供电连线是否正确连接,打开实验箱上的电源总开关(位于实验箱底板左上角),使 开关位于“开”的位置,电源开关右侧的指示灯亮。 构造 DSP 开发软件环境

1.安装 CCS 软件(此文档假定用户将 CCS 安装在默认目录 C:\\CCStudio_v3.1 中,同时也建议

用户按照默认安装目录安装) ⑵将实验箱附带的教学光盘插入计算机光盘驱动器。 ⑶打开教学光盘的“ CCS3.1”目录。 ⑷双击其中的“ Setup.exe”,进入安装程序。 ⑸选择“ Code Composer Studio”

按照安装提示进行安装,并重新启动计算机。 ⑹安装完毕,桌面上出现两个新的图标 2.安装 DSP 通用仿真器驱动

需要安装两部分: (1)仿真器的 Windows 驱动程序(并口无需, usb 口要安装); (2)根据仿真的 DSP 芯片不同,设置仿真器在 CCS 环境中的对应驱动程序。

⑴双击光盘中的“开发系统驱动\\USB”目录下的 usbdrv54x.exe 文件,然后再打开的页

面中输入 ccs 的安装路径,例如 C:\\CCStudio_v3.1 ⑵此时驱动已经被拷贝到 C:\\CCStudio_v3.1\\icetek 目录下。 ⑶然后把 usb 电缆连接到计算机的 usb 接口和 usb 仿真器上, 计算机将提示找到新硬件,

选择否,然后点下一步。 3.安装实验程序

双击光盘中的实验安装文件,自动解压缩后安装到 C:\\ICETEK 目录下。

例如:实验安装文件为“ Setup5502A.exe” 4.安装初始化仿真器程序

将光盘中“工具”子目录下的“ xdsresetUSB”目录拷贝到硬盘上的任意路径下,建

议和实验程序目录放在一起,便一管理。然后用单击鼠标右键选择“ xdsresetUSB”目

录下 “ xdsrstusb”批处理文件,选择“发送到” ->“桌面快捷方式”。注: 如果您的 CCS 系统未安装在默认的 C:\\CCStudio_v3.1 目录,请用鼠标右键单击桌面上“ xdsrstusb”图标,选择“属性”,将“快捷方式”项和“起始位置”中的路径改成您所安装的路径。

启动 CCS 启动 Emulator 方式:

⑴ 首先将实验箱电源关闭。连接实验箱的外接电源线。 ⑵ 检查 ICETEK-5100USB 仿真器的黑色 JTAG 插头是否正确连接到 ICETEK– VC5502-A板的 J1 插头上。注:仿真器的插头中有一个孔加入了封针,与 J1 插头上的缺针位置应重合,保证不会插错。

⑶ 检查是否已经用电源连接线连接了 ICETEK– VC5509-A 板上的POW1插座和实验箱底板上+5V 电源插座。 ⑷ 检查其他连线是否符合实验要求。检查实验箱上三个拨动开关位置是否符合实验要求。

⑸ 打开实验箱上电源开关(位于实验箱底板左上角 ),注意开关边上红色指示灯点亮。

ICETEK– VC5502-A 板上指示灯 D5 和 D6 点亮。如果打开了 ICETEK-CTR 的电源开关,ICETEK-CTR 板上指示灯 L

1、L2 和 L3 点亮。如果打开了信号源电源开关,相应开关边的指示灯点亮。

⑹ 用实验箱附带的 USB 信号线连接 ICETEK-5100USB 仿真器和 PC 机后面的 USB 插座,注意 ICETEK-5100USB 仿真器上指示灯 Power 和 Run 灯点亮。

⑺ 双击桌面上仿真器初始化图标:

(8) 如果进入 CCS 提示错误,先选“ Abort”,然后用“初始化 ICETEK-5100 USB2.0 仿真器”初始化仿真器,如提示出错,可多做几次。如仍然出错,拔掉仿真器上 USB 接头(白色方形),按一下 ICETEK– VC5509-A 板上 S1 复位按钮, 连接 USB 接头, 再做“初始化 ICETEK-5100 USB2.0仿真器”。

(9)如果遇到反复不能连接或复位仿真器、进入 CCS 报错, 请打开 Windows 的“任务管理器”,在“进程”卡片上的“映像名称”栏中查找是否有“cc_app.exe”,将它结束再试。

退出 CCS 指示灯实验

了解 ICETEK-VC5502-AE 板在 TMS320VC5502DSP 外部扩展存储空间上的扩展。了解 ICETEK-VC5502-AE 板上指示灯扩展原理。学习在 C 语言中使用扩展的控制寄存器的方法。

TMS320VC5502DSP 的 EMIF 接口:

存储器扩展接口 (EMIF)是 DSP 扩展片外资源的主要接口,它提供了一组控制信号和地

址、数据线,可以扩展各类存储器和寄存器映射的外设。 - ICETEK-VC5502-AE 评估板在 EMIF 接口上除了扩展了片外 SDRAM 外,还扩展了指

示灯、DIP 开关和 D/A 设备。具体扩展地址如下: 0x400009, 0x40000b: D/A 转换控制寄存器 0x400007: 板上 DIP 开关控制寄存器 0x400005: 板上指示灯控制寄存器

- 与 ICETEK-VC5502-AE 评估板连接的 ICETEK-CTR 显示控制模块也使用扩展空间控制

主要设备:

608001h: 读-键盘扫描值,写-液晶控制寄存器 608002h: 液晶辅助控制寄存器

608003h 、608004h: 液晶显示数据寄存器 608005h: 发光二极管显示阵列控制寄存器 拨码开关控制实验

了解 ICETEK-VC5502-AE 板在 TMS320VC5502DSP 外部扩展存储空间上的扩展。了解 ICETEK-VC5502-AE 板上拨码开关扩展原理。熟悉在 C 语言中使用扩展的控制寄存器的方法。

TMS320VC5502DSP 的 EMIF 接口:

存储器扩展接口 (EMIF)是 DSP 扩展片外资源的主要接口, 它提供了一组控制信号和地址、

数据线,可以扩展各类存储器和寄存器映射的外设。

- ICETEK-VC5502-AE 评估板在 EMIF 接口上除了扩展了片外 SDRAM 外,还扩展了指

示灯、DIP 开关和 D/A 设备。具体扩展地址如下: 0x400009, 0x40000b: D/A 转换控制寄存器 0x400007: 板上 DIP 开关控制寄存器 0x400005: 板上指示灯控制寄存器

- 与 ICETEK-VC5502-AE 评估板连接的 ICETEK-CTR 显示控制模块也使用扩展空间控制

主要设备:

608001h: 读-键盘扫描值,写-液晶控制寄存器 608002h: 液晶辅助控制寄存器

608003h 、608004h: 液晶显示数据寄存器 608005h: 发光二极管显示阵列控制寄存器 DSP 的定时器

通过实验熟悉 VC5502A 的定时器;掌握 VC5502A 定时器的控制方法;掌握 VC5502A 的中断结构和对中断的处理流程;学会 C 语言中断程序设计,以及运用中断程序控制程序流程。 通用定时器介绍及其:

TMS320VC5502A 内部有两个 64 位通用定时器( GP) , 控制方法详见spru618.pdf。中断响应过程(详见 spru371.pdf):

外设事件要引起 CPU 中断,必须保证: IER 中相应使能位被使能, IFR 相应中断也被使能。在软件中,当设置好相应中断标志后,开中断,进入等待中断发生的状态;外设(如定时器)中断发生时,首先跳转到相应中断级高的服务程序中(如:定时器 1 会引起 TINT中断),程序在进行服务操作之后,应将本外设的中断标志位清除以便能继续中断,然后返回。中断程序设计:

- 程序中应包含中断向量表, VC5502A 默认向量表从程序区 0xffff00 地址开始存放,根据IPVD 和 IPVH 的值确定向量表的实际地址。

- 注意观察程序中 INTR_init()函数的定义部分,其中 IPVD 和 IPVH 的值都为 0x0001;同时

观察配置文件 ICETEK-VC5502-AE.cmd 中的 VECT 段描述中 o=0x0100。

- 向量表中每项为 8 个字, 存放一个跳转指令, 跳转指令中的地址为相应服务程序入口地址。

第一个向量表的首项为复位向量,即 CPU 复位操作完成后自动进入执行的程序入口。

- 服务程序在服务操作完成后,清除相应中断标志,返回,完成一次中断服务。 单路,多路数模转换( DA)

了解数模转换的基本操作。了解 ICETEK-VC5502-AE 板扩展数模转换方式。掌握数模转换程序设计方法。

1.数模转换操作:数模转换芯片使用 TLC7528C。 TLC7528C 是双路、8 位数字-模拟转换器,内部具有各自单独的数据锁存器,其特性包括两 DAC 非常精密的一致性,数据通过公共 8 位输入口转送至两DAC 数据锁存器的任意一个。控制输入端 DACA/DACB 决定哪一个 DAC 被装载。器件的装载周期与随机存取存储器的写周期类似,能方便地与大多数通用微处理器总线或端口相接口。 器件的工作电压 5V 至 15V,功耗小于 15mW(典型值)。 2 或 4 象限的乘法功能使该器件成为许多微处理器的增益设置和信号控制的良好选择。它可工作于电压模式,与电流输出相比较,更适合于电压输出。 TLC7528C 的工作温度范围从 0℃至 70℃。

2. TLC7528C 与 TMS320VC5502A 的连接:由于 TMS320VC5502A DSP 没有数模转换输出设备,采用外扩数模转换芯片的方法。在 ICETEK-VC5502-AE 板上选用的是 TLC7528C。 TLC7528C 的转换寄存器被映射到了 DSP的 CE2 空间,两路 DA 转换通道的地址分别是: 0x400009, 0x40000b。在 TLC7528C 的输出端,为了增加输出功率,经过一级运放再输出到板上插座上。

实验学习让我们更好的学习到了理论知识,不只是停留在理论上,实践才是真理。

第18篇:DSP芯片教学

DSP芯片的特点

1采用哈佛结构 2采用多总线结构 3采用流水线结构 4配有专用的硬件乘法-累加器 5具有特殊的寻址方式和指令 6支持并行指令操作 7硬件配置强,具有较强的接口功能 8支持多处理器结构。

数字信号处理的特点

抗干扰、可靠性强、便于大规模集成精度高灵活性强

可以实现模拟系统很难达到的指标或特性

可以实现多维信号处理

缺点:增加了系统的复杂性

应用的频率范围受到限制

系统的功率消耗比较大 CPU包含5个功能单元

指令缓冲单元

程序流单元

地址-数据流单元

数据运算单元

存储器接口单元

指令流水线分为两个阶段。

1取指阶段从存储器取来32位指令包,将其存入指令缓冲队列

2执行阶段:对指令进行译码,并完成数据访问和计算

预取指1 预取指2 取指 预解码

解码 寻址 访问1 访问2 读 执行 写 写+

当D单元ALU做加法运算 产生进位 置位CARRY 不进位 CARRY清0

当D单元ALU做减法运算 产生借位 CARRY清0 不借位 CARRY置位

当CPU读取程序代码时,使用24位的地址访问相关的字节;

而CPU读/写I/O空间时,将16位地址前补0来扩展成24位地址

CPU读程序指令每次固定读取32位长的指令,且固定以最低的2个字节为00h的地址为首地址读取访问数据堆栈时,CPU将SPH和SP连接成XSP。XSP包含了一个最后推入数据堆栈的23位地址,其中SPH中是7位的主 数据页,SP指向该页上的一个字。CPU在每推入一个值入堆栈前,减小SP值;从堆栈弹出一个值以后,增加SP值。在堆栈操作中,SPH的值不变。

访问系统堆栈时,CPU将SPH和SSP连接成XSSP。XSSP包含了一个最后推入系统堆栈的值的地址。CPU在每推入一个值进堆栈前,减小SSP值;从堆栈弹出一个值以后,增加SSP值。在堆栈操作中,SPH的值不变。

快返回与慢返回过程的区别在于:CPU怎样保存和恢复2个内部存储器(即程序计数器PC和一个循环现场寄存器)的值。慢返回,返回地址和循环现场保存在堆栈中快返回过程中,返回地址和循环现场保存在寄存器里

DSP处理中断过程

1接收中断请求

2响应中断请求

3准备进入中断服务子程序。CPU要执行的主要任务有: 完成当前指令的执行,并冲掉流水线上还未解码的指令。 自动将某些必要的寄存器的值保存到数据堆栈和系统堆栈。

从用户事先设置好的向量地址获取中断向量,该中断向量指向中断服务子程序 4执行中断服务子程序

所有的可屏蔽中断都是硬件中断。

不可屏蔽中断

1硬件中断 RESET 2硬件中断 NMI

3软件中断

硬件复位后,DSP处于一个已知状态,即所有当前指令全部终止,指令流水清空,CPU寄存器复位。然后CPU执行中断服务子程序,读复位中断向量时,CPU用32位复位向量的第

29、28位来确定堆栈配置模式。

使用const关键字可以定义大常数表并将它们分配到系统ROM中。 ioport关键字来支持I/O寻址模式

ioport类型限定词只能用于全局或静态变量。局部变量不能用ioport限制,除非变量是个指针 增加了interrupt关键字,来指定某个函数为中断函数。

Onchip关键字声明一个特殊指针,在链接时这些数据必须被链接到DSP片上存储器,否则会导致总线错误。 volatile在任何情况下,优化器会通过分析数据流来避免存储器访问。如果程序依靠存储器访问,则必须使用volatile关键字来指明这些访问。 系统初始化

1变量的自动初始化2.全局构建器(Global Constructors)3.初始化表(Initialization Tables)4.运行时间变量初始化5.装载时间变量初始化 小数定标的概念

设定一个16位数的小数点处于该数中的哪一位 可以表示不同大小和不同精度的小数 Q表示法

不同的Q所表示的数不仅范围不同,而且精度也不相同

Q越大,数值范围越小,但精度越高Q越小,数值范围越大,但精度就越低 溢出处理机制

1保护位

2溢出标志位

3饱和方式位SATD和SATA

第19篇:DSP课程设计教学大纲

DSP课程设计教学大纲 课程名称:DSP课程设计 英文名称:Design of DSP course 学 时:2周 学 分:2 适用专业:电子信息工程、通信工程专业本科生

课程类别:必修 课程性质:集中实践环节 先修课程:数字信号处理、DSP原理与应用

教 材:《DSP系统设计与实现》,电子工业出版社,雷勇,2004年

一、课程性质与任务

DSP课程设计是数字信号处理和DSP原理与应用课程的后续实践环节。通过本课程设计,帮助学生进一步领会和深化课堂上学到的有关数字信号处理的基本概念、基本原理以及基本的数字信号处理操作,进一步理解DSP芯片的硬件实现机理及其内部结构特点,掌握DSP系统的开发流程和基本编程方法,实践工程的调试方法和仿真方法。通过DSP课程设计,加强学生的实际动手能力、分析问题与解决问题能力, 培养学生创新意识,为毕业后从事DSP系统设计方面的工作打下坚实的实践基础。

二、课程教学的基本要求:

作为电子信息工程、通信工程专业本科生的必修实践环节,DSP课程设计要求学生有较扎实的理论基础。进入课程设计前要认真复习数字信号处理和DSP原理与应用课程中的相关部分。课程设计采用课堂讲述、自学、分组实践相结合的方式,通过分析典型的例子,使学生熟悉并掌握DSP的开发流程和基本的编程方法。课程设计要求2—3人组成课设小组,在指定范围内选定题目,每组选一题,题目应侧重一个DSP芯片的具体应用方面。题目选定后,在教师的指导下,学生理解设计原理,分析重要电路单元,计算必要的参数并在此基础上编写程序,最后,在课程设计结束时独立写出理论分析完善、文理通顺、字迹工整的课程设计报告并上交软件程序。教师可根据作品的难易程度、参数指标、编程水平等进行评分。

三、课程内容及教学要求:

学生可从下列题目中任选一个作为DSP课程设计题目。

(一)C54x串口通信及A/D、D/A接口

教学要求:本题目要求学生了解AD50芯片的工作原理,理解C54x串口的工作过程,重点掌握多通道缓冲串口(McBSP)的使用,并在教师的指导下编写程序,实现C54x与AD50之间的数据传输。

重点:1.McBSP的初始化

2.C54x与AD50的硬件接口电路

3.通过McBSP实现DSP芯片与AD50之间的数据交换 难点:程序的编写与调试

(二)设计FIR数字滤波器

教学要求:复习FIR数字滤波器的设计方法,根据题目给出的技术指标,选择合适的窗函数及阶数,进一步得到系数表,实现满足一定技术指标的低通数字滤波器。

重点:1.FIR数字滤波器的设计原理 2.编程实现数字滤波器 难点:窗函数的选择与阶数的确定

(三)设计IIR数字滤波器

教学要求:复习IIR数字滤波器的设计原理,以巴特沃斯模拟滤波器为基础,通过双线性变换法设计IIR数字滤波器,课题要求学生根据给出的技术指标确定巴特沃斯滤波器阶数,求出3dB截止频率,进一步得到数字滤波器极点和零点,并在教师指导下编写程序,完成数字滤波功能。

重点:1.IIR滤波器的设计原理 2.计算滤波器相关参数 3.编程实现IIR滤波器

难点:对设计原理的理解,程序的设计与调试

(四)快速傅立叶变换的DSP实现

教学要求:复习FFT原理,深刻理解C54x辅助寄存器的使用及位倒序寻址等技巧,在教师指导下编程实现数字信号的快速傅立叶变换。

重点:1.快速傅立叶变换原理 2.C54x的位倒序寻址方式 难点:多级蝶形运算的实现

(五)正弦波信号发生器

教学要求:本题目要求学生复习正弦函数和余弦函数的泰勒级数展开式,掌握C54x系列DSP芯片的编程方法,在教师的指导下用C54x芯片产生频率、相位、幅值可变的正弦波。

重点:1.产生正弦波的算法 2.汇编语言程序的具体实现 难点:正弦波的具体编程实现

四、考核方式

1.课程设计报告占50% 2.设计程序的实际工作情况、难易程度和技术指标等,占总成绩的50%

五、课程的主要参考书

1、《DSP原理及应用》,电子工业出版社,邹彦,第1版,2006;

2、《DSP集成开发与应用实例》,电子工业出版社,张雄伟,第1版,2002;

制定人: 何静

审定:

批准:

2006年12月

第20篇:正弦信号DSP

基于DSP的正弦信号发生器的设计

1、绪论 1.1 课题背景

数字信号处理(Digital Signal Proceing,简称DSP)是一门涉及许多学科而又广泛应用于许多领域的新兴学科。20世纪60年代以来,随着计算机和信息技术的飞速发展,数字信号处理技术应运而生并得到迅速的发展。数字信号处理是一种通过使用数学技巧执行转换或提取信息,来处理现实信号的方法,这些信号由数字序列表示。在过去的二十多年时间里,信号处理已经在通信等领域得到了极为广泛的应用。

长期以来,信号处理技术—直用于转换或产生模拟或数字信号。其中应用的最频繁的领域就是信号的滤波。此外,从数字通信、语音、音频和生物医学信号处理到检测仪器仪表和机器人技术等许多领域中,都广泛地应用了数字信号处理技术。数字信号处理己经发展成为一项成熟的技术,并且在许多应用领域逐步代替了传统的模拟信号处理系统。而本文中基于DSP技术设计的正弦波信号发生器已被广泛地应用于通信、仪器仪表和工业控制等领域的信号处理系统中。 1.2 课题内容

利用基于CCS开发环境中的C54x汇编语言来实现正弦信号发生装置。

2、设计原理

一般情况,产生正弦波的方法有两种:查表法和泰勒级数展开法。查表法是使用比较普遍的方法,优点是处理速度快,调频调相容易,精度高,但需要的存储器容量很大。泰勒级数展开法需要的存储单元少,具有稳定性好,算法简单,易于编程等优点,而且展开的级数越多,失真度就越小。

本文采用了泰勒级数展开法。一个角度为θ的正弦和余弦函数,可以展开成泰勒级数,取其前5项进行近似得:

x3x5x7x9sin(x)x3!5!7!9!x2x2x2x2 x(1(1(1(1))))23456789x2x4x6x8cos(x)12!4!6!8!x2x2x2x2 1(1(1(1)))2345678式中:x为θ的弧度值,x2f/fs(fs是采样频率;f是所要发生的信号频率)

3、设计方案

本设计采用TMS320C54X系列的DSP作为正弦信号发生器的核心控制芯片。

通过计算一个角度的正弦值和余弦值程序可实现正弦波,其步骤如下:

开 始初始化设置调用sin和cos程序计算0~45°的值Sin2α=2sinα*cosα求0~90°的sin值(间隔为1°)1.利用sinx和cosx子程序,计算0—45°(间 隔为0.5°)的正弦和余弦值

2.利用sin(2x)=2sin(x)cos(x)公式,计算0—90°的正弦值(间隔为1°) 3.通过复制,获得0—359°的正弦值 4.将0—359°的正弦值重复从PA口输出,遍可得到正弦波

整个系统相应的软件流程图如右图所示。

图1 程序流程图

结 束正弦波重复向PA口输出重复得到0~359°正弦值

4、程序设计

4.1 产生正弦波程序清单sin.asm .title \"sin.asm\" //为汇编文件取名为“sin.asm” .mmregs //定义存储器映像寄存器 .def _c_int00 .ref sinx,d_xs,d_sinx,cosx,d_xc,d_cosx //定义标号 sin_x: .usect \"sin_x\",360 //为\"sin_x\"保留360个存储空间 STACK: .usect \"STACK\",10 //为堆栈保留10个存储空间 k_theta .set 286 //theta=pi/360(0.5deg) PA0 .set 0 _c_int00 .text //定义文本程序代码段 STM #STACK+10,SP //设置堆栈指针

STM k_theta,AR0 //AR0-->K_theta(increment) STM 0,AR1 //(AR1)=X(rad) STM #sin_x,AR6 //AR6→sin(x) STM #90,BRC //form sin0(deg.)—sin90(deg) RPTB loop1-1 //重复执行块语句(下条语句开始至 loop1-1)91次 LDM AR1,A LD #d_xs,DP STL A,@d_xs //(A)低16位→d_xs STL A,@d_xc //(A) CALL sinx // CALL cosx // LD #d_sinx,DP //DP LD @d_sinx,16,A //A=sin(x) MPYA @d_cosx //B= sin(x)*cos(x) STH B,1,*AR6+ //AR6 MAR *AR1+0 //loop1: STM #sin_x+89,AR7 //sin91(deg.) STM #88,BRC RPTB loop2-1 // LD *AR7-,A //((AR7)) STL A,*AR6+ //(A) loop2: STM #179,BRC //sin180(deg.) (BRC)=179, STM #sin_x,AR7 //AR7 RPTB loop3-1 LD *AR7+,A //((AR7)) NEG A // STL A,*AR6+ //Aloop3: STM #sin_x,AR6 //AR6 STM #1,AR0 //AR STM #360,bk //BKloop4: PORTW *AR6+0%,PA0 //PA0=*AR6+0%, B loop4 sinx: .def d_xs,d_sinx // .data //低16位→d_xc 调用sinx程序 调用cosx程序 ←d_sinx →2*sin(x)*cos(x) 修改辅助寄存器AR1

—sin179(deg.) 重复执行下条指令至loop2-1处90次 →A,然后AR7减去1 低16位→AR6

—sin359(deg.) 重复执行180次 指向sin_x首地址 →A,然后AR7加1 累加器变负 低16位→AR6 指向sin_x ←01 ←360

向PA0输出数据 定义标号d_xs,d_sinx 定义数据代码段 table_s .word 01c7h //c1=1/(8*9) .word 030bh //c1=1/(6*7) .word 0666h //c1=1/(4*5) .word 1556h //c1=1/(2*3) d_coef_s .usect \"coef_s\",4 //为\"coef_s\"保留4个存储空间 d_xs .usect \"sin_vars\",1 //为d_xs中sin_vars保留1个存

储空间

d_squr_xs .usect \"sin_vars\",1 //d_temp_s .usect \"sin_vars\",1 // d_sinx .usect \"sin_vars\",1 //c_l_s .usect \"sin_vars\",1 // .text // SSBX FRCT // STM #d_coef_s,AR5 //AR5 RPT #3 // MVPD #table_s,*AR5+ //table_s STM #d_coef_s,AR3 //AR3 STM #d_xs,AR2 //AR2 STM #c_l_s,AR4 //AR4 ST #7FFFh,c_l_s //7FFFh SQUR *AR2+,A //AR2 ST A,*AR2 // ||LD *AR4,B // MASR *AR2+,*AR3+,B,A // MPYA A // STH A,*AR2 // MASR *AR2-,*AR3+,B,A // MPYA *AR2+ //AR2 ST B,*AR2 // ||LD *AR4,B //为d_squr_xs中sin_vars保留1个

存储空间

为d_temp_s中sin_vars保留1个 存储空间

为d_sinx中sin_vars保留1个存储

空间

为d_xs中sin_vars保留1个存储 空间

定义代码开始段

设置FRCT=1以解决冗余符号位 指向d_coef_s首地址 重复下条指令4次

中的数复制到AR5指向 的单元

指向d_coef_s首地址 指向d_xs首地址 指向c_l_s首地址 →c_l_s

指向累加器A中的数值求其平方 (A)左移16位→AR2 (AR4)左移16位→B

从累加器A中减去(AR2)*(AR3) 操作数与累加器A中高位相乘 (A)高16位→AR2

从累加器A中减去(AR2)*(AR3) 指向的数与累加器A的高16位相乘 (B)左移16位→AR2 (AR4)左移16位→B MASR *AR2-,*AR3+,B,A //从累加器A中减去(AR2)*(AR3) MPYA *AR2+ //与累加器A中高16位相乘 ST B,*AR2 //(B)左移16位→AR2 ||LD *AR4,B //(AR4)左移16位→B MASR *AR2-,*AR3+,B,A //从累加器A中减去(AR2)*(AR3) MPYA d_xs //d_xs指向的操作数与累加器A中高16位相乘 STH B,d_sinx //(B)高16位→d_sinx RET //cosx: .def d_xc,d_cosx //d_coef_c .usect \"coef_c\",4 // .data //table_c .word 0249h //c1=1/(7*8) .word 0444h //c1=1/(6*5) .word 0aabh //c1=1/(3*4) .word 4000h //c1=1/2 d_xc .usect \"cos_vars\",1 //d_squr_xc .usect \"cos_vars\",1 // d_temp_c .usect \"cos_vars\",1 //d_cosx .usect \"cos_vars\",1 //c_l_c .usect \"cos_vars\",1 // .text // SSBX FRCT //FRCT=1 STM #d_coef_c,AR5 //AR5 RPT #3 // MVPD #table_c,*AR5+ // STM #d_coef_c,AR3 //AR3 STM #d_xc,AR2 //AR2 STM #c_l_c,AR4 //AR4 ST #7FFFh,c_l_c //7FFFh SQUR *AR2+,A //返回 定义标号d_xc,d_cosx 为coef_c保留4个存储空间 定义数据代码段 为d_xc中cos_vars保存1个存储单元 为d_squr_xc中cos_vars保存1个 存储单元

为d_temp_c中cos_vars保存1个存储

单元

为d_cosx中cos_vars保存1个存储单

为c_l_c中cos_vars保存1个存储单

定义文本代码段

以清除冗余符号位 指向d_coef_c首地址 重复下条指令4次

把table_c中的数复制到中AR5 指向d_coef_c首地址 指向d_xc首地址 指向c_l_c首地址 →c_l_c

求x的平方存放在累加器A中 ST A,*AR2 //(A)左移16位→AR2 ||LD *AR4,B //(AR4)左移16位→B MASR *AR2+,*AR3+,B,A //A=1-x^2/56,T=x^2 MPYA A //A=T*A=x^2(1-x^2/56) STH A,*AR2 //(d_temp)= x^2(1-x^2/56) MASR *AR2-,*AR3+,B,A //A=1-x^2/30(1-x^2/56) T= x^2(1-x^2/56) MPYA *AR2+ //B=x^2(1-x^2/30(1-x^2/56)) ST B,*AR2 //(d_temp)= x^2(1-x^2/30(1-x^2/56)) ||LD *AR4,B //B=1 MASR *AR2-,*AR3+,B,A //A= 1-x^2/12(1-x^2/30(1-x^2/56)) SFTA A,-1,A NEG A MPYA *AR2+ //B=1-x^2/2(1-x^2/12(1-x^2/30(1-x^2/56))) MAR *AR2+ RETD ADD *AR4,16,B //B=1-x^2/2(1-x^2/12(1-x^2/30(1-x^2/56))) STH B,*AR2 //cos(theta) RET .end 4.2 正弦波程序链接命令文件sin.cmd .cmd文件描述输入文件和输出文件,说明系统中有哪些可用存储器、程序段、堆栈及复位向量和中断向量等安排在什么地方。其中MEMORY段就是用来规定目标存储器的模型,通过这条指令,可以定义系统中所包含的各种形式的存储器,以及它们占据的地址范围;SECTIONS段说明如何将输入段组合成输出段以及在可执行文件中定义输出段、规定输出段在存储器中的位置等。 MEMORY { PAGE 0: EPROM: org = 0E000h, len = 1000h VECS: org = 0FF80h, len = 0080h PAGE 1: SPRAM: org = 0060h, len = 0020h DARAM1: org = 0080h, len = 0010h DARAM2: org = 0090h, len = 0010h DARAM3: org = 0200h, len = 0200h } SECTIONS { .text :>EPROM PAGE 0 //文本代码段其实地址为0E000h,长度为 1000h .data :>EPROM PAGE 0 //数据代码段其实地址为0D000h STACK :>SPRAM PAGE 1 //堆栈起始地址为0060h,长度为0020h sin_vars :>DARAM1 PAGE 1 //标号为sin_vars段的起始地址为0080

长度为0010h coef_s :>DARAM1 PAGE 1 //标号为coef_s段的起始地址为0070h 长度为0010h cos_vars :>DARAM2 PAGE 1 //标号为cos_vars段的起始地址为0090h 长度为0010h coef_c :>DARAM2 PAGE 1 //标号为coef_c段的起始地址为0080h 长度为0020h sin_x : align(512) {} >DARAM3 PAGE 1 .vectors :>VECS PAGE 0 }

5、仿真与调试

5.1 CCS工程项目的调试

利用 CCS 集成开发环境,用户可以在一个开发环境下完成工程定义、程序 编辑、编译链接、调试和数据分析等工作环节。 ⑴ 创建工程(project)文件

选择 Project→New,在“Project”文本框中键入将要创建的工程项目名,本例工程项目名为“sin” ⑵ 向工程中添加文件

选择 Project→Add Files to Project,将 sine.asm文件自动添加到 Project→Source 中。 用同样的方法 将 sine.cmd 文件添加到对应的目录中。 ⑶ 构建工程,

工程所需文件编辑完成后,可以对该工程进行编译链接,产生可执行文件, 为调试做准备。

选择 Project→Build,系统提示没有出错信息后,系统自动生成一个可执行文件,sine.out 文件。 ⑷ 载入可执行文件 选择 File→Load Program 载入编译链接好的可执行文件sine.out ⑸ 运行程序

选择 Debug→Run运行,可以通过查看内存表等方法,看到程序运行的结果。 5.2 仿真结果

选择 View→Graph→Time/Frequence

得到的正弦波形如下图所示:

输出结果显示,在CCS图形观察窗口得到了频率稳定,信号干扰小,波形失真度较小的正弦信号。

6、心得体会

通过这次的课程设计使我进一步加深了对于DSP这门课程的学习以及对于平时所学内容的实际应用。在设计中发现问题和同学互相讨论研究,并在编程过程中进一步提高自身的创作、创新水平,扎实基础,扩展所学。在输入程序时发现编程确实是要求很认真细心的,如果稍有差错就会导致整个程序的错误,也由此体现了DSP这门课程的严谨性。相信在以后的学习中一定会更好的应用所学内容的。

dsp调研报告
《dsp调研报告.doc》
将本文的Word文档下载到电脑,方便编辑。
推荐度:
点击下载文档
相关专题
点击下载本文文档