范文网 论文资料 dsp期末考试实验报告(大全)

dsp期末考试实验报告(大全)

dsp期末考试实验报告一份优质的报告,需要以总结性的语录、合理的格式,进行工作与学习内容的记录。想必你也正在为如何写好报告而发愁吧?以下是小编精心整理的《dsp期末考试实验报告》,仅供参考,希望能够帮助到大家。第一篇:dsp期末考试实验报告。

dsp期末考试实验报告

一份优质的报告,需要以总结性的语录、合理的格式,进行工作与学习内容的记录。想必你也正在为如何写好报告而发愁吧?以下是小编精心整理的《dsp期末考试实验报告》,仅供参考,希望能够帮助到大家。

第一篇:dsp期末考试实验报告

2013级DSP实验期末考试题

1、LED灯结合外部中断实验

 以一次正反向LED灯亮显示为一个周期,实现正向1,3,2,4灯依次亮,反向3,1,4,2依次亮,如此重复进行  在运行中的任何时候均可用外部中断停止

 要求在LED灯的程序上进行修改,即此工程名字为LED.pjt,或者自行创建工程

2、通过拨码开关控制流水灯的速度

 流水灯显示顺序依次为1,2灯,2,3灯,3,4灯,1,4灯,1,2灯,2,3灯......  用拨码开关分别控制流水灯,以正常为基准,可以实现加速、减速、暂停/继续  例如:拨码状态0001实现加速,0002实现暂停  暂停的时候状态要保持,继续的时候从当前状态开始

 要求在拨码开关的程序上进行修改,即此工程名字为DIP.pjt,或者自行创建工程

3、语音采集与放送结合指示灯实验

 使其中一个声道有数据读写时,指示灯1,2亮

 另一个声道有数据读写时,4灯亮  要求声音播放正常

 要求在语音采集与放送的程序上修改,即工程的名字为audio.pjt,或者自行创建工程

4、语音采集与放送结合ADC实验

 利用信号发生器加入白噪声  右通道是原音,左通道是加噪后的声音,右通道和左通道的声音不同

 要求在语音采集与放送的程序上修改,即工程的名字为audio.pjt,或者自行创建工程

5、DA多路转换结合拨码开关控制实验

 利用通道DAC1或DAC2输出正弦波、余弦波、方波、三角波等,自己设计复杂的图形也可(至少实现4种波形)

 例如:拨码开关为0001时输出正弦波,0010时输出波形为方波,波形输出由自己控制,拨码开关状态也由自己控制

 要求在拨码开关的程序上修改,即工程的名字为DIP.pjt,或者自行创建工程

6、定时器结合DAC实验

 用定时器触发DA模块完成正弦波、余弦波、方波、三角波等波形的循环显示,自己设计复杂的图形也可

 定时时间尽量长才能看见完整的波形

 注意定时器、向量表、cmd文件及寄存器配置  波形都用数学函数实现(至少实现4种波形)

 要求在DA转换的程序上修改,即工程的名字为DA.pjt,或者自行创建工程

7、结合外部中断、定时器以及LED灯实验

 利用外部中断控制实现指示灯的不同显示效果,定时器实现指示灯的亮灭长度  至少完成两种不同的指示灯显示功能

 主要考核两个中断的结合,注意向量表和CMD文件及中断的初始化的配置

 要求在定时器中断的程序上修改,即工程的名字为Timer.pjt,或者自行创建工程

8、自建C工程及混合编程实验

 包括自建工程、自建源文件、添加源文件、自动加载、C与汇编的混合编程、观察效率、

防止.ASM文件被替换等知识点

 每个知识点均有分值

 脱稿限时完成

 考试时现场完成以上操作

9、直方图均衡化增强

 在DSP中自行设计两幅80*80的相对复杂的图像(与实验中两幅图像不同)  将其进行直方图统计

 进行直方图均衡化增强

 使用View中Graph工具显示出原图、增强后图、相应直方图  对整个过程进行分析

 要求自己自建工程,工程名字不可和源代码工程名字相同

 脱稿限时完成

10、边缘检测

 在DSP中自行设计两幅80*80的相对复杂的图像(与实验中两幅图像不同)  实现基于Laplace算子的边缘检测

 使用View中Graph工具显示出Laplace算子的边缘检测结果  对整个过程进行分析

 要求自己自建工程,工程名字不可和源代码工程名字相同

 脱稿限时完成

11、外部中断、定时器、LED灯结合

 利用外部中断控制LED灯闪烁速度,实现每按一次按键,LED灯闪烁速度依次变慢。

至少实现两种情况

 定时器周期默认设定为最大值,不需修改

 要求在外部中断的程序上修改,即工程的名字为XINT.pjt,或者自行创建工程

12、AD转换和外部中断实验

 利用外部中断来启动AD转换,显示出波形

 要求在AD转换的程序上修改,即工程的名字为AD.pjt,或者自行创建工程

13、语音采集、外部中断、定时中断、LED灯结合

 能实现语音信号的采集,用外部中断来控制语音的快进,暂停,倒退,正常播放等  左声道持续送原音,右声道送待控制的音频

 同时用指示灯表示相应的操作,比如指示灯1亮代表播放,指示灯2亮代表暂停等,定

时器实现指示灯的亮灭长度

 注意要存储一段音频数据及存储数据的大小,右声道才能听出快进,暂停,倒退,正常

播放的效果(按一下执行下一个功能)

 要求在AD转换的程序上修改,即工程的名字为AD.pjt,或者自行创建工程

14、用定时器触发播放已保存好的语音信号

 先将通过DSP采集的语音信号进行存储

 左声道持续播放原音,右声道通过定时器中断重复播放存储的语音信号  进入定时中断时打印:“播放”

 要求在定时器中断的程序上修改,即工程的名字为Timer.pjt,或者自行创建工程

自行创建的工程需以学号为工程名。 除第8题以外,其它题目可堂下自行准备好程序,考试时抽取题目之后,将代码考到计算机中,演示结果并回答问题。 考试过程中,调试程序及演示结果时,不允许看ppt以及其它资料,但可看源代码。

第二篇:DSP实验报告

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

实验目的:

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

以演示实验一为例:

1. 使用配送的并口电缆线连接好计算机并口与实验箱并口,打开实验箱电源; 2.启动CCS,点击主菜单“Project->Open”在目录“C5000QuickStartsinewave”下打开工程文件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 Address,将其改为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 开始的 .bss 区。

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 页指针 ssbx 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 Address”改为buf;“Acquisition Buffer Size”改为“Display Data Size”改为128,“DSP DataType”为“32-bit floating point”

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

第三篇: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——期末复习总结

Dsp原理及应用

1.简述DSP芯片的主要特点。 答:

(1)采用哈佛结构。Dsp芯片普遍采用数据总线和程序总线分离的哈佛结构或者改进的哈佛结构,比传统处理器的冯诺依曼结构有更快的指令执行速度。

(2)采用多总线结构。可同时进行取指令和多个数据存取操作,并由辅助寄存器自动增减地址进行寻址,使CPU在一个机器周期内可多次对程序空间和数据空间进行访问,大大地提高了dsp的运行速度。

(3)采用流水线技术。每条指令可通过片内多功能单元完成取指、译码、取操作数和执行等多个步骤,实现多条指令的并行执行。

(4)配有专用的硬件乘法-累加器。 在一个指令周期内可完成一次乘法和一次加法。 (5)具有特殊的dsp指令。如:c54x中的FIRS和LMS指令,专门用于完成系数对称的FIR滤波器和LMS算法。

(6)硬件配置强。具有串行口、定时器、主机借口、DMA控制器、软件可编程等待状态发生器等片内外设,还配有中断处理器、PLL、片内存储器、测试接口等单元电路,可以方便地构成一个嵌入式自封闭控制的处理系统。 (7)省电管理和低功耗。 (8)运算精度高。

2.TI公司的DSP产品目前有哪三大主流系列?各自的应用领域是什么? 答:

(1) TMS320C2000系列,称为DSP控制器,集成了flash存储器、高速A/D转换器以及可靠的CAN模块及数字马达控制的外围模块,适用于三相电动机、变频器等高速实时工控产品等需要数字化的控制领域。

(2) TMS320C5000系列,这是16位定点DSP。主要用于通信领域,如IP电话机和IP电话网关、数字式助听器、便携式声音/数据/视频产品、调制解调器、手机和移动电话基站、语音服务器、数字无线电、小型办公室和家庭办公室的语音和数据系统。

