dsp实验报告 2
DSP实验报告

DSP技术及应用实验报告(第二次)实验名称:1、CMD文件和Gel文件的编写2、正弦信号发生器班级:08级通信工程二班姓名:周卫星学号:2008550726指导老师:姚志强实验三、CMD文件和Gel文件的编写一、实验目的1. 掌握Gel文件的编写,2. 熟悉Code Composer Studio的使用二、实验设备1. 集成开发环境CCS2. 实验代码ccs_gel.s54、ccs_gel.cmd和ccs_gel.gel三、实验内容及结果1、建立项目并添加相应文件,连接编译(步骤同实验二一样),双击打开CMD 文件,对照教材理解CMD文件的编写结构,改变其中的内容,增加自定义段,保存并重新编译,比对前后两次编译得到的Map文件的异同。
/*Memory Directive,是对用户目标DSP储存空间说明。
用户可配置储存空间的页数、长度、起始点、名称等*/MEMORY {PAGE 0:VECS: org=0x0080, len=0x80PROM: org=0x1000, len=0x1000 /* 4k words */PAGE 1:STACK: o rg=0x100, len=0x400 /* 1k words */DARAM: org=0x2000, len=0x1000 /* 4k words */}/*以下为Sections Directive,是对程序中段的配置说明,也就是将程序中所用到的段配置到用户在Memory Directive所定义的memory单元。
*/SECTIONS{ .text:> PROM PAGE 0vectors :> VECS PAGE 0.bss :> DARAM PAGE 1.data :> DARAM PAGE 1}修改,在SECTIONS中最后一行加入了如下行:.lab :> DARAM PAGE1通过比较,修改后相对修改前多出了如下行:.lab 1 00002000 00000000 UNINITIALIZED2、了解GEL文件的功能。
dsp原理与应用实验报告总结

dsp原理与应用实验报告总结DSP(Digital Signal Processing)数字信号处理是利用数字技术对信号进行处理和分析的一种方法。
在本次实验中,我们探索了DSP的原理和应用,并进行了一系列实验以验证其在实际应用中的效果。
以下是对实验结果的总结与分析。
实验一:数字滤波器设计与性能测试在本实验中,我们设计了数字滤波器,并通过性能测试来评估其滤波效果。
通过对不同类型的滤波器进行设计和实现,我们了解到数字滤波器在信号处理中的重要性和应用。
实验二:数字信号调制与解调本实验旨在通过数字信号调制与解调的过程,了解数字信号的传输原理与方法。
通过模拟调制与解调过程,我们成功实现了数字信号的传输与还原,验证了调制与解调的可行性。
实验三:数字信号的傅里叶变换与频谱分析傅里叶变换是一种重要的信号分析方法,可以将信号从时域转换到频域,揭示信号的频谱特性。
本实验中,我们学习了傅里叶变换的原理,并通过实验掌握了频谱分析的方法与技巧。
实验四:数字信号的陷波滤波与去噪处理陷波滤波是一种常用的去除特定频率噪声的方法,本实验中我们学习了数字信号的陷波滤波原理,并通过实验验证了其在去噪处理中的有效性。
实验五:DSP在音频处理中的应用音频处理是DSP的一个重要应用领域,本实验中我们探索了DSP在音频处理中的应用。
通过实验,我们成功实现了音频信号的降噪、均衡和混响处理,并对其效果进行了评估。
实验六:DSP在图像处理中的应用图像处理是另一个重要的DSP应用领域,本实验中我们了解了DSP在图像处理中的一些基本原理和方法。
通过实验,我们实现了图像的滤波、边缘检测和图像增强等处理,并观察到了不同算法对图像质量的影响。
通过以上一系列实验,我们深入了解了DSP的原理与应用,并对不同领域下的信号处理方法有了更深刻的认识。
本次实验不仅加深了我们对数字信号处理的理解,也为日后在相关领域的研究与实践提供了基础。
通过实验的结果和总结,我们可以得出结论:DSP作为一种数字信号处理的方法,具有广泛的应用前景和重要的实际意义。
北邮 DSP 实验二实验报告

