实验报告
课程名称:DSP技术及应用学号:姓名:
实验2.1 基础实验
一、实验目的
1. 掌握CCS3.3实验环境的使用;
2. 掌握用C语言编写DSP程序的方法。
二、实验设备
1. 一台装有CCS3.3软件的计算机;
2. DSP实验箱的TMS320F2812主控板;
3. DSP硬件仿真器。
三、实验原理
浮点数的表达和计算是进行数字信号处理的基本知识;产生正弦信号是数字信号处理中经常用到的运算;C语言是现代数字信号处理表达的基础语言和通用语言。写实现程序时需要注意两点:(1)浮点数的范围及存储格式;(2)DSP的C语言与ANSI C语言的区别。
四、实验步骤
1、在CCS3.3环境中打开本实验的工程(Example_base.pjt)[位置为:/ Example_2812/ Example_math/ Example_base],此文件是C程序,连接(project-connect),出现汇编。
2、选择file-load program编译并重建 .out 输出文件,然后通过仿真器把执行代码下载到DSP芯片中;
3、选中变量名X0 , Y0 和Z0,单击鼠标右键,在弹出菜单中选择“Add Watch Window”命令,把X0 , Y0 和Z0添加到Watch窗口中作为观察对象。
4、选择view->graph->time/frequency… 。 设置对话框中的参数: 其中“Start Address”设为“sin_value”,“Acquisition buffer size”和“Display Data size”都设为“100”,并且把“DSP Data Type”设为“32-bit floating point”。
五、实验代码
#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
sin_value[i]=0;
X0=0.5; /* 0.100 0000 0000 0000 */
Y0=0.5; /* 0.100 0000 0000 0000 */
Z0=X0*Y0; /* 00.01 0000 0000 0000 0000 0000 0000 0000 */
for(i=0;i
sin_value[i]=100*(sin(2*pi*i/N));
}
六、实验现象
设置好后观察信号序列的波形(sin函数,如图);
七、思考题
1. 试用C语言编写实现其他数学运算的程序;
题:用C语言求5!
程序:
#include
void main()
{
int i,t;
t=1;
i=2;
while(i<=5)
{t=t*i;
i=i+1;}}
八、实验小结
本次试验是初次接触DSP硬件仿真器,将DSP实验箱的TMS320F2812主控板与一台装有CCS3.3软件的计算机连接,就可以进行仿真,打开相应的工程文件,将程序代码下载到DSP芯片,改变相应参数,运行即可看到程序运行的结果。
实验报告
课程名称:DSP技术及应用学号:姓名:
实验2.4 快速傅里叶变换 (FFT) 实现
一、实验目的
1. 掌握FFT算法的基本原理;
2. 掌握用C语言编写DSP程序的方法。
二、实验设备
1. 一台装有CCS3.3软件的计算机;
2. DSP实验箱的TMS320F2812主控板;
3. DSP硬件仿真器。
三、实验原理
离散信号x(n)的傅里叶变换可以表示为
,
式中的WN称为蝶形因子,利用它的对称性和周期性可以减少运算量。
时间抽取FFT是将N点输入序列x(n) 按照偶数项和奇数项分解为偶序列和奇序列。偶序列为:x(0), x(2), x(4),…, x(N-2);奇序列为:x(1), x(3), x(5),…, x(N-1)。这样x(n) 的N点DFT可写成:
单个蝶形运算示意图如下:
以N=8为例,时间抽取FFT的信号流图如下:
从上图可以看出,输出序列是按自然顺序排列的,而输入序列的顺序则是“比特反转”方式排列的。也就是说,将序号用二进制表示,然后将二进制数以相反方向排列,再以这个数作为序号。如011变成110,那么第3个输入值和第六个输入值就要交换位置了。本实验中采用了一种比较常用有效的方法完成这一步工作__雷德算法。
四、实验步骤
1、在CCS3.3环境中打开本实验的工程(Example_fft.pjt),此文件是C程序,连接(project-connect),出现汇编。
2、选择file-load program编译并重建 .out 输出文件,然后通过仿真器把执行代码下载到DSP芯片中;
3. 运行程序;
4. 选择view->graph->time/frequency… 。 设置对话框中的参数: 其中“Start Address”设为“x_re”,“Acquisition buffer size”和“Display Data size”都设为“64”,并且把“DSP Data Type”设为“32-bit floating point”(如图),设置好后观察输入信号序列的波形(单边指数函数,如图);
同样方法观察经DFT变换后的输出序列“y_re”的波形,“Start Address”改为“y_re”,其余参数不变(如图);
5. 在Watch窗口中添加i, j, k, m, n, a, b ,c 等变量,在Debug菜单中先“Restart”然后 “Go main”, 单步运行程序,跟踪FFT算法的过程;(可以跳过程序开始部分对各个数组的赋值代码,方法是在雷德算法的第一行代码前设置断点,然后先单击运行,待程序停在该断点后再单步执行后面的代码,见下图。)
五、实验代码
/* Program for FFT */
#include
#include
const float pi=3.1415926;
int N=64; /* FFT点数 */
float x_re[64], x_im[64]; /* 输入信号序列 */
float y_re[64], y_im[64]; /* 输出频谱序列 */
float w_re, w_im; /* 蝶形因子 */
int m; /* 蝶形运算的级数,即Log2(N) */
float t_re, t_im, v_re, v_im; /* 临时变量 */
int j,i,k,f,n;
int a, b, c;
void main()
{
/* 初始化数据空间 */
for(i=0; i<64; i++)
{
x_re[i]=0;
x_im[i]=0;
}
/* 设定输入信号序列为单边指数函数 */
/* 考虑到实际衰减很快,因此可以忽略后面大半部分数值 */
for(i=0;i<=N;i++)
{
x_re[i]=cos(-16*pi*i/N);
x_im[i]=sin(-16*pi*i/N);
}
/* 复制到输出数组 */
for(i=0; i<64; i++)
{
y_re[i]=x_re[i];
y_im[i]=x_im[i];
}
/* 用雷德算法对输入信号序列进行倒序重排 */
j=0;
for(i=0;i { if(i { t_re=y_re[j]; t_im=y_im[j]; y_re[j]=y_re[i]; y_im[j]=y_im[i]; y_re[i]=t_re; y_im[i]=t_im; } k=N/2; while((k<=j)&(k>0)) { j=j-k; k=k/2; } j=j+k; } /* 计算蝶形运算的级数log2(N) */ f=N; for(m=1; (f=f/2)!=1; m++); /*** FFT ***/ for(n=1; n<=m; n++) { a=1; /* a=2的n次方 */ for(i=0;i a=a*2; b=a/2; v_re=1.0; /* 蝶形因子 */ v_im=0.0; w_re=cos(pi/b); w_im=-sin(pi/b); for(j=0;j
{ for(i=j;i { c=i+b; t_re=y_re[c]*v_re-y_im[c]*v_im; t_im=y_re[c]*v_im+y_im[c]*v_re; y_re[c]=y_re[i]-t_re; y_im[c]=y_im[i]-t_im; y_re[i]=y_re[i]+t_re; y_im[i]=y_im[i]+t_im; } t_re=v_re*w_re-v_im*w_im; t_im=v_re*w_im+v_im*w_re; v_re=t_re; v_im=t_im; } } while(1); } 六、实验小结 本次试验实现快速傅里叶变换,相应的工程文件已存在,快速傅里叶变换的运行时间长、运行速度慢,可通过软件仿真七实现仿真。方法是:打开Setup CCStudio v3.3添加F2812 Device Simulator在弹出的窗口中双击CPU(软件仿真不需要进行连接connect),然后就与硬件仿真器的步骤相似。 实验报告 课程名称:DSP技术及应用学号:姓名: 实验3.2 蜂鸣器报警实验 一、实验目的 1. 掌握2812 IO控制方法; 二、实验设备 1. 一台装有CCS3.3软件的计算机; 2. DSP实验箱; 3. DSP硬件仿真器; 三、实验原理 复用控制寄存器 --- GPxMUX (0---数字IO,1---专用外设功能) 方向控制寄存器 --- GPxDIR (0---输入,1---输出) 量化控制寄存器 --- GPxQUAL (0---无量化,1---量化范围0x00--0xff) I/O数据寄存器 --- GPxDAT (0---输出--引脚置低,1---输出--引脚置高) I/O置位寄存器 --- GPxSET (0---无变化,1---引脚置为高) I/O清零寄存器 --- GPxCLEAR (0---无变化,1---引脚置为低) 单独触发寄存器 --- GPxTOGGLE (0---无变化,1---引脚置电平跳变一次) 2812中可以通过设置上述特定寄存器来改变相应IO输出管脚电平高/低,从而驱动蜂鸣器发出一定频率的声音,通过改变程序中高低电平切换周期可以实现蜂鸣器声音“尖锐”到“低沉”的变化。 相关原理图: 四、实验步骤 1. 把2812主控板插到实验箱底板相应接口上; 2. 连接好DSP开发系统; 3. 本实验工程Example_Buzzer,此文件是C程序,连接(project-connect),出现汇编。编译,下载程序到DSP; 4、选择file-load program编译并重建 .out 输出文件,然后通过仿真器把执行代码下载到DSP芯片中; 5、运行程序,观察2812主控板上相应位置蜂鸣器的发声情况。 五、实验代码 #include "DSP281x_Device.h" #include "DSP281x_Examples.h" #include "math.h" int i[12]; unsigned int k=0; uint32_t index=0; unsigned int l=0; long unsigned int c1; Uint16 key, buf; Uint16 HighAdc_Buf; void main(void) { for(c1=0;c1<20000;c1++) { GpioDataRegs.GPBDAT.bit.GPIOB15=0;//蜂鸣器控制管脚GPIOB15 Delay(20000); GpioDataRegs.GPBDAT.bit.GPIOB15=1; Delay(20000); } for(;;); } 六、实验结果 运行程序,则蜂鸣器发声;停止运行,则蜂鸣器不发声。 七、实验小结 本次实验中,蜂鸣器内阻较小且是一个感性负载,一般不用DSP芯片I/O口直接对它进行操作,所以最好加个驱动三极管,在要求较高的场合还会加上反向保护二极管。通过实验原理图可知,三极管用了PNP(9015)型,所以要使蜂鸣器发声只要给BELLALARM交替置低置高电平即可。 电子科技大学信息与软件工程学院 标准实验报告 (实验)课程名称DSP技术 电子科技大学教务处制表 电子科技大学 实验报告(一) 学生姓名:学号:指导教师: 实验地点:实验时间: 一、实验室名称:信息工程方向专业实验室 二、实验项目名称:CCS基本使用 三、实验学时:4学时 四、实验原理: CCS为DSP开发的集成开发环境,并提供软仿真工具Simulator。 五、实验目的: 目的是掌握project使用,代码编辑工具,build工具,debug,断点,代码跟踪,内存/变量/寄存器查看,图形工具,代码剖析工具等。 六、实验内容: 内容是产生sin信号并画图和调用imagelib完成一个图像的边缘提取。上机完成以下编程实验,调试运行程序并完成报告。基本实验内容: 1. 创建一个project, 打印“Hello World !” (simulaotor: 可以是c5500, c5400, c6000等,也可以是ARM,M3等),了解CCS开发环境的基本使用,包括代码编辑、编译(Build)、以及调试运行。(注意:这个实验中,可以没有CMD文件。但若要添加CMD,请在使用适当的CMD文件。)CCS开发环境的基本要点: (1)新建工程文件(project)、 (2)添加文件:源代码、库、CMD等、 (3)build、 (4)创建目标板配置文件并添加到project中 (5)运行及调试 2. 在TMS320C674x的simulator下完成一个正弦信号产生,并在CCS下画出其波形。(帮助:Code Composer Help > Views and Editors > Graph Views) 3. 在TMS320C6747的simulator下完成输入图像的边缘检测,并在CCS中显示处理结果。 扩展研究问题:(下面这些共有兴趣的同学研究,但不限于这些问题) 1. 代码剖析:分析sobel算子处理图像的时间。并对比另外一个函数IMG_sobel_3x3_8_c,看看他们的处理时间是否一样? 2. 研究CMD定位文件,看看函数、变量的地址情况。 3. 断点、变量查看窗口、反汇编窗口、调试运行命令的学习。 4. 自己写一个函数,将输入图像翻转或镜像处理,并显示结果。 …… 七、实验器材(设备、元器件): 硬件要求:PC机,CPU PII 以上,1GB 内存,100G硬盘空间即可。 软件要求:CCSV5,Simulator 八、实验步骤、实验编程与运行结果: 九、扩展研究内容(完成实验内容中提到的或自己提出的研究、学习内容,非必选项) 九、实验结论: 十、总结及心得体会: 十一、对本实验过程及方法、手段的改进建议: 报告评分: 指导教师签字: 实验报告(二) 学生姓名:学号:指导教师: 实验地点:实验时间: 一、实验室名称:信息工程方向专业实验室 二、实验项目名称:定点数运算 三、实验学时:4学时 四、实验原理: CCS为DSP开发的集成开发环境,并提供软仿真工具Simulator。 在定点数的结构中,小数点的位置是固定的,常用的Q15格式小数表述如下图所示: S XXX XXXX XXXX XXXX 符号bit 小数部分 Q15格式只是定点数的一种常用的表示方式。一般来讲,使用Qm.n的格式来表示定点数,其中,m表示整数部分比特个数,n表示小数部分比特个数。整数和小数部分都使用2的补码形式。这种形式的定点数,加上符号bit,总共有m+n+1个bits,能表示的数的范围为(-2m, 2m-2-n),最小的小数的精度为2-n。 所以,要完成相关定点数运算,需要注意下面几个步骤: (1) 使用正确、适当的格式来表示参加运算的数; (2) 明确定点运算结果的数据范围; (3) 使用正确的加法和乘法指令完成定点运算; 五、实验目的: 目的是掌握定点数的表示方法以及定点数的基本算术运算,包括加、减、乘的基本技能。 六、实验内容: 在CCS的Simulator编程完成定点数运算。基本内容要求为: (1) 0.35 + 0.62 = ? (2) 0.45 x 0.23 = ? (3) 0.75 ? 1.24 =? (4) 0.65 + 0.78 = ? 扩展内容内容要求为: (1) 评估定点运算与浮点运算在C6416下的计算时间与计算误差? (2) 讨论溢出的问题和处理? (3) 用定点算法编程完成:35.54?0.15 x 23 (4) 使用级数展开法用定点数编程完成计算: 七、实验器材(设备、元器件): 硬件要求:PC机,CPU PII 以上,1GB 内存,100G硬盘空间即可。 软件要求:CCSV5,Simulator 八、实验步骤、实验编程与运行结果: 九、扩展研究内容(完成实验内容中提到的或自己提出的研究、学习内容,建议完成或部分完成) 十、实验结论: 十一、总结及心得体会: 十一、对本实验过程及方法、手段的改进建议: 报告评分: 指导教师签字: 电子科技大学 实验报告(三) 学生姓名:学号:指导教师: 实验地点:实验时间: 一、实验室名称:信息工程方向专业实验室 二、实验项目名称:DSP/BIOS的使用 三、实验学时:4学时 四、实验原理: CCS为DSP开发的集成开发环境,并提供软仿真工具Simulator以及BIOS工具。 五、实验目的: 目的是掌握DSP/BIOS的基本使用,包括线程的创建和使用,学习线程的同步与通信,掌握BIOS的分析工具。 六、实验内容: 1.创建DSP/BIOS配置文件,并创建LOG,PRD,SWI,TSK,SEM,CLK等对象; 2.在LOG对象中打印输出信息; 3.设置PRD为每1秒调用一次,并打印启动信息,同时通过旗语启动TSK任务线程; 4.配置CLK为每100ms运行一次,并启动SWI线程。通过配置SWI线程属性(设置邮箱参数),SWI线程函数每0.5秒执行一次。 七、实验器材(设备、元器件): 硬件要求:PC机,CPU PII 以上,1GB 内存,100G硬盘空间即可。 软件要求:CCSV5,Simulator 硬件设备:USB5515DSK实验板,DES6437实验板 八、实验步骤、实验编程与运行结果: 九、实验结论: 十、总结及心得体会: 十一、对本实验过程及方法、手段的改进建议: 报告评分: 指导教师签字: 电子科技大学 实验报告(四) 学生姓名:学号:指导教师: 实验地点:实验时间: 一、实验室名称:信息工程方向专业实验室 二、实验项目名称:音频直通实验(选) 三、实验学时:2学时 四、实验原理: DSK或EVM板提供了包括A/D,D/A,DSP的完整信号处理平台,并提供了外设控制使用相关例程代码。 五、实验目的: 通过DEMO例程代码,了解音频信号处理的基本框架。完成音频信号从输入到输出的完整过程。 六、实验内容: 参考DSK或EVM的语言直通例程代码。 七、实验器材(设备、元器件): 硬件要求:PC机,CPU PII 以上,1GB 内存,100G硬盘空间即可。 软件要求:CCSV5,Simulator 硬件设备:USB5515DSK实验板,DES6437实验板 八、实验步骤、实验编程与运行结果: 九、实验结论: 十、总结及心得体会: 十一、对本实验过程及方法、手段的改进建议: 报告评分: 指导教师签字:
第二篇:“DSP技术”标准实验报告(1-4)
电子科技大学