(3) TMS320C6000系列,采用新的超长指令字结构设计芯片。其中2000年以后推出的C64x,在时钟频率为1.1GHz时,可达到8800MIPS以上,即每秒执行90亿条指令。其主要应用领域为:1.数字通信:完成FFT、信道和噪声估计、信道纠错、干扰估计和检测等;2.图像处理:完成图像压缩、图像传输、模式及光学特性识别、加密/解密、图像增强等。

3.简述TMS320C54x的DARAM与其它存储器有什么区别?

答:DARAM由一些分块组成。每个DARAM块在单周期内能被访问2次。 4.请详细描述冯·诺依曼结构和哈佛结构,并比较它们的不同。 答:

(1)冯诺依曼结构,采用单存储空间,即程序指令和数据共用一个存储空间,使用单一的地址和数据总线,取指令和取操作数都是通过一条总线分时进行。当进行高速运算时不但不能同时进行取指令和取操作数,而且还会造成数据传输通道的瓶颈现象,工作速度较慢。 (2)哈佛结构采用双存储空间,程序存储器和数据存储器分开,有各自独立的程序总线和数据总线,可独立编址和独立访问,可对程序和数据进行独立传输,使取指令操作、指令执行操作、数据吞吐并行完成,大大提高了数据处理能力和指令的执行速度,非常适合于实时的数字信号处理。

5、TMS320C54x 系统,有哪几种寻址方式?每种寻址方式写一条指令。 答:

(1)立即寻址:LD

#80H,A

;立即数指令;

(2)绝对寻址:

MVKD 2000H, *AR5

;数据存储器数据数据存储器

;2000H为数据存储器地址

(3)累加器寻址:READA 2000H

;程序存储器数据数据存储器

;累加器A中存放的是程序存储器地址

;2000H是数据存储器地址 (4)直接寻址:ADD 20H, B

;

操作数地址=DP左移7位+20H , CPL=0 操作数地址=SP

+20H , CPL=1 (5)间接寻址:LD *AR2+, A

;

(6)存储器映像寄存器寻址:LDM 39H, A

;数据存储器数据累加器A

;SPSD0累加器A (7)堆栈寻址:PSHM ST0 6. 请描述FIRS指令的功能。 答:

FIRS Xmem,Ymem,pmad

;有限冲激响应(FIR)滤波器指令

;pmadPAR ;如果 RC>0 ;B+AH x (PAR)B ;((Xmem) +(Ymem))<<16 A ;PAR+1 PAR ;RC-1 RC FIRS指令实现一个对称的有限冲激响应(FIR)滤波器。首先Xmem和Ymem相加后的结果左移16位放入累加器A中。然后累加器A的高端(32~16位)和由pmad寻址得到的Pmem相乘,乘法结果与累加器B相加并存放在累加器B中。在下一个循环中,pmad加1.一旦循环流水线启动,指令成为单周期指令。

7. FFT蝶形运算对输入序列倒序采用何种寻址方式?AR0中应存放什么值? 答:

(1)间接寻址中的位倒序寻址方式。FFT运算主要实现采样数据从时域到频域的转换,要求采样点输入是倒序时,输出是顺序;若输入是顺序,则输出是倒序,采用位倒序寻址方式正好符合FFT算法的要求。

(2)AR0存放的整数值为FFT点数的一半。 8. 简述主机接口(HPI)的通讯过程。 答:

TMS320C54X的主机接口(HPI)是一个8位并行接口,通过8根外部数据线HD(0~7)实现DSP与其他总线或CPU进行通信。当TMS320C54X与主机传送数据时,HPI能自动地将外部接口连续传来的8位数组成16位数,并传送至TMS320C54X。当主机使用HPI寄存器执行数据传输时,HPI控制逻辑自动执行对TMS320C54X内部的双寻址RAM的访问,以完成数据处理。 9. 进行块重复操作要用到哪几个寄存器?块重复可否嵌套? 答:

RPT:循环执行一条指令

RPTB:循环执行一段指令,即块循环指令 (1)进行块重复操作的循环次数由块循环计数器(BRC)确定,需要利用两个寄存器:块重复起始地址寄存器(RSA)、块重复结束地址寄存器(REA)。 (2)由于使用了不同的寄存器,因此可以实现循环嵌套。

10. TMS320C54x的CPU主要由哪几个部分构成?它们的功能是什么? 答:

(1)40位算术逻辑运算单元ALU:可完成宽范围的算术、逻辑运算;

(2)2个40位的累加器A和B:可以作为ALU或MAC的目标寄存器存放运算结果,也可以作为ALU或MAC的一个输入;

(3)支持—16~31位移位范围的桶形移位寄存器:用于累加器或数据区操作数的定标,将输入数据进行0~31位的左移和0~16位的右移;

(4)乘法-累加单元MAC:可在一个流水线周期内完成1次乘法运算和1次加法运算; (5)比较。选择和存储单元CSSU:用于完成Viterbi算法中的加法/比较/选择(ACS)操作;

(6)指数编码器EXP:用于支持指数运算指令的专用硬件,可以在单周期内执行EXP指令,求累加器中指数的指数值;

(7)CPU状态和控制寄存器:包括ST0、ST1和PMST,这些寄存器都是存储器映像寄存器,可以很方便对它们进行数据操作:1.将它们快速地存放到数据存储器;2.由数据存储器对它们进行加载;3.用子程序或中断服务程序保存和恢复处理器的状态。

11. 已知中断向量TINT=13H,中断向量地址指针IPTR=111H,求中断向量地址是多少?

12. DSP的仿真器的作用是什么? 答:

(1) 下载程序;

(2) 样机资源可视化,应用程序调试;

(3) 控制样机运行方式:单步执行、执行到断点或者全速执行。

第五篇:dsp实验指导书尉

电气工程学院

《DSP技术及应用》

实验指导书

尉学军编写

适用专业:电子信息工程

贵州大学 二OO 八年八月

前言

《数字信号处理》实验是理论教学的深化和补充,具有较强的实践性,是一门重要的专业必修课,可作为通信类、电子类专业学生的选修课。所开设的实验以具体实例为实验内容,让学生深刻理解DSP芯片的特点,培养学生应用DSP设计解决实际问题的能力。通过上机与实验,理解实验原理及实验方案,掌握正确的操作规程,掌握5410USB EVM实验箱的正确使用方法。掌握CCS软件的使用,熟练掌握DSP的汇编语言的编写和程序调试,掌握DSP的中断技术和定时器的初始化方法以及应用,以及利用串口进行数据采集。并要求学生利用北京闻亭5410USB EVM实验箱进行数字式信号发生器和滤波器的设计。

作者在此设计了11个实验,其中4个验证性实验,6个设计性实验,1个综合性实验。在开设实验过程中,可以根据大纲选作部分实验。

目录

1、实验一:CCS的安装与simulate的使用·····················································3

2、实验二:汇编语言基本算术运算································································7

3、实验三:程序的控制和转移······································································10

4、实验四:数字式正弦信号发生器·······························································14

5、实验五:FIR数字滤波器 ·········································································21

6、实验六:IIR数字滤波器 ·········································································27

7、实验七: 图象的伽玛增强······························································ ··········35

8、实验八: 快速傅立叶变换(FFT)的实现······················································42

9、实验九: 控制XF引脚周期性变化·····························································49

10、实验十: 多通道缓冲串口的使用·····························································54

11、实验十一: DTMF算法设计和DSP实现·····················································62

12、 实验报告基本内容要求········································································66

13、实验报告格式··························································································68

14、参考文献·································································································70

实验一: CCS的安装与simulate的使用

实验学时:2 实验类型:验证 实验要求:必修

一、实验目的

学会CCS的安装和设置, 熟悉程序的开发流程, 初步掌握Simulator的使用方法.

二、实验内容

安装CCS软件,并利用CCSsetup进行设置 对一个简单程序进行调试

三、实验原理、方法和手段

利用软件对指令进行仿真分析。

四、实验组织运行要求

根据本实验的特点、要求和具体条件,采用教师简单讲解,学生自己动手操作的形式。

五、实验条件

计算机一台

六、实验步骤

1、CCSset 的设置