实验二:数字信号的 FFT 分析题目1假设信号 x(n) 由下述信号组成:()0.001*cos(0.45)sin(0.3)cos(0.302)4x n n n n ππππ=+-- 这个信号有两根主谱线 0.3pi 和 0.302pi 靠的非常近,而另一根谱线 0.45pi 的幅度很小,请选择合适的长度 N 和窗函数,用 DFT 分析其频谱,得到清楚的三根谱线。
步骤:1.编写离散傅里叶变换DFT 函数:function [Xk] = dft(xn,N)% Computes Discrete Fourier Transform Coefficients% [Xk] = dft(xn,N)% Xk = DFT coeff. array over 0 <= k <= N-1% xn = input signal% N = length of DFTn = [0:1:N-1]; % row vector for nk = [0:1:N-1]; % row vecor for kWN = exp(-j*2*pi/N); % Wn factornk = n'*k; % creates a N by N matrix of nk valuesWNnk = WN .^ nk; % DFT matrixXk = xn * WNnk; % row vector for DFT coefficients2.代码实现:n=0:1:999;x=0.001*cos(0.45*n*pi)+sin(0.3*n*pi)-cos(0.302*n*pi-0.25*pi);stem(n,x);title('signal x(n), 0<=n<=999');xlabel('n');X=dft(x,1000);% 计算1000点DFT magX=abs(X(1:1:501));% 镜像对称,只画出一半 k=0:1:500;w=2*pi*k/1000;stem(w/pi,magX);title('DTFT Magnitude');xlabel('frequency in pi units');axis([0.29,0.31,0,500]);xlabel('frequency between 0.29pi and 0.31pi');axis([0.44,0.46,0,0.5]);xlabel('frequency between 0.44pi and 0.46pi');3.图片:4.分析:x(n)由3个正弦函数叠加而成,周期分别是40, 20, 1000。
DSP实验报告定时器2

实验二DSP系统定时器的使用一、实验目的:1、掌握5402 DSP片上定时器的初始化设置及应用;2、掌握DSP系统中实现定时的原理及方法;3、了解5402 DSP中断寄存器IMR、IFR的结构和使用;4、掌握5402 DSP系统中断的初始化设置过程和方法;5、掌握在C语言中嵌入汇编语句实现数字I/O的方法。
二、实验原理:1、定时器及其初始化在5402内部包括两个完全相同的定时器:定时器0和定时器1。
每个定时器分别包括3个寄存器:定时器周期寄存器PRD、定时器寄存器TIM、定时器控制寄存器TCR,其中TCR 寄存器中包括定时器分频系数TDDR、定时器预分频计数器PSC两个功能寄存器。
通过PRD 和TDDR可以设置定时器的初始值,TIM(16bits)和PSC(4bits)是用于定时的减法计数器。
CLKOUT是定时器的输入时钟,最大频率为100Mhz。
定时器相当于20bit的减法计数器。
定时器的结构如图1所示。
图1 定时器的组成框图定时器的定时周期为:CLKOUT×(TDDR+1)×(PRD+1)其中,CLKOUT为时钟周期,TDDR和PRD分别为定时器的分频系数和时间常数。
在正常工作情况下,当TIM减到0后,PRD中的时间常数自动地加载到TIM。
当系统复位或者定时器单独复位时,PRD中的时间常数重新加载到TIM。
同样地,每当复位或PSC减到0后,定时器分频系数TDDR自动地加载到PSC。
PSC在CLKOUT作用下,作减1计数。
当PSC 减到0时,产生一个借位信号,令TIM作减l计数。
TIM减到0后,产生定时中断信号TINT,传送至CPU和定时器输出引脚TOUT。
例如:欲设置定时器0的定时周期为1ms,当DSP工作频率为100Mhz时,通过上式计算可得出:TDDR=15,PRD=6520。
2、定时器的使用下面是一段定时器应用程序,每检测到一次中断,ms+1,利用查询方式每计500个数就令XF引脚的电平翻转一次,在XF引脚输出一矩形波信号,因定时器1ms中断一次,故500ms就使LED翻转一次,这样LED指示灯就不停地闪烁。
DSP第二次实验报告

