DSP实验
- 格式:pdf
- 大小:1.79 MB
- 文档页数:76
DSP第六、七次实验报告1. 实验目的:(1)进一步熟悉Matlab实验环境和语言。
(2)熟悉各种滤波器的结构及Matlab实现语言。
(3)掌握用冲击响应不变法和双线性变换法设计IIR滤波器的方法。
(4)掌握用窗函数法和频率抽样法设计FIR滤波器的方法。
2. 实验内容及总结:1.滤波器结构:(1)IIR滤波器各种结构1、直接型结构例如直接型滤波器系统函数, 则有系数向量a=[1,a1,a2,a3],b=[b0,b1,b2], 利用:Y=filter[b,a,x]求信号x(n)通过此滤波器的输出。
2、由系统函数或差分方程求系统的二阶分式(含一阶分式)的级联结构将例如的系统函数重写为二阶分式节的级联型, 利用:[sos,G]=tf2sos(b,a)3、由二阶分式的级联结构转换成系统函数的直接结构是第二步的逆运算, 调用函数:[b,a] = sos2tf(sos)可以求得系数向量a,b, 从而得到H(z)4、由系统函数求部分分式展开(留数及其极点计算)即求z反变换的部分分式展开法, 利用:[r,p,c]=residuez(b,a)其中极点为p, 留数为r, 直接项系数为c。
5、由r,p,c求系统函数即第4步的逆运算, 利用:[b,a]=residuez(r,p,c)6、由直接型结构转换为并联型结构需开发函数:[C,B,A]=tf2par(b,a)其中, b,a为直接型的系数向量, C,B,A为并联型实系数向量, 基本思想是: 1.反复调用[r,p,c]=residuez(b,a)求出极点及留数;2.利用cplxpair函数把极点、留数对按复共轭极点-留数对, 实极点-留数对的顺序排列;3.开发cplxcomp函数, 保证极点和留数相互对应;4.调用[b,a]=residuez(r,p,c)计算并联二阶节的分子分母。
7、由并联型结构转换成直接型结构开发函数:[b,a]=par2tf(C,B,A)为[C,B,A]=tf2par(b,a)的逆函数。
实验一:CPU 定时器实验一:实验目的1、熟悉F2812 的CPU 定时器;2、掌握F2812 的CPU 定时器的控制方法;3、学会使用CPU 定时器中断方式控制程序流程。
二:实验设备计算机,CCS 3.1 版软件,DSP 硬件仿真器,E300 实验箱,2812CPU 板。
三:实验原理样例实验是采用CPU 定时器来定时使LED 亮灭的。
F2812 的CPU 定时器不同于事件管理器模块(EVA、EVB)中的通用定时器(GP)。
F2812 的CPU共有三个定时器,其中,CPU 定时器 1 和 2 被保留用作实时操作系统OS(例如DSPBIOS),CPU 定时器0 可以供用户使用。
定时器的一般操作如下:将周期寄存器PRDH:PRD 中的值装入32 为计数器寄存器TIMH:TIM。
然后计数器寄存器以F281x 的SYSCLKOUT 速率递减。
当计数器减到0 时,就会产生一个定时器中断输出信号(一个中断脉冲)。
下图为CPU 定时器的内部结构:四:实验步骤1 、F2812CPU 板的JUMP1 的1 和2 脚短接,拨码开关SW1 的第二位置ON;其余置OFF。
2 、E300 底板的开关SW4 的第2 位置ON,其余位置OFF。
其余开关设置为OFF。
3 、运行CCS 软件,调入样例程序,装载并运行;(进入CCS 界面后需要点“Debug--Connect”)4 、加载“..\ e300_03_cpu_timer\Debug\Example_281x_cpu_timer.out”;5 、单击“Debug \ Animate”运行,可观察到灯LED1~LED8 的变化规律:6 、单击“Debug \ Halt”,暂停程序运行,LED 灯停止闪烁;单击“Debug \ Run”,运行程序,LED 灯又开始按上述规律变化;五:实验程序及结果修改后程序如下:/*;**************************************************************;* 北京达盛科技有限公司;* 研发部;*;* ;*************************************************************//*----------------------- 文件信息----------------------------;*;* 文件名称: Example_DSP281x_e300_switch.c;* 适用平台: DSP E300 实验箱;;* CPU类型: DSP TMS320F2812;* 软件环境: CCS3.1;* 试验接线: 1、F2812CPU板上:JUMP1的1和2脚短接,拨码开关SW1的第二位置ON;;* 2、E300底板的开关SW4的第2位置ON,其余置OFF。
DSP实验实验一存储器访问实验修改程序中指针room和room2指向的地址,分别改为0x0080、0x008F,0x0100、0x010F,0x0400、0x040F,查看view-memory 中结果如何?并思考为什么?答:将程序中0x0060; 0x006F; 分别改为0x0080、0x008F,0x0100、0x010F,0x0400、0x040F即可。
观察view-memory发现:1)改成0x0080、0x008F时,view-memory 中从0x0080开始的地址没有变化,因为从0x0080到0x00FF之间属于非法区域,不可以读写数据。
2)改成0x0100、0x010F时,view-memory 中从0x0100开始的地址没有变化,而是会跳到0x0200到0x020F,即从0x0200到0x020F的数据都显示0xAAAA,因为x0200到0x020F属于保留区域。
3)改成0x0400、0x040F时,view-memory 中从0x0400开始的地址没有变化,而是会跳到0x0300到0x030F,即从0x0300到0x030F的数据都显示0xAAAA,因为0x0400到0x040F属于保留区域。
程序如下:/*;***********************************************************************;* 北京达盛科技有限公司;* 研发部;*;* ;*;*--------------------------------------------- 文件信息---------------*文件名称:mem.c*文件标示:*摘要:本文件内容为tms320lf2407 dsp的存贮器操作练习程序把* 数据空间从0x0060开始的8个地址空间,填写入0xAAAA的* 数值,然后读出,并存储到0X0068开始的8个地址空间**************************************************************//************************文件预处理***************************/#include "e100_2407.h"/*************************************************************//********************全局变量定义与初始化*********************//*************************************************************//*******************函数、子程序声明与定义********************/void sys_ini() //系统初始化子程序{/*关总中断*/asm(" setc INTM");/*抑制符号位扩展*/asm(" clrc SXM");/*累加器中结果正常溢出*/asm(" clrc OVM");/*禁止看门狗*/* WDCR=0x00E8;/*CLKIN=15M,CLKOUT=30M*/* SCSR1=0x0200;}/*************************************************************//*****************中断服务子程序声明与定义********************/ interrupt void nothing() //哑中断子程序{return;}/*************************************************************//**************************主程序*****************************/void main(void){int i;volatile unsigned int *room = (volatile unsigned int *)0x0060;volatile unsigned int *room2= (volatile unsigned int *)0x006F;sys_ini();/*将0xAAAA写入从数据空间的地址0x0060开始的8个单元中*/for(i=0;i<8;i++){*room=0xAAAA;room++;}/*从0x0060开始的8个空间读出数据依次写入从0x0068开始的8个单元中*/ for(i=0;i<8;i++){*room2=*(room-1);room--;room2--;}}/***************************结束******************************/实验二I/O端口控制实验1)将提供的实验程序运行,并观察实验结果2)修改程序使得可以将开关的状态保存到数据存储空间0x0060单元3)让数据存储空间0x0061单元的低八位来控制发光二极管的显示答:1)实验结果:八个开关控制的发光二极管亮灭为:0x00AA=10101010(1代表亮,0代表灭)2)在sys_ini();的前面加上一段程序:volatile unsigned int *room = (volatile unsigned int *)0x0060; 并将port0004=port0004;改成*room=port0004;3)在sys_ini();的前面加上一段程序:volatile unsigned int *room = (volatile unsigned int *)0x0061; 并将port0004=port0004;改成port0004=*room;程序如下:/*;***********************************************************************;* 北京达盛科技有限公司;* 研发部;*;* ;*;*--------------------------------------------- 文件信息---------------*文件名称:io.c*文件标示:*摘要:本文件内容为tms320lf2407 dsp的IO空间操作练习程序*************************************************************//************************文件预处理***************************/#include "e100_2407.h"/*************************************************************//********************全局变量定义与初始化*********************/ioport short port0004; //输入端口地址定义/*************************************************************//*******************函数、子程序声明与定义********************/void sys_ini() //系统初始化子程序{/*关总中断*/asm(" setc INTM");/*抑制符号位扩展*/asm(" clrc SXM");/*累加器中结果正常溢出*/asm(" clrc OVM");/*禁止看门狗*/* WDCR=0x00E8;/*CLKIN=15M,CLKOUT=30M*/* SCSR1=0x0200;}/*************************************************************/ /*****************中断服务子程序声明与定义********************/ interrupt void nothing() //哑中断子程序{return;}/*************************************************************/ /**************************主程序*****************************/ void main(void){sys_ini();for(;;){/*将io空间的0004地址的值赋予io空间的0004地址*/port0004=port0004;}}/***************************结束******************************/实验三定时器实验1)阅读程序,理解程序,预测实验结果。
DSP实验报告⼀、综合实验内容和要求1. 实验⽬的(1) 学习掌握CCS3.3编译器的使⽤;(2) 通过实验学习掌握TMS320F28335的GPIO ,浮点计算; (3) 学习并掌握A/D 模块的使⽤⽅法;(4) 学习并掌握中断⽅式和查询⽅式的串⼝通信; (5) 学习并掌握28335DSP 的定时器相关的设置与运⽤; (6) 学习信号时域分析的⽅法,了解相关波形参数的计算⽅法; (7) 了解数字滤波的⼀些基本⽅法; (8) 学习数码管的驱动及运⽤。
(9) 学习MATLAB 串⼝以及画图的运⽤。
2. 实验设计内容与要求:(1) 对给定的周期波形信号采⽤TI 公司的TMS320F28335DSP ,利⽤试验箱上的相关资源计算出波形的周期T ,波形的有效值rms V ,平均值avg V 。
其中,有效值和平均值的计算公式(数字量的离散公式)如下:rms V =1()NavgiV u i N=∑式中N 为⼀个周期采样点数,()u i 为采样序列中的第i 个采样点。
(2) 通过算法计算出波形的有效值和平均值,利⽤串⼝通信把测得的数据发送到串⼝助⼿查看,或者在MATLAB 上编写上位机程序,把发送的数据在MATLAB 上画出来。
(3) 把测得的数据实时显⽰在数码管上。
⼆、硬件电路图1为试验系统的硬件图,硬件电路主要包括TMS320F28335DSP 实验箱,SEED-XDS510仿真器,数码管,SCI,信号发⽣器,电脑,串⼝线等。
图1 硬件电路图三、实验原理本试验主要是通过程序去测量⼀个周期波形的有效值、平均值、峰值等相关参数。
计算离散数据的有效值可⽤公式rms V =平均值可⽤公式1()N avgiV u i N=∑。
所以⾸先需要测出波形的周期,然后确定每个周期需要采样的点数N ,最后去计算平均值和有效值。
v mv 1图2 理想输⼊采样波形如图2所⽰为⼀个正弦输⼊波形,m V 为输⼊波形的峰值,1V 是介于0~ m V 的⼀个值。
实验一: 闪灯实验熟悉DSP 软硬件测试系统实验目的1.了解SHARC 系列高性能数字信号处理器的程序开发过程和编程语言;2.熟悉集成开发工具VisualDSP++, 学会使用VisualDSP++进行SHARC 系列ADSP 的程序开发、编译与调试;3.掌握SHARC 系列ADSP 的程序加载设计和加载过程。
实验内容利用波形产生信号板, 结合FPGA 编程技术和程序编程器, 编写测试ADSP21065L 和FPGA 之间硬件连接的应用程序, 同时完成应用程序的加载和脱机操作, 在信号指示灯“HL2”上产生可调周期的脉冲信号, “点亮”与“熄灭”指示灯HL2。
实验要求通过DSP 编程, 在其FLAG11引脚上模拟如下波形的周期信号:要求:(1) 500H T ms >,500L T ms >. (2) 并用示波器查看波形, 测量信号周期。
实验步骤1. 熟悉电路图, 清楚波形产生电路板ADSP21065L 与可编程FPGA 器件之间的连接关系;2. 编写FPGA 程序。
在FPGA 内部将ADSP21065L 的标志引脚FLAG11(引脚号26)设置为输出, 作为FPGA 的输入信号, 在FPGA 内部编程将该信号直接输出在发FPGA 的37引脚号上, 设置37引脚为输出信号, 驱动板上的HL2 LED 指示灯;3. 启动VisualDsp++4.5,选择project 工程选项菜单, 创建一个名称为Test.dpj 的工程文件, 选择处理器的型号为ADSP-21065L ;4.弹出一个对话框, 选择是否需要加入VDSP kernel ,选择“NO ”;5. 在工程中加入以下参考源文件:\exp1\test(boot)\ boot1.asm 和boot1.ldf 6.编译, 链接调试, 生成可执行文件。
7.运行程序, 可以看到波形发生电路板上的指示灯“HL2”不断闪动。
8. 利用示波器观测系统时钟,并测量产生信号的波形和周期。
实验报告||实验名称 D SP课内系统实验课程名称DSP系统设计||一、实验目的及要求1. 掌握用窗函数法设计FIR数字滤波器的原理和方法。
熟悉线性相位FIR 数字滤波器特性。
了解各种窗函数对滤波器特性的影响。
2. 掌握设计IIR数字滤波器的原理和方法。
熟悉IIR数字滤波器特性。
了解IIR数字滤波器的设计方法。
3.掌握自适应数字滤波器的原理和实现方法。
掌握LMS自适应算法及其实现。
了解自适应数字滤波器的程序设计方法。
4.掌握直方图统计的原理和程序设计;了解各种图像的直方图统计的意义及其在实际中的运用。
5.了解边缘检测的算法和用途,学习利用Sobel算子进行边缘检测的程序设计方法。
6.了解锐化的算法和用途,学习利用拉普拉斯锐化运算的程序设计方法。
7.了解取反的算法和用途,学习设计程序实现图像的取反运算。
8.掌握直方图均衡化增强的原理和程序设计;观察对图像进行直方图均衡化增强的效果。
二、所用仪器、设备计算机,dsp实验系统实验箱,ccs操作环境三、实验原理(简化)FIR:有限冲激响应数字滤波器的基础理论,模拟滤波器原理(巴特沃斯滤波器、切比雪夫滤波器、椭圆滤波器、贝塞尔滤波器)。
数字滤波器系数的确定方法。
IIR:无限冲激响应数字滤波器的基础理论。
模拟滤波器原理(巴特沃斯滤波器、切比雪夫滤波器、椭圆滤波器、贝塞尔滤波器)。
数字滤波器系数的确定方法。
、自适应滤波:自适应滤波器主要由两部分组成:系数可调的数字滤波器和用来调节或修正滤波器系数的自适应算法。
e(n)=z(n)-y(n)=s(n)+d(n)-y(n)直方图:灰度直方图描述了一幅图像的灰度级内容。
灰度直方图是灰度值的函数,描述的是图像中具有该灰度值的像素的个数,其横坐标表示像素的灰度级别,纵坐标是该灰度出现的频率(像素个数与图像像素总数之比)。
图像边缘化:所谓边缘(或边沿)是指其周围像素灰度有阶跃变化。
经典的边缘提取方法是考察图像的每个像素在某个邻域内灰度的变化,利用边缘临近一阶或二阶方向导数变化规律,用简单的方法检测边缘。
DSP实验报告实验1 循环操作和双操作数乘法⼀、实验⽬的1. 掌握循环操作指令和双操作数指令的运⽤;2. 掌握⽤汇编语⾔编写DSP 程序的⽅法。
⼆、实验设备1.⼀台装有CCS 软件的计算机;2. DSP 实验箱的TMS320C5410 主控板;3. DSP 硬件仿真器。
三、实验原理1.循环操作指令TMS320C54x 具有丰富的程序控制与转移指令,利⽤这些指令可以执⾏分⽀转移、循环控制以及⼦程序操作。
本实验要求编写⼀程序完成),然后通过仿真器把执⾏代码下载到DSP 芯⽚中;3. 在“end:B end”代码⾏设置断点(当光标置于该⾏时,单击⼯具条上的ToggleBreakpoint图标,此时该⾏代码左端会出现⼀个⼩红点),单击运⾏);6. 改变对变量的初始赋值,重复上述3~5 步过程.7. 增加变量数⽬,重复上述3~5 步过程.(⼆)双操作数乘法1. 在CCS 环境中打开本实验的⼯程(Ex4_2.pjt),阅读源程序;2. 编译并重建.out 输出⽂件,然后通过仿真器把执⾏代码下载到DSP 芯⽚中;3. 在“end:B end”代码⾏设置断点(当光标置于改⾏时,单击⼯具条上的ToggleBreakpoint图标,此时该⾏代码左端会出现⼀个⼩红点),单击运⾏);6. 改变对变量的初始赋值,重复上述过程.实验2 卷积运算和相关运算⼀. 实验⽬的1. 掌握卷积运算的原理;2. 掌握相关系数的估计⽅法3. 掌握⽤C 语⾔编写DSP 程序的⽅法.⼆. 实验设备1. ⼀台装有CCS 软件的计算机;2. DSP 实验箱的TMS320C5410主控板;3. DSP 硬件仿真器.三.实验原理1. 卷积运算卷积的基本表达式为:∑=?=n m m n x m h n y 0)()()( 写程序时要注意两点:(1) 三个序列数组长度的分配;(2) 循环体中变量的位置,即n 和m 的关系. 2. 相关运算相关系数是信号处理中的⼀个重要概念,包括⾃相关系数和互相关系数.它们的定义分别为: ⾃相关系数12()[()()]()()(,;,)xx n kExnxnkxnxnkpxxnnk ?∞=?∞=+=++∑ 互相关系数 )]()([)(k n y n x E k xy +=γ k为相关系数的阶数实际应⽤时,我们可以⽤下式来估计两个平稳信号的互相关系数: 有偏估计 ∑??=+=10)()(1)(?k N n xy k n y n x N k γ⽆偏估计: ∑??=+?=10)()(1)(?k N n xy k n y n x k N k γ当x(n)和y(n)相等即为⾃相关系数的估值..所谓⽆偏估计就是该估计的数学期望等于被估计的参数值.四.实验步骤(⼀) 卷积运算1.在CCS 环境中打开本实验的⼯程(Ex5_1.pjt),编译并重建.out 输出⽂件,然后通过仿真器把执⾏代码下载到DSP 芯⽚中.2.把x, h和y添加到窗⼝中作为观察对象.3.单击运⾏键. 观察三个数组从初始化到卷积运算结束整个过程中的变化;记录卷积结果.(可单击变量名前的“+”号把数组展开);4.修改输⼊序列的长度和初始值,重复上述过程,观察并记录卷积结果.(⼆) 相关运算1.在CCS环境中打开本实验的⼯程(Ex5_2.pjt),编译并重建.out输出⽂件,然后通过仿真器把执⾏代码下载到DSP芯⽚中.2.把x, y和r添加到窗⼝中作为观察对象(选中变量名,单击⿏标右键,在弹出菜单中选择“Add Watch Window”命令).3.单击运⾏键, 观察并记录结果.4.修改估计模式mode,重复上述过程.分析有偏估计和⽆偏估计的差别.5.选定模式,修改输⼊数组的长度,重复上述过程,观察并分析结果与3或4有何不同.6.修改代码,实现x(n)的⾃相关系数的⽆偏估计.五.思考题1.分析阶数对相关系数的影响.实验3 快速傅⾥叶变换FFT⼀. 实验⽬的1.掌握FFT 算法的基本原理2.掌握⽤C 语⾔编写DSP 程序的⽅法.⼆.实验设备1.⼀台装有CCS 软件的计算机;2.DSP 实验箱的TMS320C5410主控板;3.DSP 硬件仿真器.三.实验原理包括两部分内容:1.FFT 按时间抽取的算法;)()()(21k X W k X k Y k N +=)()(2(21k X W k X N k Y k N ?=+ 式中X 1(k)和X 2(k)分别是输⼊序列x(n)的偶数序号部分x(2l)和奇数序号部分x(2l+1). 以上讨论中k=0,1,2,…N/2-1, n=0,1,2,…N-1, l=0,1,2,…N/2-1 .2.雷德算法.即,将输⼊序列按下列⽅式倒序.四.实验步骤1.在CCS 环境中打开本实验的⼯程(Ex5_3.pjt),编译并重建.out 输出⽂件,然后通过仿真器把执⾏代码下载到DSP 芯⽚中.2.单击运⾏键.3.选择view>graph>time/frequency … 观察并画出输⼊波形.(设置对话框中的参数: “start address ”设为 “x_re ”, “ acquisition buffer size ” 和 “display data size ”设为 “64”,“DSP data type ”设为 “32-bit floating point ”.)4.同样⽅法观察并画出输出波形(注意: “start address ”要设为 “y_re ”).5.在Watch 窗⼝中添加i, j, k, m, n, a, b ,c 等变量,在Debug 菜单中先“Restart ” x (0)x (1)x (2)x (3)x (4)x (5)x (6)x (7)x (0)x (4)x (2)x (6)x (1)x (5)x (3)x (7)然后“Go main”,单步运⾏程序,跟踪并记录FFT 算法的过程;(可以跳过程序开始部分对各个数组的赋值代码,⽅法是在雷德算法的第⼀⾏代码前设置断点,然后先单击运⾏)后⾯的代码,见下图。
dsp实验报告实验一:CCS入门实验实验目的:1. 熟悉CCS集成开发环境,掌握工程的生成方法;熟悉SEED-DEC643实验环境; 掌握CCS集成开发环境的调试方法。
2.学习用标准C 语言编写程序;了解TI CCS开发平台下的C 语言程序设计方法和步骤; 熟悉使用软件仿真方式调试程序。
3. 学习用汇编语言编写程序; 了解汇编语言与 C 语言程序的区别和在设置上的不同;了解TMS320C6000 汇编语言程序结果和一些简单的汇编语句用法学习在CCS 环境中调试汇编代码。
4. 在了解纯C 语言程序工程和汇编语言程序工程结构的基础上,学习在C 工程中加入汇编编程的混合编程方法; 了解混合编程的注意事项;理解混合编程的必要性和在什么情况下要采用混合编程5. 熟悉CCS集成开发环境,掌握工程的生成方法; 熟悉SEED-DEC643实验环境;掌握CCS集成开发环境的调试方法。
实验原理:CCS 提供了配置、建立、调试、跟踪和分析程序的工具,它便于实时、嵌入式信号处理程序的编制和测试,它能够加速开发进程,提高工作效率。
CCS 提供了基本的代码生成工具,它们具有一系列的调试、分析能力序。
使用此命令后,要重新装载.out 文件后,再执行程序。
使用 CCS常遇见文件简介1. program.c: C 程序源文件;2. program.asm: 汇编程序源文件;3. filename.h: C 程序的头文件,包含DSP/BIOS API模块的头文件;4. filename.lib: 库文件;5. project.cmd: 连接命令文件;6. program.obj: 由源文件编译或汇编而得的目标文件;7. program.out: 经完整的编译、汇编以及连接后生成可执行文件; 8. program.map: 经完整的编译、汇编以及连接后生成空间分配文件; 9.project.wks: 存储环境设置信息的工作区文件。
P.S(CMD文件中常用的程序段名与含义1. .cinit 存放C程序中的变量初值和常量;2. .const 存放C程序中的字符常量、浮点常量和用const声明的常量;3. .text 存放C程序的代码;4. .bss 为C 程序中的全局和静态变量保留存储空间;5. .far 为C 程序中用far声明的全局和静态变量保留空间;6. .stack 为 C 程序系统堆栈保留存储空间,用于保存返回地址、函数间的参数传递、存储局部变量和保存中间结果;7. .sysmem 用于 C 程序中malloc、calloc 和 realloc 函数动态分配存储空间。
【精品】DSP实验报告一、实验目的1.探究数字信号处理器(DSP)的功能和应用。
2.熟悉DSP软件、硬件设计实验环境。
3.掌握DSP的基本编程方法。
4.实现数字信号的变换。
二、实验原理DSP是一种基于数字信号处理器的技术,是数码信号处理器技术和信号处理技术的一种应用。
DSP硬件处理器可以对数字信号进行滤波、基带处理和解调等。
DSP软件编程极为常见,可以设计各种数字信号处理算法、信号处理系统和软件运行环境。
使用DSP软件,我们可以过滤和处理模拟信号,包括声音和图像等。
三、实验器材和器件1.TMS320C5416数字信号处理器。
2.折标器。
3.信号源和信号处理器。
4.电器安全器材。
5.计算机和开发环境工具包。
四、实验步骤1.安装开发工具包,启动环境配置,并初始化DSP开发板和相关环境工具。
2.编写程序,加入滤波、处理和变换算法,提取有用信号和滤除噪声信号。
3.建立计算机接口和控制模块,并调试程序,验证结果。
五、实验结果本次实验结果如下:1.对于模拟信号输入,DSP通过滤波、变换等算法,进行信号分析和处理,有效提取信号,并消除噪声信号。
2.DSP的数字信号处理使得信号的提取和分析更加精确和高效,可以用于音频、视频、遥感等领域的处理。
3.当信号处理效果不佳时,需要调整算法和变换参数,重新调整信号滤波、变换和输出的参数,以获得更好的处理效果。
六、问题和分析在实验中,我们遇到了一些问题。
例如,信号处理的时候,出现了滤波不足,噪声信号无法完全滤除的情况。
我们通过调整算法和参数,进行重新优化,并在重新调整参数之后再次进行了测试,发现信号处理效果显著提高。
七、实验心得体会数字信号处理在现代信息技术领域是非常重要的,因此我们必须掌握DSP的理论原理和编程方法。
本次实验中,我们实际操作了DSP平台,并编写程序艇筏和优化算法,有效地提取信号,其结果是很有收获的。
通过本次实验,我们不仅学习了DSP的基本特性,还成功应用该技术处理信号数据,建立了初步的实践能力。
9. DSP开发基础实验9.1 实验目的1. 了解DSP开发系统的基本配置2. 熟悉DSP集成开发环境(CCS)3. 掌握C语言开发的基本流程4. 熟悉代码调试的基本方法9.2 实验仪器计算机,C2000 DSP教学实验箱,XDS510 USB仿真器9.3 实验内容建立工程,对工程进行编译、链接,载入可执行程序,在DSP硬件平台上进行实时调试,利用代码调试工具,查看程序运行结果。
9.4 实验准备CCS 2(C2000)这一集成开发环境,不仅支持汇编的编译、链接,还支持对C/C++汇编、编译、链接以及优化。
同时强大的IDE开发环境也为代码的调试提供了强大的功能支持,已经成为TI 各DSP系列的程序设计、制作、调试、优化的主流工具。
TMS320C28x软件开发流程如图9.1所示。
下面简单介绍各主要模块功能。
• C/C++ Compiler(C/C++编译器)C/C++编译器把C/C++程序自动转换成C28x的汇编语言源程序。
这种转换并非一一对应,甚至会产生冗余的汇编代码,在某些场合需要使用优化器(Optimizer)来提高转换的效率,使得汇编代码长度尽可能的短小,程序所使用的资源尽可能的少。
优化器是编译器的一部分。
• Assembler(汇编器)汇编器负责将汇编源程序转换为符合公共目标格式(COFF)的机器目标代码,这种转换是一一对应的,每一条汇编指令都对应了唯一的机器代码。
源文件中还包括汇编指令、伪指令和宏指令。
• Linker(链接器)链接器负责把可重定位的多个目标文件和目标库文件转换为一个DSP可执行程序。
链接器必须依赖配置命令文件(CMD)的指令,实现对目标文件中各段的定位。
• Run-time-support library(运行支持库)对于用C/C++语言中编写DSP程序中的某些功能(例如存储器的寻址定位、字符串转换等)并不属于C/C++语言所能描述对象,包含在C/C++编译器中的运行支持库却可以很好的支持这些算法的标准ANSI/ISO C函数描述。
函数运行支持库包含有ANSI/ISO C的标准运行支持库函数、编译器功能函数、浮点算术函数和系统初始化子程序(这些函数都集成在汇编源文件rts.src中)。
当对C/C++编写的DSP程序进行链接时,必须根据不同型号的DSP 芯片添加相应的运行支持库到工程中。
除此之外,在使用运行支持库中的函数时,必须在程序起始处用include语句包含相应的头文件(如使用数学运算sin、cos时,必须包含math.h)。
而采用汇编语言编写程序时,却不需要这个运行支持库。
因此C语言编写的DSP程序链接后,会产生大量的“冗余”汇编程序。
由此可见,用C/C++语言来开发DSP程序,一般在工程中必须包含以下文件:• .c或者.cpp:C或C++程序,是主程序或函数,用于描述用户特定的算法功能;• .cmd:配置命令文件,用于对编译生成的COFF格式目标文件(.obj)定位,安排各段的物理存储空间;• .lib:运行支持库文件,不同芯片有不同的运行支持库,必须根据具体芯片加以选择,(后缀ml含义是large 例如TMS320C28x的运行支持库文件命为rts2800.lib或rts2800_ml.lib。
memory model,由于C/C++默认的寻址空间为64K,而TMS320C28x地址范围可达4M,由此如果要访问高于64K的空间,必须在工程中添加rts2800_ml.lib)。
至于头文件(.h),只有当使用了运行支持库中相应的函数时,才需要在C文件的主程序中用include语句指定相应的头文件(math.h、stdlib.h、float.h等)。
具体内容参见TI公司的TMS320C28x Optimizing C/C++ Compiler User's Guide。
其次用户自定义函数、寄存器地址、常量定义等信息也可以编制到头文件中,使用时也同样需要在C主程序中指定。
例如本实验中,需要的文件:• sine.c:C语言主程序。
• sinewave.cmd:配置命令文件。
• rts2800_ml.lib:运行支持库。
• Sine.h:常量定义头文件。
• sine.dat:实验中需要的数据文件。
对于使用CCS以工程为单位进行DSP程序的项目开发时,一般为每个工程建立一个独立的目录,将项目中所需要的文件都存放在该工程目录下,便于程序的管理。
rts2800_ml.lib 在TI的安装目录…\TI\c2000\cgtools\lib中可以找到。
1.5 实验步骤1. 设备检查检查仿真器、C2000 DSP实验箱、计算机之间的连接是否正确,打开计算机和实验箱电源。
2. 启动集成开发环境点击桌面CCS 2(C2000)快捷方式,启动CCS。
若硬件连接正确,实验箱电源被正确加载,则可以进入集成开发环境CCS,并在CCS软件的标题栏显示“/F28xx XDS510 Emulator / CPU_1 – 28xx – Code Composer Studio”。
如果CCS2 SETUP设置错误或者DSP电源没有正确加载,则会显示错误对话框,无法进入CCS Emulate模式。
3. 新建工程在主菜单中单击“Project → New”命令,弹出“Project Creation”对话框。
在第一项Project Name中输入新建的工程名称,在第二项Location中选择工程所在目录,第三项Project Type中选择输出文件格式“Executable(.out)”,在第四项Target Family中选择与当前DSP 芯片吻合的TMS320C28XX。
单击“完成”按钮确定。
则在工程指定的目录中,建立了一个以工程命名的工程文件(.pjt),它会存储有关该工程的所有设置。
4. 添加工程文件在主菜单中单击“Project → Add Files to Project”命令,在弹出的对话框中依次选择当前工程目录下sine.c、sinewave.cmd以及rts2800_ml.lib文件,添加到当前工程中。
在工程浏览窗口中,展开工程文件列表,可看到刚刚所添加的文件。
头文件(.h)不用专门人工指定添加,在后续的build工程时,CCS会自动完成关联文件的扫描,自动添加到工程中。
如果错误的添加了文件,可以在工程浏览窗口中的文件名中单击鼠标右键,在弹出的菜单中选择“Remove from project”。
当然,CCS也支持文件编辑功能,可以在主菜单选择“File → New”新建一个文件,编辑完成保存为所需要相应格式的C语言程序、汇编程序、cmd配置命令或者头文件,然后添加到工程中。
5. 查阅代码在build工程之前,先阅读一下源代码,明白各文件的内容:鼠标双击工程浏览窗口里的“sine.c”文件,即可在CCS的编辑窗口看到c程序的源代码,代码中有以下四个部分:• Disable_WD( )函数,禁止TMS320F2812内部的看门狗工作;• 在主函数输出消息“SineWave example started”之后,进入一个无限循环,在循环体内调用了两个函数dataIO( )和processing( )。
• 函数dataIO( )在本实验中,DSP不作任何实际操作而直接返回。
• 函数processing( )对输入缓冲区的每个数据进行增益控制,并将结果存入输出缓冲区中。
6. 建立工程(Build工程)建立工程(build)是指对asm、c源程序文件进行编译(Compile)、汇编(Assemble),并结合配置命令文件对工程进行链接(Link),输出可执行程序(.out)。
该命令在主菜单“Project → Build (Build All)”中。
生成的可执行.out程序位于工程目录的debug子目录下。
这三个步骤也可以手工分步执行,比如对源程序Compile会生成COFF格式的目标文件(.obj),然后用build命令完成链接。
对工程文件中的语法或是链接错误,CCS会终止当前的build,在底部消息窗口指示出程序包含的编译链接错误,或是警告信息。
根据错误提示修改源程序文件或者配置命令文件,直至编译链接正确。
以上的工作称为目标代码生成。
9. 加载程序当工程被正确建立以后,只有将程序通过仿真器下载到DSP芯片上,才能够进行实时的代码调试。
在主菜单下,选择“File → Load Program”,选中该工程的输出可执行.out程序即可。
CCS装载程序完毕以后,会自动弹出“Disassembly”窗口,显示构成源代码的反汇编指令。
10. 程序的运行对C语言编写的程序,载入程序以后,DSP的程序计数器(PC)会自动指向_c_int00,这是C程序链接以后的入口地址(在反汇编窗口上有一个绿色箭头标识)。
它是运行支持库自动在用户C程序之前添加的一段初始化程序。
如果想让程序计数器指向C语言的起始处,在菜单中选择“Debug → Go Main”命令,让程序从主函数开始执行(在源程序窗口有一个黄色箭头标识)。
倘若想同时看到C语言代码和对应编译生成的编译代码,在主菜单“View → Mixed Source/ASM”,浅灰色部分显示的就是汇编指令。
可见一条C语言命令对应了很多条汇编指令,这是由于C语言的每一条语句并不是对应了DSP内部的硬件动作,C语言不适合描述DSP底层的硬件机制。
在主菜单中选择“Debug → Run”,可以让DSP全速运行,由于DSP程序输出并不具备GUI界面,由此执行结果只有依赖外部硬件或者查看寄存器、存储器的数值加以验证。
在主菜单选择“Debug → Halt”命令,可以停止程序的执行。
DSP指令的执行严格按照指令流的顺序。
当想再次运行程序,可以执行菜单命令“Debug → Restart”,使PC重新指向_c_int00,也可以重新加载程序。
当执行菜单命令“Debug → Reset CPU”时,DSP复位,内部寄存器恢复默认值,PC指向中断矢量表的复位向量处。
11. 程序的调试在程序的开发与测试过程中,常常需要检查某个变量、或者是存储器的数值在程序运行过程中变化情况,这就需要停止程序执行,用断点与观察窗口等方式来验证数值的正确性。
这就是DSP目标代码的调试。
添加结构体变量currentBuffer到变量观察窗口,观察currentBuffer.output和currentBuffer.input的地址以及数值。
添加dataIO( )到变量窗口,查看该子程序的入口地址。
在dataIO( )处设立探针,关联输入文件sine.dat,设置数据加载的起始地址为currentBuffer.input,长度为128。
打开图形显示功能,查看存储空间currentBuffer.input和currentBuffer.output的时域波形。