CCS设置程序是用于建立CCS集成开发环境与目标板或simulator之间通信的接口.CCS是一个开放的环境,通过设置不同的驱动完成对不同环境的支持.本教案以CCS2.0为例说明CCS下的驱动设置方法.

假设安装路径为: d: i下,对CCS的 设置如下:

(1) 双击桌面上的”setup ccs 2 (c5000)”,开始运行程序,回出现如图1-1所示的界面; 3

图1-1 CCS的首界面 (2) 单击”CLOSE”按纽关闭对话框. (3) 在“Available Board/Simulator Types”栏选择 “54xx simulator”在“Board Propertis”对话框中点击按纽“next”,一直到“Finish”如图1-2所示。

图1-2 选择仿真板界面

此处对要仿真的方式进行选择,是进行软件仿真(Simulator)还是硬件仿真(Eimulator),并可以选择要仿真的板子的型号,在此我们选择软件仿真.用的是C54xx Simulator. (4) 在菜单File中选择”Start Code Composer Studio”,启动CCS 5000.

设置完毕

2、一个简单DSP程序的调试

(1) 创建工程

运行CCS 5000(54XX Simulaor/CPU)

在Project菜单中选择New项,将弹出Project Creation的窗口

图 1-3 创建工程界面

将新建的工程存入E盘,CCS将建立一个名为*.pjt的工程,此文件保存了工程的设置信息及工程中的文件引用情况.

(2)将文件添加到工程

从Files->new菜单中选择Source File,输入源程序.这里请大家输入以下的源程序.将程序存为*.asm的程序 .title "wx1.asm" .mmregs STACK .usect "STACK",10H .bss a,4 .bss x,4 .bss y,1 .def start .data table: .word 1,2,3,4 .word 8,6,4,2 .text start: STM #0,SWWSR STM #STACK+10H,SP STM #a,AR1 RPT #7 MVPD table,*AR1+ LD #1,DP CALL SUM end: B end SUM: STM #a,AR3 STM #x,AR4 RPTZ A,#3 MAC *AR3+,*AR4+,A STL A,@y 5

RET .end 从Project菜单中选取 Add Files to Project,将刚才编写的程序添加到本工程. 双击的Source右边的”+”,可以观察到刚才所添加的源文件. (3) 生成和运行程序

执行菜单Project->Rebuild All,对文件进行编译,汇编,链接,Output窗口将显示编译,汇编,链接的信息,错误提示等.最后生成*.out文件.编译通过时会出现两个警告.

图1-4 Output窗口

执行菜单Project->Load Program,将刚才所生成的*.out文件加载到DSP中,CCS将会自动打开一个反汇编窗口,显示加载程序的反汇编指令.

(4)观察程序结果:

分别点击菜单Viex->Memory和Registers可以观察程序执行后存储器的变化,程序执行的结果以及寄存器值的变化情况

七、思考题

1. 按照实验要求写出实验报告;将程序显示的结果粘贴到实验报告里面.

2. 程序调试过程中,出现什么错误,什么原因造成的,怎样改正的?

3. 熟悉CCS其他菜单的功能,如何设置断点进行程序调试?

八、实验报告

在实验分析过程中,要对寄存器的变化以及存贮器的分配有仔细的分析,实验报告要将程序结果,存储器和寄存器的结果抓下来。

九、其它说明

1. 学生实验时,应严格准守实验室规则、安全制度和学生实验守则;

2. 认真学习实验操作技能,严格按指导书和实验指导教师的指导操作有关规仪器设备,不要做与本实验无关的事情;

3. 做好实验预习、实验记录,并按要求按时完成实验报告。

实验二:汇编语言基本算术运算

实验学时:2 实验类型:验证 实验要求:必修

一、实验目的

进一步熟悉CCS进行程序编译,调试的步骤. 掌握进行算术运算的常用指令,以及伪指令的作用. 掌握汇编语言进行整数运算,小数运算以及双操作数运算.浮点运算的方法.注意双操作数运算所允许使用的辅助寄存器.

二、实验内容

加减法和乘法运算 小数运算

三、实验原理、方法和手段

利用软件对指令进行仿真分析。

四、实验组织运行要求

根据本实验的特点、要求和具体条件,采用教师简单讲解,学生自己动手操作的形式。

五、实验条件

计算机一台

六、实验步骤

1、计算 z=x+y-w

.tiltle “example.asm” .mmregs STACK .usect “stack”,10H

.bss x,1 .bss y,1 .bss w,1 .bss z,1 .def start .data table: .word 10,26,23 .text Start: STM #0,SWWSR STM #STACK+10H,SP

7 STM #x,AR1 RPT #2 MVPD table,*AR1+ CALL SUMB end: B end SUMB: LD @x,A ADD @y,A SUB @w,A LD #1,DP STL A,@z RET .end

2、乘加运算

.tiltle “example.asm” .mmregs STACK .usect “stack”,10H

.bss a,4 .bss x,4 .bss y,1 .def start .data table .word 1,2,3,4 .word 8,6,4,2

.text start: STM #0,SWWSR STM #STACK+10H,SP STM #x,AR1 RPT #7 MVPD table,*AR1+ CALL SUM end: B end SUM: STM #a,AR3 STM #x,AR4 RPTZ A,#3 MAC *AR3+,*AR4+,A STL A,@Y RET .end

3、 小数运算

.tiltle “example.asm” .mmregs STACK .usect “stack”,10H .bss a,4 .bss x,4

.bss y,1 .def start .data table .word 1*32768/10 .word 2*32768/10 .word -3*32768/10 .word 4*32768/10 .word 8*32768/10 .word 6*32768/10 .word -4*32768/10 .word -2*32768/10 start: SSBX FRCT STM #a,AR1 RPT #7 MVPD table,*AR1+ STM #a,AR3 STM #x,AR4 RPTZ A,#3 MAC *AR3+,*AR4+,A STL A,@Y end: B end .end 观察程序结果: 分别点击菜单Viex->Memory和Registers可以观察程序执行后存储器的变化,程序执行的结果以及寄存器值的变化情况.

七、思考题

1. 按照实验要求写出实验报告;将程序显示的结果粘贴到实验报告里面. 2. 程序调试过程中,出现什么错误,什么原因造成的,怎样改正的? 3. 在小数运算的过程中,小数大于1,比如a2=1.2,程序如何修改.

八、实验报告

要求学生按本实验指导书后附的实验报告格式和要求的内容写出实验报告,实验报告应包括实验预习、实验记录和实验报告等三部分内容。

九、其它说明

1. 学生实验时,应严格准守实验室规则、安全制度和学生实验守则;

2. 认真学习实验操作技能,严格按指导书和实验指导教师的指导操作有关规仪器设备,不要做与本实验无关的事情;

3. 做好实验预习、实验记录,并按要求按时完成实验报告。

实验三:程序的控制和转移

实验学时:2 实验类型:验证 实验要求:必修

一、实验目的

了解堆栈的使用方法,掌握指令的重复操作,程序的跳转,调用和返回. 掌握条件算符组合时候应注意的三点; 掌握*.cmd文件,特别是伪指令MEMORY,SECTION的作用.

二、实验内容

程序的转移和调用,重复执行,堆栈的使用

三、实验原理、方法和手段

利用软件对指令进行仿真分析。

四、实验组织运行要求

根据本实验的特点、要求和具体条件,采用集中讲解和学生动手的形式。

五、实验条件

安装CCS 的电脑一台

六、实验步骤

程序调试步骤参考实验一

1、 程序的转移和调用 .title “example.asm” .mmregs STACK .usect “stack”,10H; .bss x,5 .bss y,1 .def start .data table: .word 10,30,4,5,6 .text start: STM #0,SWWSR STM #STACK+10H,SP ;SP= STM #x,AR1; AR1= RPT #4 MVPD table,*AR1+ ;AR1=

LD #0,A CALL SUM end: B end SUM: STM #x, AR3 STM #4,AR2 loop: ADD *AR3+,A BANZ loop,*AR2- STL A,@y; AR2= , AR3= ,A= RET .end 将以上文件存为*.ASM格式. 以下是*.CMD文件: *.obj ;注意:此处文件名要与上面的*.ASM文件的名字要一致. -o *.out -m *.map -e start MEMORY { PAGE 0: EPROM: org=0E000H len=0100H VECS : org=0FF80H len=0004H PAGE 1: SPRAM: org=0060H len=0020H DARAM: org=0080H len=0100H } SECTIONS { .text :>EPROM PAGE 0 .data :>EMROM PAGE 0