DSP实验报告(第二次实验)实验四、正弦信号发生器学院:信息工程学院班级:11级通信工程3班姓名:李慧学号:2011551309指导老师:姚志强完成日期:2014.4.12验四、正弦信号发生器一、 实验目的1. 掌握利用DSP 产生正弦信号的原理2. 熟悉子程序调用的程序结构以及堆栈的使用3. 掌握CCS 的图形输出操作二、 实验设备1. 集成开发环境Code Composer Studio (简称CCS )2. 实验代码Sin.s54、Lab.cmd 和Lab.gel三、实验内容1. 阅读理解多项式逼近正弦的文档2. 阅读和理解Sin.s543. 调试正弦波发生器4. 加入断点,并选取图形观测,利用动画及时更新5. 试利用迭代的方法来实现正弦信号发生器四、实验结果和提示1.2345sin()= 3.140625 + 0.02026367 - 5.325196 + 0.5446778 + 1.800293x x x x x x ,x 为第一象限内的弧度值。
因为sin()sin(),sin()sin()x x x x π-=-=-,所以只需将第二,三,四象限内的弧度值转换到第一象限即可计算出相应的正弦函数值。
由于有限精度,规定弧度值从~ππ-,其中π=0x7FFF ,π/2=0x4000,π-=0x8000。
利用级数展开产生正弦波,必须在调用计算子程序之前备份好累加器A 中的当前弧度值,以便计算结束后实现x 增量。
正弦波的频率可以通过增幅的大小来进行控制,如果假定程序循环一次为一个时间单位,则正弦波的周期为65536/步长,频率为周期倒数。
x 自动增长时要注意当x 超过π后必须调整到~ππ-的范围内才能调用计算子程序,即若,2x x x ππ>=-则。
2. 需要使用临时数据时,必须用frame 语句留出所需空间,使用结束后要将堆栈指针还原以防堆栈内存泄漏。
要注意的是frame 的下一条指令不能使用直接寻址。
DSP实验报告(二)

DSP实验报告(二)实验二应用FFT对信号进行频谱分析一、实验目的1、在理论学习的基础上,通过本次实验,加深对快速傅里叶变换的理解,熟悉FFT算法及其程序的编写。
2、熟悉应用FFT对典型信号进行频谱分析的方法。
3、了解应用FFT进行信号频谱分析过程中可能出现的问题,以便在实际中正确应用FFT。
二、实验原理与方法①一个连续信号的频谱可以用它的傅立叶变换表示为+ Xa(jW)=-jWtx(t)edtòa-如果对该信号进行理想采样,可以得到采样序列x(n)=xa(nT)同样可以对该序列进行z变换,其中T为采样周期X(z)=+ x(n)z-n+ -令z为ejw,则序列的傅立叶变换X(ejw)=x(n)ejwn-其中ω为数字频率,它和模拟域频率的关系为w=WT=W/fs式中的是采样频率。
上式说明数字频率是模拟频率对采样率的归一化。
同模拟域的情况相似。
数字频率代表了序列值变化的速率,而序列的傅立叶变换称为序列的频谱。
序列的傅立叶变换和对应的采样信号频谱具有下式的对应关系。
1X(e)=Tjw+ - w-2pXa(j)T即序列的频谱是采样信号频谱的周期延拓。
从式可以看出,只要分析采样序列的谱,就可以得到相应的连续信号的频谱。
注意:这里的信号必须是带限信号,采样也必须满足Nyquist定理。
在各种信号序列中,有限长序列在数字信号处理中占有很重要的地位。
无限长的序列也往往可以用有限长序列来逼近。
有限长的序列可以使用离散傅立叶变换。
当序列的长度是N时,定义离散傅立叶变换为:X(k)=DFT[x(n)]=其中W=e2pj-NN-1n=0WNkn它的反变换定义为:1x(n)=IDFT[X(k)]=N根据式和,则有N-1n=0X(k)WNknX(z)|z=Wnk=NN-1n=0x(n)WNnk=DFT[x(n)]j2pN可以得到X(k)2pk的点,就NN是将单位圆进行N等分以后第k个点。
所以,X(k)是z变换在单位圆上的等距采样,或者说是序列傅立叶变换的等距采样。
DSP技术 实验二报告模板