.bss :>SPRAM PAGE 1 STACK :>DARAM PAGE 1 .vectors :>VECS PAGE 0 } 2) 堆栈段的初始化

.title “wxample3.asm” .mmregs size .set 100 stack .usect “STK”,10H .bss length,10H .def start .text start: STM #0,SWWSR STM #stack+size,SP 11

LD #-8531,A STM #length,AR1 MVMM SP,AR7 loop: STL A,*AR7- BANZ loop,*AR1- .end CMD文件 example.obj -o example.out -m example.map -e start MEMORY { PAGE 0: EPROM :ORG=0E000H,LEN=0100h VECS: ORG=0FF80H,LEN=0004H PAGE 1: SARAM: ORG=0060H,LEN=0010H; DARAM: ORG=0070H,LEN=0100H } SECTIONS { .text :>EPROM PAGE 0 .data :>EPROM PAGE 0 .bss :>SARAM PAGE 1 .STACK :>DARAM PAGE 1 }

3、 重复操作

下面程序实现对数组进行初始化以后再对每个元素加1 .title “example.asm”

.mmregs stack .usect “STACK”,10H .bss x,5 .def start .text start: STM #x,AR1 LD #2,A ;将每个数组初始化为2 RPT #4 STL A,*AR1+ LD #1,16,A STM #4,BRC STM #X,AR4 PRTB next-1 12

ADD *AR4,16,B,A STH A,*AR4+ next: LD #0,B end: B end .end

七、思考题

1. 按照实验要求写出实验报告;将程序显示的结果粘贴到实验报告里面. 2. 程序调试过程中,出现什么错误,什么原因造成的,怎样改正的? 3. 简要写出*.cmd文件,特别是伪指令MEMORY,SECTION的作用 4. 试将程序1的运行结果填写的相应的横线上。

八、实验报告

要求学生按本实验指导书后附的实验报告格式和要求的内容写出实验报告,实验报告应包括实验预习、实验记录和实验报告等三部分内容。

九、其它说明

1. 学生实验时,应严格准守实验室规则、安全制度和学生实验守则;

2. 认真学习实验操作技能,严格按指导书和实验指导教师的指导操作有关规仪器设备,不要做与本实验无关的事情;

3. 做好实验预习、实验记录,并按要求按时完成实验报告。

实验四:数字式正弦信号发生器

实验学时:2 实验类型:设计型 实验要求:必修

一、实验目的

掌握正弦信号发生器的算法; 学会用断点进行程序调试.

二、实验内容

利用DSP设计一个正弦信号发生器

三、实验原理、方法和手段

在高等数学中,正弦函数和余弦函数可以展开为泰勒级数,其表达式为: x3x5x7 sinx=x-+- +„ 3!5!7!x2x4x6 cosx=1-+- +„ 2!4!6! 如果要计算一个角度的正弦和余弦,可以取泰勒级数的前5项进行近似计算. 上两个式子可以化为: x2x2x2x2 sinx=x(1- (1-(1-(1-)))) 2*34*56*78*9x2x2x2x2 cosx=1-(1-(1- (1- ))) 23*45*67*8 然后利用这两个式子,计算出0

o___

45(间隔为0.5)的正弦和余弦值.

o___

oo 再利用sin2x=2sinxcos公式,计算0 最后通过复制取反,获得0

o___

o

90的正弦值.

o

359的正弦值.

四、实验组织运行要求

根据本实验的特点、要求和具体条件,采用集中讲授和学生动手的形式。

五、实验条件

安装CCS软件的电脑一台

六、实验步骤

程序调试步骤参考实验一

1、源程序

.mmregs .def start .ref d_xs,d_sinx,d_xc,d_cosx,sinx,cosx sin_x: .usect "sin_x",360 STACK .usect "STACK",10H PA0 .set 0 k_theta .set 286 start: .text STM #STACK+10H,SP STM k_theta,AR0 STM 0,AR1 STM #sin_x,AR6 STM #90,BRC RPTB loop1-1 LDM AR1,A LD #d_xs,DP STL A,@d_xc STL A,@d_xs CALL sinx CALL cosx LD #d_sinx,DP LD @d_sinx,16,A MPYA @d_cosx STH B,1,*AR6+ MAR *AR1+0 ;计算0—45度的正弦值 loop1: STM #sin_x+89,AR7 STM #88,BRC RPTB loop2-1 LD *AR7-,A STL A,*AR6+ ;计算45-89度的正弦值 loop2: STM #179,BRC STM #sin_x,AR7 RPTB loop3-1 LD *AR7+,A NEG A STL A,*AR6+ ;计算90-179度的正弦值 loop3: STM #sin_x,AR6 STM #1,AR0 STM #360,BK ;计算180-359度的正弦值

loop4: PORTW *AR6+0%,PA0 B loop4

sinx: sinx子程序 .def d_xs,d_sinx .data table_s .word 01C7H .word 030BH .word 0666H .word 1556H d_coef_s .usect "coef_s",4 d_xs .usect "sin_vars",1 d_square_xs .usect "sin_vars",1 d_temp_s .usect "sin_vars",1 d_sinx .usect "sin_vars",1 d_l_s .usect "sin_vars",1 .text SSBX FRCT STM d_coef_s,AR5 RPT #3 MVPD #table_s,*AR5+ STM #d_coef_s,AR3 STM #d_xs,AR2 STM #d_l_s,AR4 STM #7FFFH,d_l_s SQUR *AR2+,A ST A,*AR2 ||LD *AR4,B MASR *AR2+,*AR3+,B,A MPYA A STH A,*AR2 MASR *AR2-,*AR3+,B,A MPYA *AR2+ ST B,*AR2 || LD *AR4,B MASR *AR2-,*AR3+,B,A MPYA *AR2+ ST B,*AR2 ||LD *AR4,B MASR *AR2-,*AR3+,B,A MPYA d_xs STH B,d_sinx RET

cosx: ; cosx子程序 .def d_xc,d_cosx .data table_c .word 0249H .word 0444H .word 0aabH .word 4000H d_coef_c .usect "coef_c",4 d_xc .usect "cos_vars",1 d_square_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 STM d_coef_c,AR5 RPT #3 MVPD #table_c,*AR5+ STM #d_coef_c,AR3 STM #d_xc,AR2 STM #c_l_c,AR4 STM #7FFFH,c_l_c SQUR *AR2+,A ST A,*AR2 ||LD *AR4,B MASR *AR2+,*AR3+,B,A MPYA A STH A,*AR2 MASR *AR2-,*AR3+,B,A MPYA *AR2+ ST B,*AR2 || LD *AR4,B MASR *AR2-,*AR3+,B,A SFTA A,-1,A NEG A MPYA *AR2+ MAR *AR2+ RETD ADD *AR4,16,B STH B,*AR2 RET .end *.CMD 文件 sinx.obj 17

-o sin.out -m sin.map -e start 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 .data :>EPROM PAGE 0 STACK :>SPRAM PAGE 1 sin_vars :>DARAM1 PAGE 1 coef_s :>DARAM1 PAGE 1 cos_vars :>DARAM2 PAGE 1 coef_c :>DARAM2 PAGE 1 sin_x : align (512){}>DARAM3 PAGE 1 }

2、程序调试过程中,可以采用利用断点进行调试,方法如下: 1)利用断点对话框进行设置. 2)使用工具条上的按纽进行设置, 利用工具条上的按纽,可以快速设置断点: 在反汇编窗口中,将光标移到需要设置断点的语句行上,然后单击工具条上的设置断点按纽(有一个手),则在该语句行上设置一个断点. 3) 在反汇编窗口直接进行设置. 在反汇编窗口,用鼠标直接双击要设置的断点的指令行,即可完成断点的设置. 执行的时候可以选择动画运行. 在执行前先设置好断点,然后,没执行一次操作命令,就会从当前位置执行到下一个断点处.连续执行操作命令就可以实现动画操作. 使用调试菜单”DEBUG”中的”Animate”命令,或者单击调试工具条上的动画执行按 18

纽,用户就可以进行动画操作.

3、观察波形

观察存储器和寄存器的内容在实验一中进行了介绍.在此不做赘述了.现在介绍CCS图形工具的使用方法. CCS开发环境提供了多种强大的图形显示工具,可以将内存中的数据以各种图形的方式显示给用户,帮助拥护直观的了解数据的意义. CCS提供了四大类九种图形显示方式: 1) 时频图(Time_frequency) 单曲线图(Single_time) 对数据不做处理,直接绘制显示缓冲区数据的幅度_时间曲线

双曲线图(Double_time) 在一个图象中显示两条信号的幅度_时间曲线 FFT幅度(FFT Magnitude) 对显示缓冲器数据进行FFT变换,显示幅度_频率图

复数FFT(Complex FFT) 对复数数据的实部和虚部分别进行FFT变换,在一幅图中显示两条幅度_频率曲线. FFT幅度和相位(FFT Magnitude and Phase) 在一幅图中显示幅度_频率曲线和相位_频率曲线. FFT多桢显示(略) 2) 星座图(Constellation) 显示信号的相位分布 3) 眼图(Eye Diagram) 显示信号码间的干扰情况 4) 图像显示(Image) 显示YUV和RGB图像

图形显示步骤: 在”View”菜单中,选择”Graph”选项,弹出命令子菜单, 在该菜单中选择”Time/Frequency”,

在弹出的对话框中,将”Display Type”选择为”Single_time”,

”Start Addtress”定为”0200H”, 将”PAGE”定为”data”

“Display Data Size”定为”0200H”

点击”OK”来观察图象. 19

图4-1 产生的正弦波形

七、思考题

按照实验要求写出实验报告;将程序显示的结果粘贴到实验报告里面. 如何设置断点进行程序调试? 要产生周期性的三角波,或者锯齿波,程序如何实现?

八、实验报告

要求学生按本实验指导书后附的实验报告格式和要求的内容写出实验报告,实验报告应包括实验预习、实验记录和实验报告等三部分内容。

九、其它说明

1. 学生实验时,应严格准守实验室规则、安全制度和学生实验守则;

2. 认真学习实验操作技能,严格按指导书和实验指导教师的指导操作有关规仪器设备,不要做与本实验无关的事情;

3. 做好实验预习、实验记录,并按要求按时完成实验报告。

实验五:FIR数字滤波器

实验学时:2 实验类型:设计

实验要求:选修

一、实验目的

了解FIR的MATLAB设计方法

掌握FIR的DSP实现方法,熟练掌握循环寻址指令.

二、实验内容

设计一个31阶的低通FIR滤波器,其截止频率为0.6。

三、实验原理、方法和手段

FIR滤波器的差分方程: N1 (5-1) i0 其中bi为滤波器的系数,N为滤波器的阶次,x(n)为输入,y(n)为输出. FIR滤波器的MATLAB设计

MATLAB中的工具箱(Toolbox)包含了许多实用程序。它提供了多种FIR滤波器设计方法。

下面以标准频率响应设计法fir1和任意频率响应设计法fir2为例说明其使用方法

1、fir1函数

使用fir1函数可设计标准的低通、高通、带通和带阻滤波器。

语法: b=fir1(n,Wn) b=fir1(n,Wn,„ftype‟) b=fir1(n,Wn,Window) b=fir1(n,Wn,„ftype‟,Window) 其中n为 滤波器的阶次,Wn为截止频率,ftype为滤波器的类型,window为采用的窗函数的类型,默认为H amming类型. 1) 采用汉明窗设计低通FIR滤波器

使用b=fir1(n,Wn)可得到低通滤波。0 Wn 1, Wn=1相当于0.5fs。

格式:

b=fir1(n,Wn) (2) 采用汉明窗设计高通FIR滤波器

21 y(n)bix(ni)

在b=fir1(n,Wn,„ftype‟)中,当ftype=high时,可设计高通滤波器。

格式:

b=fir1(n,Wn,„high‟) (3) 采用汉明窗设计带通FIR滤波器

在b=fir1(n,Wn)中,当Wn=[ W1 W2 ]时,可得到带通滤波器,其通带为W1

格式:

b=fir1(n,[ W1 W2 ]) (4) 采用汉明窗设计带阻FIR滤波器

在b=fir1(n,Wn,„ftype‟)中,当ftype= stop,Wn=[ W1 W2 ]时,fir1函数可得到带阻滤波器。 格式:

b=fir1(n,[ W1 W2 ],„stop‟) 【例1】 采用Hamming窗设计一个48阶FIR带通滤波器,通带为0.35 < w < 0.65。 采用fir1函数的程序格式:

b=fir1( 48,[ 0.35 0.65 ]); freqz(b,1,512) 【例2】设计一个FIR高通滤波器,使其具有30dB波纹的Chebyshev窗,其阶数为34,截止频率为0.48。

解:采用fir1函数设计高通滤波器的程序格式为 Window = chebwin(35,30);

b=fir1( 34,0.48,„high‟,Window) ; freqz(b,1,512) 注意:用fir1函数设计高通和带阻滤波器时,所使用的阶数n应为偶数,当输入的阶数n为奇数时,fir1函数会自动将阶数增加1形成偶数。 2. fir2函数

用来设计有任意频率响应的各种加窗FIR滤波器。 语法:

b=fir2(n,f,m)

b=fir2(n,f,m,Window) b=fir2(n,f,m,npt)

b=fir2(n,f,m,npt,Window) b=fir2(n,f,m,npt,lap)

b=fir2(n,f,m,nptt,lap,Window) 说明:

22

参数n为滤波器的阶数;

参数f为频率点矢量,且f[0,1],f=1对应于0.5fs。矢量f按升序排列,且第一个元素必须为0,最后一个必须为1,并可以包含重复的频率点;

参数m为幅度点矢量,在矢量m中包含了与f相对应的期望得到滤波器幅度;

参数Window用来指定所使用的窗函数类型,其默认值为汉明(Hamming)窗;

参数npt用来指定fir2函数对频率响应进行内插的点数;

参数lap用来指定fir2函数在重复频率点附近插入的区域大小。

【例3】 设计一个31阶的低通FIR滤波器,其截止频率为0.6。

解:采用fir2函数的程序格式:

在MATLAB 的命令窗口输入一下指令 f = [ 0 0.6 0.6 1 ]; m = [ 1 1 0 0 ]; b=fir2(29,f,m)

会得到下面的结果: b = Columns 1 through 10 0.0000 0.0017 -0.0016 -0.0023 0.0059 -0.0001 -0.0127 0.0112 0.0151 -0.0337 Columns 11 through 20 0.0003 0.0634 -0.0569 -0.0893 0.2996 0.5996 0.2996 -0.0893 -0.0569 0.0634 Columns 21 through 30 0.0003 -0.0337 0.0151 0.0112 -0.0127 -0.0001 0.0059 -0.0023 -0.0016 0.0017 Column 31 0.0000

四、实验组织运行要求

教师简单讲解,学生调试程序,教师辅导

五、实验条件

安装NATLAB和CCS的电脑一台

六、实验步骤

实验步骤同实验一: 请大家输入以下程序:

.title “fir.asm” .mmregs .def start h .usect "h",31

23

y .usect "y",1 xn .usect "xn",31 x1 .usect "x1",1 PA2 .set 2 PA1 .set 1 .data table: .word 0*32768/10000, 17 *32768/10000 .word -16*32768/10000, -23*32768/10000 .word 59*32768/10000 , -1*32768/10000 .word -127*32768/10000,112*32768/10000 .word 151*32768/10000,-337*32768/10000 .word 3*32768/10000 ,634*32768/10000 .word -569*32768/10000,-893*32768/10000 .word 2996*32768/10000 , 5996*32768/10000 .word 2996*32768/10000 , -893*32768/10000 .word -569*32768/10000 , 634*32768/10000 .word 3*32768/10000, -337*32768/10000 .word 151*32768/10000, 112*32768/10000 .word -127*32768/10000, -1*32768/10000 .word 59*32768/10000 , -23*32768/10000 .word -16*32768/10000, 17*32768/10000 .text start: SSBX FRCT STM #h,AR1; RPT #30 MVPD #table,*AR1+ STM #xn,AR2 RPTZ A,#30 STL A,*AR2+ STM #xn+30,AR3 STM #h+30,AR4 STM #31,BK STM -1,AR0 LD #x1,DP PORTR PA1,@x1 LD @x1,A LD #xn,DP STL A,@xn FIR: RPTZ A,#30 MAC *AR3+0%,*AR4+0%,A STH A,@y PORTW @y,PA2 PORTR PA1,@x1 LD @x1,A 24