《DSP技术》课程实验报告学生姓名:所在班级:指导教师:记分及评价:一、实验名称:拨码开关实验二、实验目的了解DSP开发系统的组成和结构;了解IO的基本编程方法三、实验内容修改例子程序,实现以下功能:(1)调试例子程序,理解程序设计思想;(2)修改例子程序,实现每个拨码开关控制一种不同的LED花样显示。
(3)实现LED流水灯的功能,并且实现由拨码开关键值控制LED流水灯的频率(按键值与LED流水灯频率关系自定义,至少提供两种不同的LED流水灯变化的频率)(加分)四、实验程序与结果分析void Delay(int n){int i=0,j;for(j=0; j<n; j++)for(i=0;i<1000;i++);}void main(void){unsigned int temp,m;unsigned int temp1[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};temp = 0;InitSysCtrl();//初始化PLL,WatchDog,使能外围时钟,该初始化文件在"DSP281x_SysCtrl.c"中DINT;//关闭CPU中断// Initialize PIE control registers to their default state.// The default state is all PIE interrupts disabled and flags// are cleared.InitPieCtrl();IER = 0x0000;//关闭中断和清除所有中断标志IFR = 0x0000;// Initialize the PIE vector table with pointers to the shell Interrupt // Service Routines (ISR).InitPieVectTable();for(;;){asm(" nop ");temp = *(int *)0x2200&0x00ff;switch(temp){case 0xfe: * (int *)0x2200 = temp1[0];break;case 0xfd: * (int *)0x2200 = temp1[1];break;case 0xfb: * (int *)0x2200 = temp1[2];break;case 0xf7: * (int *)0x2200 = temp1[3];break;case 0xef: * (int *)0x2200 = temp1[4];break;case 0xdf: * (int *)0x2200 = temp1[5];break;case 0xbf: * (int *)0x2200 = temp1[6];break;case 0x7f: * (int *)0x2200 = temp1[7];break;}asm(" nop ");if(temp==1){for(m=0; m<8; m++){Delay(1200);* (int *)0x2200 = ~(1<<m);Delay(200);}}if(temp==3){for(m=0; m<8; m++){Delay(800);* (int *)0x2200 = ~(1<<m);Delay(100);}}//temp值输出0x2200地址的LED灯asm(" nop ");}}五、小结通过这次试验让我明白不同模块可以共用同一个地址,这应该是时分复用的功劳吧,其次0x200这地址允许读写操作,这次的试验箱改变以往地址低位在后的设计应该是别出心裁的,目的应该是考验学生对地址的理解。
dsp实验报告

dsp实验报告DSP实验报告一、引言数字信号处理(Digital Signal Processing,DSP)是一种对数字信号进行处理和分析的技术。
它在许多领域中被广泛应用,如通信、音频处理、图像处理等。
本实验旨在通过实际操作,探索和理解DSP的基本原理和应用。
二、实验目的1. 理解数字信号处理的基本概念和原理;2. 掌握DSP实验平台的使用方法;3. 进行一系列DSP实验,加深对DSP技术的理解。
三、实验器材和软件1. DSP开发板;2. 电脑;3. DSP开发软件。
四、实验内容1. 实验一:信号采集与重构在此实验中,我们将通过DSP开发板采集模拟信号,并将其转换为数字信号进行处理。
首先,我们需要连接信号源和开发板,然后设置采样频率和采样时间。
接下来,我们将对采集到的信号进行重构,还原出原始模拟信号,并进行观察和分析。
2. 实验二:滤波器设计与实现滤波器是DSP中常用的模块,用于去除或增强信号中的特定频率成分。
在此实验中,我们将学习滤波器的设计和实现方法。
首先,我们将选择合适的滤波器类型和参数,然后使用DSP开发软件进行滤波器设计。
最后,我们将将设计好的滤波器加载到DSP开发板上,并进行实时滤波处理。
3. 实验三:频谱分析与频域处理频谱分析是DSP中常用的方法,用于分析信号的频率成分和能量分布。
在此实验中,我们将学习频谱分析的基本原理和方法,并进行实际操作。
我们将采集一个包含多个频率成分的信号,并使用FFT算法进行频谱分析。
然后,我们将对频谱进行处理,如频率选择、频率域滤波等,并观察处理后的效果。
4. 实验四:音频处理与效果实现音频处理是DSP中的重要应用之一。
在此实验中,我们将学习音频信号的处理方法,并实现一些常见的音频效果。
例如,均衡器、混响、合唱等。
我们将使用DSP开发软件进行算法设计,并将设计好的算法加载到DSP开发板上进行实时处理。
五、实验结果与分析通过以上实验,我们成功完成了信号采集与重构、滤波器设计与实现、频谱分析与频域处理以及音频处理与效果实现等一系列实验。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验二一、实验目的掌握DSP串口通信和传感器的使用二、实验内容串行通信实验+温湿度传感显示+LCD显示1、调试好串行通信能实现通信;2、温湿度传感的LCD显示;3、新建工程;4、将温湿度数据通过串行接口显示给PC机(扩展)。
三、实验过程:温湿度传感的LCD显示:1、实验接线:2、打开工程,将程序加载运行,使结果在LCD屏上显示3、运行程序,实验结果如图所示:串行传输:1、打开工程,将程序加载运行;2、打开调试软件,查看驱动的端口号,本台机器为端口3,故将调试软件第一行设置为COM3;3、将串口波特率调为9600;4、点击打开串口后,就可以在发送区输入想发送的内容,点击手动发送便可显示出结果。
注意:每次只能发送一个字符串。
实验结果如图所示:1、点击FILE\NEW\CCS PROJECT:2、输入工程名:3、选择C2000:4、选择处理器型号:5、工程建立完毕:6、在工程建立完毕后,要新建目标配置,先输入文件名:7、之后进行仿真器和处理器配置,配置完毕后点击保存:8、配置好工程后,需要对工程进行设置:9、需要添加以下路径:10、设置栈空间大小:点击OK完成工程配置,之后就可自行进行程序的编译工作了。
选做:将LED显示屏上,温湿度传感器测得的结果通过串行传输显示在电脑显示屏上。
程序清单:#include "DSP2833x_Device.h"#include "DSP2833x_Examples.h"void Scimod_init(void);void Sendmsg(char *msg);void scib_xmit(int a);void sendintmsg(Uint16 intmsg);typedef enum {ERR = 0,OK}RESULT;typedef struct {Uint16 HumiH:8;Uint16 HumiL:8;Uint16 TempH:8;Uint16 TempL:8;RESULT flag;}Obj_Sensor;Uint16 Temp[]={0,0,0,0,0};#define DATA GpioDataRegs.GPBDAT.bit.GPIO50/*******关于后面\\的问题,此部分尝试重写*******/#define Data_O EALLOW; \GpioCtrlRegs.GPBDIR.bit.GPIO50 = 1; \EDIS;#define Data_I EALLOW; \GpioCtrlRegs.GPBDIR.bit.GPIO50 = 0; \EDIS;void Read_Temp(Uint16 * pot){Uint16 a=0,b,x;Uint16 Time_out=0;for(;a<5;a++){ //0for(b=0;b<8;b++){ //1while(!DA TA); //等待拉高DELAY_US(30); //waiting 30usx = 0;if(DATA) x = 1;Time_out = 2;while(DATA && Time_out++); //数据变为0或者超时可以结束该whileif(Time_out == 1) break; //已经超时跳出循环(* pot) <<= 1;if(x) (* pot)++;} //1pot++;} //0}Obj_Sensor GET_Dev(void){Obj_Sensor Obj_x;Uint16 u=0, sum=0;Data_O; //配置为输出DA TA = 0;DELAY_US(20000); //拉低延时18msDA TA = 1;DELAY_US(40); //拉高延时20-40usData_I; //配置为输入Obj_x.flag = ERR;if(DA TA == 0){ //DHT11发送响应拉低80us while(!DATA); //等待拉高while(DATA); //等待拉低Read_Temp(Temp);for(;u<4;u++)sum += Temp[u];Obj_x.HumiH = Temp[0];Obj_x.HumiL = Temp[1];Obj_x.TempH = Temp[2];Obj_x.TempL = Temp[3];if(sum != Temp[4]) //校验和Obj_x.flag = ERR;elseObj_x.flag = OK;}return Obj_x;}void main(void){char *msg;Obj_Sensor o;int a,b,c,d,e,f,g,h;/******初始化*******/InitSysCtrl();DINT;InitPieCtrl();IER = 0x0000;IFR = 0x0000;InitPieVectTable();InitScibGpio();InitXintf16Gpio();//???/******结束*******/Scimod_init();do{o = GET_Dev();DELAY_US(1000000);}while( o.flag != OK);a=(o.HumiH/10)+48;b=(o.HumiH%10)+48;c=(o.HumiL/10)+48;d=(o.HumiL%10)+48;e=(o.TempH/10)+48;f=(o.TempH%10)+48;g=(o.TempL/10)+48;h=(o.TempL%10)+48;msg = "\r\n当前教室湿度为\0";Sendmsg(msg);scib_xmit(a);scib_xmit(b);msg = ".";Sendmsg(msg);scib_xmit(c);scib_xmit(d);msg="%RH";Sendmsg(msg);msg = "\r\n温度为\0";Sendmsg(msg);scib_xmit(e);scib_xmit(f);msg =".";Sendmsg(msg);scib_xmit(g);scib_xmit(h);msg="℃";Sendmsg(msg);}void Scimod_init(){ScibRegs.SCICCR.all = 0x07;ScibRegs.SCICTL1.all = 0x03;ScibRegs.SCICTL2.all =0x0003;ScibRegs.SCICTL2.bit.TXINTENA = 1;ScibRegs.SCICTL2.bit.RXBKINTENA =1;#if(CPU_FRQ_150MHZ)ScibRegs.SCIHBAUD = 0x01; //LSPCLK = 37.5MHzScibRegs.SCILBAUD = 0xE7;#endif#if(CPU_FRQ_100MHZ)ScibRegs.SCIHBAUD = 0x01; //LSPCLK = 20MHz?????ScibRegs.SCILBAUD = 0x44;#endifScibRegs.SCICTL1.all = 0x23;}void scib_xmit(int a){while(ScibRegs.SCICTL2.bit.TXRDY == 0){}ScibRegs.SCITXBUF = a;}void Sendmsg(char *msg){int i;i = 0;while(msg[i]!='\0')//??'',msg[i]???{scib_xmit(msg[i]);i++;}}void sendintmsg(Uint16 intmsg){while(ScibRegs.SCICTL2.bit.TXRDY == 0){}ScibRegs.SCITXBUF = intmsg;}程序分析:本部分程序初始化部分与原程序相同,先定义了4个结构数组,接着定义了Read_Temp,Scimod_init,scib_xmit,Sendmsg,sendintmsg等函数,用来传送字符串。
在主程序中,先对系统进行初始化,接着分别通过串口将LCD上的温湿度传送到屏幕上,在传送过程中药注意时钟的配合关系。
实验结果如图所示:四、注意事项:1、实验接线过程中要注意端口的一一对应,应仔细检查后再将导线接上;2、在串口调试的过程中必须注意波特率的对应,否则将收不到数据。
3、选作部分本小组另外编写了一个程序,但是在程序确定无误后,始终无法编译通过,软件提示为缺少变量定义,反复检查也没找出原因,只能之后与老师做进一步讨论。
因而在编写程序过程中,一定要考虑仔细,争取一遍通过,否则检错过程将十分困难,有时调试花去的时间将超过写程序所花费的时间。
五、实验总结第二次实验,在将CCS开发环境重新练习,并进一步熟悉新工程的建立过程,虽然感觉很复杂,但在助教老师的耐心指导下,自己最终也能顺利的建立工程。
实验中将已经在example中的测温湿度并显示的程序加载运行,很顺利的完成并在LCD上显示了出来,而打开串行通信调试是在老师的指导下进行的,改变了几个参数后,就可以发送和显示,但都是在电脑上,后来修改程序,但并没有成功的将LCD屏上的温湿度通过串行通信显示在电脑上。