STL A,*AR3+0% B FIR .end 假如已经从端口PA1读到的数据,放在IN.dat文件中,经过滤波后,从端口输出的数据放在OUT.dat中. IN.dat文件中的内容如下: 1651 1 bf 0 0 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 其余略

OUT.dat文件为空白. 首先将生成的*.out 文件加载入系统中,在反汇编窗口,设置探测点,如下:

图5-1 输入数据加载断点设置

然后在FILE菜单中选择出数据、加载到输入、输出断口。

最后观察滤波前后的频谱图分别如下:

功能,会弹出如下对话框,可以分别将输入数据输 25

七、思考题

试用此参数设计一个高通滤波器,并用DSP实现。

八、实验报告

要求学生按本实验指导书后附的实验报告格式和要求的内容写出实验报告,实验报告应包括实验预习、实验记录和实验报告等三部分内容。

九、其它说明

1. 学生实验时,应严格准守实验室规则、安全制度和学生实验守则;

2. 认真学习实验操作技能,严格按指导书和实验指导教师的指导操作有关规仪器设备,不要做与本实验无关的事情;

3. 做好实验预习、实验记录,并按要求按时完成实验报告。

26

实验六:IIR数字滤波器

实验学时:2 实验类型:设计

实验要求:选修

一、实验目的

了解IIR滤波器的原理及使用方法

了解使用MATLAB语言设计IIT滤波器的方法

掌握DSP对IIR对滤波器的设计及编程方法

熟悉在CCS环境下对IIR滤波器的调试方法

二、实验内容

要求设计一个采样频率为1200Hz,截止频率为200Hz的高通滤波器. 输入信号频率为100Hz和300Hz的合成信号,目的是同过所设计的滤波器的将100Hz的信号滤除掉,余下300Hz的信号成分,达到滤波效果.

三、实验原理、方法和手段

IIR数字滤波器的输入x(k)和输出y(k)的关系可以用如下常系数线性差分方程及其Z变换描述,即

y(k)= (6-1) bx(ki)ay(ki)i0Mii1Ni

系统的传递函数为

b0b1z...bnz H(Z)= (6-2)

1N1a1z1...anzM

四、实验组织运行要求

教师简单讲解,学生调试程序,教师全程辅导

五、实验条件

安装CCS和MATLAB的电脑一台

六、实验步骤

1、 MATLAB的滤波器设计

在MATLAB中使用滤波器设计工具箱(FDA)来设计滤波器,首先打开MATLAB,在命令窗口输 27

入FDAtool, 将出现滤波器设计工具箱. 下图是打开的滤波器设计的主要界面,通过输入有关参数可以设计各种滤波器,包括滤波器的类型,阶数,截止频率(Fpass),带宽,纹波系数(Apass),采样频率(Fs) 等有关参数.

6-1 MAILAB设计IIR滤波器界面

上图所设计是IIR型的3阶契比雪夫1型高通滤波器的采样频率为1200Hz,截止频率为200Hz,图中中间显示的是数据为设计好的滤波器的参数. 通过这个工具箱可以观察滤波器的频率特性,冲激响应特性,阶跃响应,零极点示意图

2、 用MATLAB 产生输入信号: t=(1:256)/1200; x=32768*(sin(2*pi*100*t)+sin(2*pi*300*t))/2 此时会产生如下结果: x = 1.0e+004 * 28

Columns 1 through 12 2.4576 1.4189 0 1.4189 2.4576 0 -2.4576 -1.4189 0 -1.4189 -2.4576 -0 (会产生256点周期为12的输入信号,因此在此只给出一个周期的输入信号)

3、滤波器的汇编语言设计: 在编写滤波器之前,首先确定滤波器的参数,从上面的设计中得出滤波器的系数,为了防止小数运算的溢出,将各个系数除以8,得到新的数据: 分子:0.04045,-0.1213375,0.1213375,-0.04045 分母:1 ,-0.1151875,0.080275,0.080275,-0.0030875 针对以上参数,编写汇编语言如下: .mmregs .ref filter_start .def _main ;定义主函数入口 K_DATA_SIZE .set 256 ;定义数据个数 K_BUFFER_SIZE .set 8 K_STACK_SIZE .set 256 ;堆栈大小

K_A .set 3 ;A的个数 K_B .set 4 ;B的个数 K_CIR .set K_BUFFER_SIZE STACK .usect "stack",K_STACK_SIZE SYSTEM_STACK .set K_STACK_SIZE+STACK DATA_DP .usect "filter_vars",0 filterdata .usect "filter_vars",K_DATA_SIZE bufferdatay .usect "filter_vars",K_BUFFER_SIZE*2 bufferdatax .usect "filter_vars",K_BUFFER_SIZE*2 .data .global inputdata inputdata .word 24576,14189,0,14189,24576,0,-24576,-14189,0,-14189,-24576,0 .word 24576,14189,0,14189,24576,0,-24576,-14189,0,-14189,-24576,0 .word 24576,14189,0,14189,24576,0,-24576,-14189,0,-14189,-24576,0

.word 24576,14189,0,14189,24576,0,-24576,-14189,0,-14189,-24576,0 .word 24576,14189,0,14189,24576,0,-24576,-14189,0,-14189,-24576,0 .word 24576,14189,0,14189,24576,0,-24576,-14189,0,-14189,-24576,0 .word 24576,14189,0,14189,24576,0,-24576,-14189,0,-14189,-24576,0 .word 24576,14189,0,14189,24576,0,-24576,-14189,0,-14189,-24576,0 .word 24576,14189,0,14189,24576,0,-24576,-14189,0,-14189,-24576,0 .word 24576,14189,0,14189,24576,0,-24576,-14189,0,-14189,-24576,0 .word 24576,14189,0,14189,24576,0,-24576,-14189,0,-14189,-24576,0 .word 24576,14189,0,14189,24576,0,-24576,-14189,0,-14189,-24576,0 .word 24576,14189,0,14189,24576,0,-24576,-14189,0,-14189,-24576,0

29

.word 24576,14189,0,14189,24576,0,-24576,-14189,0,-14189,-24576,0 .word 24576,14189,0,14189,24576,0,-24576,-14189,0,-14189,-24576,0 .word 24576,14189,0,14189,24576,0,-24576,-14189,0,-14189,-24576,0 .word 24576,14189,0,14189,24576,0,-24576,-14189,0,-14189,-24576,0 .word 24576,14189,0,14189,24576,0,-24576,-14189,0,-14189,-24576,0 .word 24576,14189,0,14189,24576,0,-24576,-14189,0,-14189,-24576,0 .word 24576,14189,0,14189,24576,0,-24576,-14189,0,-14189,-24576,0 .word 24576,14189,0,14189,24576,0,-24576,-14189,0,-14189,-24576,0 .word 24576,14189,0,14189 .text .asg AR2,ORIGIN .asg AR3,INPUT .asg AR4,FILTER .asg AR5,OUTPUT _main: SSBX FRCT SSBX INTM LD #DATA_DP,DP STM #STACK,SP CALL filter_start NOP NOP NOP loop B loop

.def b1,b2,b3,b4,a1,a2,a3 .def filter_start b1 .set 052dh b2 .set -0f87h b3 .set 0f87h b4 .set -052dh a1 .set -0ebeh a2 .set 0a46h a3 .set -0065h

.text filter_start STM #inputdata,ORIGIN STM #bufferdatax,INPUT STM #bufferdatay,FILTER STM #filterdata,OUTPUT

STM #K_DATA_SIZE-3-1,BRC 30 STM #K_CIR,BK STM #1, AR0 RPTB filter_end-1 MVDD *ORIGIN+,*INPUT RPT #K_B-1-1 MAR *INPUT-0% MPY *INPUT+0%,#b4,B LD B,A MPY *INPUT+0%,#b3,B ADD B,A MPY *INPUT+0%,#b2,B ADD B,A MPY *INPUT+0%,#b1,B ADD B,A MPY *FILTER+0%,#a3,B ADD B,A MPY *FILTER+0%,#a2,B ADD B,A MPY *FILTER+0%,#a1,B ADD B,A STH A,*FILTER-0% STH A,*OUTPUT+ MAR *FILTER-0% filter_end: NOP RET .end

其*.CMD命令文件如下:

iir.obj -o iir.out -m iir.map -e _main MEMORY { PAGE 0: PARAM: org=3000h,len=4000h PAGE 1: DARAM: org=100h,len=4000h } SECTIONS

31

{ .text :> PARAM PAGE 0 stack :> DARAM PAGE 1 filter :> DARAM PAGE 1 .bss :> DARAM PAGE 1 .data :> DARAM PAGE 1 } 编译,调试程序,生成了执行文件*.out,然后载入*.out文件,运行. 4) 运行后,观察输入数据的时域和频域的波形如下:

图 6-2 滤波前信号的时域图

32

图 6-3 滤波前信号的频域图

图 6-4 滤波后信号的时域图

图 6-5 滤波后信号的频域图

33

七、思考题

试设计一个低通滤波器,滤除300Hz的信号.其它要求同实验

八、实验报告

要求学生按本实验指导书后附的实验报告格式和要求的内容写出实验报告,实验报告应包括实验预习、实验记录和实验报告等三部分内容。

九、其它说明

1. 学生实验时,应严格准守实验室规则、安全制度和学生实验守则;

2. 认真学习实验操作技能,严格按指导书和实验指导教师的指导操作有关规仪器设备,不要做与本实验无关的事情;

3. 做好实验预习、实验记录,并按要求按时完成实验报告。

34

实验七:图象的伽玛增强

实验学时:2 实验类型:设计

实验要求:选修

一、实验目的

了解伽玛(Gamma)矫正的原理

掌握如何从文件读入数据到内存

掌握在CCS下图象的 输入和输出

二、实验内容

本实验要求对一个已经准备好的图象能够进行伽玛矫正,γ值为1.54,设计一个程序,用查表的方式对图象进行矫正,比较伽玛矫正前后的效果.

三、实验原理、方法和手段

伽玛矫正实质上就是矫正亮度,在灰度图中就是灰度矫正.这个过程是简单的,不需要实时处理.可以通过查表来进行,创建一个查找需要用的空间很少.伽玛矫正的计量单位用γ(γ通常是大于1)表示.如果灰度Iin的值介于0和255之间,伽玛矫正公式为: Iout=(Iin/max gray)1/ γ*max gray (7-1)

max gray=255; 此表可用MATLAB先计算好.

四、实验组织运行要求

教师简单讲解,学生调试程序,教师全程辅导

五、实验条件

安装CCS和MATLAB的电脑一台

六、实验步骤

项目的编译步骤如前所述,在此不多讲了; 1.向工程添加以下两个源程序 1) gamma.c 源程序如下: #include #include #define TRUE 1 35

#define FALSE 0 #define BUFSIZE 4096 /* the buffer size is 64*64=4096 */ /* Global declarations */ int in_buffer[BUFSIZE]; /* processing data buffers */ int out_buffer[BUFSIZE]; /* Functions */ static int gamma(int *input, int *output); static void dataIO(void); /* Functions */ static int gamma(int *input, int *output); static void dataIO(void); void main() { int *input = &in_buffer[0]; int *output = &out_buffer[0]; puts("the 3rd experiment started "); /* loop forever */ while(TRUE) { /* * Read input data using a probe-point connected to a host file. * Write output data to a graph connected through a probe-point. */ // read the input image data. dataIO();

puts("processing "); /* Processing Gamma Calibration*/ gamma(input, output);

// write the output image. // the output file is result.dat. dataIO(); } } /* ======== processing gamma calibration======== * * FUNCTION: apply gamma calibration to enhance the brightness of dark are in an image. * * PARAMETERS: address of input and output buffers. * * RETURN VALUE: TRUE. */ static int gamma(int *input, int *output) { int i; 36

/* the given gamma value is 0.65.*/ /* please try other gamma values. */ int LUT[256]={0, 7, 11, 14, 17, 20, 22, 25, 27, 29, 31, 33, 35, 37, 39, 40, 42, 44, 46, 47, 49, 50, 52, 53, 55, 56, 58, 59, 61, 62, 63, 65, 66, 68, 69, 70, 71, 73, 74, 75, 76, 78, 79, 80, 81, 83, 84, 85, 86, 87, 88, 90, 91, 92, 93, 94, 95, 96, 97, 98,100,101,102, 103,104,105, 106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121, 122,123,124,125,126,127,128,129,130,131,131,132,133,134,135, 136,137,138,139,140,141,141,142,143,144,145,146,147,148,149, 149,150,151,152,153,154,155,155,156,157,158,159,160,160,161, 162,163,164,165,165,166,167,168,169,169,170,171,172,173,173, 174,175,176,177,177,178,179,180,181,181,182,183,184,185,185, 186,187,188,188,189,190,191,191,192,193,194,194,195,196,197, 197,198,199,200,200,201,202,203,203,204,205,206,206,207, 208,208,209,210,211,211,212,213,213,214,215,216,216,217,218, 218,219,220,221,221,222,223,223,224,225,225,226,227,228, 228,229,230,230,231,232,232,233,234,234,235,236,236,237, 238,238,239,240,240,241,242,242,243,244,244,245,246,246, 247,248,248,249,250,250,251,252,252,253,254,254,255}; /*replace the brightness with a calibrated value.*/ for(i=0;i

return; }

37

2) 其CMD文件如下: -m volume.map MEMORY { PAGE 0: EPROG: origin = 0x3000, len = 0x1000 VECT: origin = 0xff80, len = 0x80 PAGE 1: USERREGS: origin = 0x60, len = 0x1c BIOSREGS: origin = 0x7c, len = 0x4 IDATA: origin = 0x80, len = 0x2f80 } SECTIONS { .vectors: {} > VECT PAGE 0 .sysregs: {} > BIOSREGS PAGE 1 .trcinit: {} > EPROG PAGE 0 .gblinit: {} > EPROG PAGE 0 frt: {} > EPROG PAGE 0 .text: {} > EPROG PAGE 0 .cinit: {} > EPROG PAGE 0 .pinit: {} > EPROG PAGE 0 .sysinit: {} > EPROG PAGE 0 .bss: {} > IDATA PAGE 1 .far: {} > IDATA PAGE 1 .const: {} > IDATA PAGE 1 .switch: {} > IDATA PAGE 1 .sysmem: {} > IDATA PAGE 1 .cio: {} > IDATA PAGE 1 .MEM$obj: {} > IDATA PAGE 1 .sysheap: {} > IDATA PAGE 1 .stack: {} > IDATA PAGE 1 } 同时将ti:c5400ctgtoolslib目录下的rts.lib文件加到工程下,给文件是C语言开发的DSP应用程序的运行支持库. 3. 编译,链接和运行程序

编译成功后,可以通过View_Watch Windows,或者单击工具栏上的窗口

图标.选择观测 38

图7-1,观测到的向量 4.将要校正的图象从文件读入到内存:

1) 执行菜单命令File_Data_Load,将打开如图所示的对话框,将要校正的图象tire.dat读入到内存.

图7-2 读图第一步

点击‟打开‟,将会出现如下一个对话框:

图7-3 读图第二步

由前图知道in-buffer(校正前的图片在内存中定义的地址)为0x00A5,长度为4096即0x1000, 5. 显示校正前和校正后的图象

39

程序运行后执行View_Graph下的Image命令

图7-4 读图设置图

图7-5 校正之前的图

图7-6 校正之后的图

40

七、思考题

图形增强还有什么算法?如何实现?

八、实验报告

要求学生按本实验指导书后附的实验报告格式和要求的内容写出实验报告,实验报告应包括实验预习、实验记录和实验报告等三部分内容。

九、其它说明

1. 学生实验时,应严格准守实验室规则、安全制度和学生实验守则;

2. 认真学习实验操作技能,严格按指导书和实验指导教师的指导操作有关规仪器设备,不要做与本实验无关的事情;

3. 做好实验预习、实验记录,并按要求按时完成实验报告。

41

实验八:FIR数字滤波器

实验学时:2 实验类型:设计

实验要求:选修

一、实验目的

了解FFT的原理和算法

掌握DSP中FFT的设计和编程方法

熟悉FFT的调试方法

二、实验内容

本实验要求使用FFT变换求一个时域的频域特定,并从这个频域求出该信号的频率值,然后使用DSP汇编语言实现对FFT的DSP的编程.

三、实验原理、方法和手段

1、FFT基本数学理论

对于有限长的离散数字信号{x(n)},0≦n≦N-1,它的频谱数学值{X(n)}可由离散傅氏变换(DTF)求得.DTF定义为: X(k)= k=0,1,…..N-1 (8-1) x(n)ej(2/N)nkn0n1

令WM=e-j(2∏/N)nk 然而对于相当大的N值(比如1024)来说,直接计算它的DFT所需要的计算量很大.因此我们采用优化的FFT算法,它是一个组合以后的算法,原始的2N个点的实输入序列组合为一个N点的复序列,然后对复序列进行N点的FFT,最后再将N点复数输出拆分为2N点的 复数序列,这2N点的复数序列与原始的2N点实数输入序列是一致。

FFT的基本思想是:将原来的N点序列分为较短的序列,这些序列的DFT可以简单的组合起来得到原来的DFT。例如,若N为偶数,将原有的N点序列分为两个(N/2)点的序列,那么计算N点的DFT将需要约(N/2)*2=N/2,是直接采用DFT运算量的一半。上述方法反复使用,在组合和拆分的操作中,FFT的算法量均减半。

2、FFT算法 1) 码位倒置

42

2

2 FFT的码位倒置实际上是将输入的数据进行位倒序,以便在输出时候得到正确的序列,以N=8 为例说明位倒序的原理。舍输入的序列为x[n], N=8,其自然序列为:0,1,2,3,4,5,6,7。其一次按奇偶分开,得到两组M/2点的DFT,其序号为:

0,2,4,6| 1,3,5,7,对每一组再看奇偶分开,得到: 0,4|2,6|1,5|3,7 对于这种运算,我们可以采用DSP的间接寻址的位倒序寻址来实现。 2) W因子的生成和分布规律

在FFT中,乘法主要来自旋转因子,因为W=cos(2πr/N)-jsin(2πr/N), 所以在对W

r

r相乘时,必须产生相应的正,余弦函数。在编程序时候,正,余弦函数产生的方法一般有两种:一种是在每一步直接产生,另一种是在程序开始前预先计算出来将W,将r=0,1,….N-1这N个独立的值存放在数组中,等于直接建立一个表,在程序执行的过程中,可直接查表得到,提高运算速度,但要占用更多的内存。 W的一般规律为:

r

r在第m级: ,r=0,1,2,…….2 2m1wrm

四、实验组织运行要求

教师简单讲解,学生调试程序,教师全程辅导

五、实验条件

安装CCS和MATLAB的电脑一台

六、实验步骤

1 主函数 (文件名为*.asm) 从主函数中可以看出FFT的基本过程和步骤,以及码位倒置,产生三角因子,碟形运算和计算功率谱密度。

.title "zxy_fft5k_program" .mmregs .global _c_int00 .include "vc54xnt.h" .include "cfft256coff.h" .include "cfft256fn.h" STACK .usect "stack",stack_size SYSTEM_STACK .set STACK+stack_size .sect "vectors" reset: BD _c_int00 STM #SYSTEM_STACK,SP .space 31*4*16 .text 43

_c_int00: NOP CALL c54x_init ; Initialize CPU and clear A and B CALL bit_rev ;Here AR7 --> fft_data , others is free

NOP

CALL fft_task

NOP

CALL power

NOP main_start:

B main_start .end 2 初始化CPU ;文件名为: vc54xnt.h stack_size .set 200h K_FFT_SIZE .set 256

.text c54x_init: ;CPU initialize ;

STM #0b,CLKMD ;TstStatu: LDM CLKMD,A ;Switch to DIV mode ;

AND #01b,A ;

BC TstStatu,ANEQ

STM #9FF7h,CLKMD ;CPU Clock Feg.:100MHz

STM #00A0h,PMST

STM #8FFFh,SWWSR ;IO wait for 7 clk

STM #8802h,BSCR ;Clockout=50MHz

LD #0h,DP ;Data Page Points at NO. 0

LD #0h,A

LD #0h,B

RET

3.cfft256coff.h 函数

cfft256coff.h 函数包括输入的数据和FFT要用到的各种参数的定义,其中 w11112w4w8w16w111132w64w128w256分别为L =cosw12(2π/2)-jsin(2π/2)=-1-j0 =cosw14(2π/4)-jsin(2π/4)=0-j =cosw18(2π/8)-jsin(2π/8)=0.707-j0.707 =cosw116(2π/16)-jsin(2π/16)=0.9239-j0.3827 =cosw132(2π/32)-jsin(2π/32)=0.9808-j0.1951 =cosw164(2π/64)-jsin(2π/64)=0.9952-j0.0980 44

分别,

w =cos(2π/256)-jsin(2π/256)=0.9997-j0.0246 w =cos(2π/128)-jsin(2π/128)=0.9988-j0.0491 12812561 将上述系数分别乘以32768得到DSP的Q15格式的小数.

要进行FFT变换的数据是一个周期内采样20个点的正弦信号,共采集 了256点。

4. cfft256fn.h函数

此头文件里包含位码倒置,计算功率谱密度、FFT碟形运算三个子程序。

以上2个程序太长,因此在这里不显示,大家可以在课程论坛里下载这两个程序。 5. Cmd 文件

/* Filename:cfft256.cmd*/ -m cfft256.map MEMORY { PAGE 0: PM0: o=0x80 , l=0x80 PM1: o=0x100 , l=0x1000 PAGE 1: DM0: o=0x2000 , l=0x2000 } SECTIONS { vectors: PAGE 0 load=PM0 .text: PAGE 0 load=PM1 .data: PAGE 1 load=DM0

45

图8-1 观察图形设置对话框 .bss : PAGE 1 load=DM0 .bss : PAGE 1 load=DM0 stack: PAGE 1 load=DM0 } 6.观察程序运行结果

观察输入数据的波形和频谱

观察图形首先对对话框做如图8-1所示的设置。

图8-2 输入信号的波形和频谱图 2 察看位码倒置后的图形:

点击View-Disassembly,在Disassembly窗口点右键,选择start_address,输入bit_rev_end,在它的下一条语句设置断点然后执行Debug_restart.然后观察位码倒置后的波形。如图8-3所示

3 观察进行FFT变换后的波形如图8-4所示

如果将上图的Dsplay Type栏中该为FFT Magnitude,就等于作了依次FFT反变换,得到如图所示的结果. 如图8-5所示

46

图8-3 位倒码以后的波形图

图8-4 FFT以后的波形图

47

图8-5 FFT变换后的频谱图

七、思考题

探测点有何作用?如何设置探测点?

八、实验报告

要求学生按本实验指导书后附的实验报告格式和要求的内容写出实验报告,实验报告应包括实验预习、实验记录和实验报告等三部分内容。

九、其它说明

1. 学生实验时,应严格准守实验室规则、安全制度和学生实验守则;

2. 认真学习实验操作技能,严格按指导书和实验指导教师的指导操作有关规仪器设备,不要做与本实验无关的事情;

3. 做好实验预习、实验记录,并按要求按时完成实验报告。

48

实验九:控制XF引脚周期性变化

实验学时:2 实验类型:设计

实验要求:选修

一、实验目的

学习定时器的初始化步骤

掌握定时中断原理和中断调用的流程

掌握中断向量表的设置

二、实验内容

本实验要求利用中断系统和定时期设计一个周期为2ms的方波,并通过CCS图像观测器观测出来。

三、实验原理、方法和手段

中断是由外部设备向CPU传送数据,或者由外部设备向CPU提出数据产生的。具体是指当某个事件发生时,暂停当前的操作,转向中断服务程序,执行完后再返回继续原来的操作。这使得DSP能够处理多个任务。CPU执行中断服务程序(ISR)步骤如下: 1 保护现场,将PC值压入栈顶;

2 载入中断矢量表,将中断矢量表地址送入PC; 3执行中断矢量表,程序将进入ISR入口; 4 执行ISR,直至遇到返回指令; 5 回复现场,将栈顶值返回PC; 6 继续主程序。

定时器初始化初始化步骤: 1 关闭定时期,TCR中的TSS=1。 2 加载PRD。

3 启动定时器,初始化TDDR,TSS=0,TBB=1。 4 打开可屏蔽中断.

四、实验组织运行要求

教师简单讲解,学生调试程序,教师全程辅导

五、实验条件

49

上一篇
下一篇
返回顶部