dsp实验报告1.docx

上传人:b****7 文档编号:9411792 上传时间:2023-02-04 格式:DOCX 页数:19 大小:357.06KB
下载 相关 举报
dsp实验报告1.docx_第1页
第1页 / 共19页
dsp实验报告1.docx_第2页
第2页 / 共19页
dsp实验报告1.docx_第3页
第3页 / 共19页
dsp实验报告1.docx_第4页
第4页 / 共19页
dsp实验报告1.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

dsp实验报告1.docx

《dsp实验报告1.docx》由会员分享,可在线阅读,更多相关《dsp实验报告1.docx(19页珍藏版)》请在冰豆网上搜索。

dsp实验报告1.docx

dsp实验报告1

DSP实验报告

 

小组杜筱佳0904210204

薛茜茜0904210215

学院电子工程与光电技术学院

班级0904210204

指导老师刘明

实验日期2012.11——2012.12

 

实验一DSP开发基础

一、实验目的

1、了解DSP开发系统的基本配置

2、掌握DSP集成开发环境(CCS)

3、掌握C语言开发的基本流程

4、熟悉代码调试的基本方法

二、实验仪器

计算机,C2000DSP教学实验箱,XDS510USB仿真器,示波器

三、实验内容

建立工程,对工程进行编译、链接,载入可执行程序,在DSP硬件平台上进行实时调试,利用代码调试工具,查看程序运行结果

四、实验要求及实验结果

1、项目的编译、链接、调试

2、dataIO()子程序入口地址0x003F81F5

processing()子程序入口地址0x003F81DB

currentBuffer.input所在存储器地址0x008480

currentBuffer.output所在存储器地址:

0x008500

3、图形方式显示数据空间currentBuffer.input和current.Buffer.output缓冲存储区的波形

currentBuffer.input:

图1.1

 

currentBuffer.output:

图1.2

4、.map文件中,

.text段在存储空间的地址003f8000长度0000012b;位于TMS320F2812程序存储空间,物理存储块名称H0_PM

.data段在存储空间的地址00000040长度00000001;位于TMS320F2812数据存储空间,物理存储块名称M0_RAM

.bss段在存储空间的地址00000000长度00000000;

 

实验二任意信号发生器

一、实验目的

1、熟悉DSP硬件开发平台

2、熟悉DSP集成开发环境(CCS)

3、熟悉TMS320F2812的存储器配置表

4、学习DMS320F2812的编程开发

5、熟悉代码调试的基本方法

二、实验仪器

计算机,C2000DSP教学实验箱,XDS510USB仿真器,示波器

三、实验内容

建立工程,编写DSP主程序,并对工程进行编译、链接,利用现有DSP平台实现任一

波的产生,通过示波器观察结果。

 

四、实验要求与结果

1、独立完成项目编译、链接、调试的全过程。

2、利用数码显示管,在DSP初始化子模块后调节语句或者编写自程序,使之能够显示实验日期。

添加的C语句:

#defineCHAR_00X3F

#defineCHAR_10X06

#defineCHAR_40X66

#defineCHAR_50X6D

LED初始化改为、;

/*初始化LED*/

//LED8

*LED8=CHAR_5;

//LED7

*(LED8+0x100)=CHAR_1;

//LED6

*(LED8+0x200)=CHAR_4;

//LED5

*(LED8+0x300)=CHAR_0;

//LED4

*(LED8+0x400)=CHAR_2;

//LED3

*(LED8+0x500)=CHAR_1;

//LED2

*(LED8+0x600)=CHAR_2;

//LED1

*(LED8+0x700)=CHAR_4;

//WIRTEDATATOLED

*(LEDWR)=0XFF;

这样显示屏显示结果为:

42120415

3、波形数据保存的空间地址:

RamAddr0X00100000

 

图形方式显示线性调频信号的波形:

图2.1

 

实验三DSP数据采集

1、实验目的

1、熟悉DSP的软硬件开发平台

2、掌握TMS320F2812的ADC外设的使用

3、熟悉TMS320F2812的中断的设置

4、掌握代码调试的基本方法

2、实验仪器

计算机,C2000DSP教学实验箱,XDS510USB仿真器,示波器,信号源

3、实验内容

建立工程,编写DSP的主程序,并对工程进行编译、链接,利用现有DSP平台实现数据采集、存储以及模拟还原,通过图标以及示波器观察结果。

四、实验要求与结果

1、独立完成项目编译、链接、调试的全过程

2、根据提示程序,给出ADC的采样频率计算公式,改写源程序中,修改ADC的采样频率

源程序中EvaRegs.T1CON.bit.TPS=7;//设置定时器时钟频率为HSPCLK/128;

改变后EvaRegs.T1CON.bit.TPS=6;//设置定时器时钟频率为HSPCLK/64;原来的采样率为9.3k,调整后变为20k左右。

3、波形数据保存的空间地址

由于在该实验中任意设置了一个数组存放(intdatasum[1024];),用datasum[i]=(AdcRegs.ADCRESULT0)+0x8000来存放;其空间自动分配为0x003F9040

 

图形方式显示采集的信号波形

图3.2

4、验证采样频率的方法

将输出端连接到示波器上,调节好波形,观察波形每个中期内的取点个数,一般来说,取多少个点就意味着多少K的采样频率。

五、实验思考

1、观察输入信号与示波器显示信号、存储器存储波形信号幅度的差异,解释差异产生的原因。

2、除了上述粗略验证ADC采样频率以外,思考其他测试采样频率的方法和手段。

3、除了中断方式,DSP内核还可以采用查询方式获取ADC外设的采样数据。

如果采样查询方式,则需要查询那些标志位。

试图编程实现。

 

实验三的作业

根据“DSP应用技术\实验11DSP数据采集\源程序\AD_C”中实验内容,打开程序AD.c,DSP_281x_PieCtrl.c以及相关头文件,阅读AD.c的主程序段落。

InitPieCtrl();

InitPieVectTable();

……

PieVectTable.ADCINT=&adc_isr;

EDIS;

PieCtrlRegs.PIEIER1.bit.INTx6=1;

IER=1;

1.程序执行完后,PIEIER1~12,PIEIFR1~12,PIECTRL,PIEACK,IER寄存器的数值分别是多少,用16进制表示。

PieCtrlRegs.PIEIERx.all=0;PIEIERx=0x0

PieCtrlRegs.PIEIFR1.all=0;PIEIFRx=0x0

PieCtrlRegs.PIECRTL.bit.ENPIE=1;PIECTRL=0x1

PieCtrlRegs.PIEACK.all=0xFFFF;PIEACK=0x0

PieCtrlRegs.PIEIER1.bit.INTx6=1;PIEIER1=0x20

IER=1;IER=0x1

2.上述程序执行完后,什么外设中断被使能打开?

PIEIER1.6对应了ADC中断,因此ADC中断被打开。

PieVectTable.ADCINT=&adc_isr;

指令执行后,0x00000D4A地址处内容为中断服务子程序adc_isr的地址。

实验四FIR滤波器的DSP实现

一、实验目的

1、巩固数字FIR滤波器的概念

2、理解定点DSP中数的定标、有限字长、溢出等概念

3、理解算法实现中实时的概念

4、掌握DSP开发过程以及基本调试方法

5、理解汇编以及高级语言开发DSP、实现算法的区别

二、实验仪器

计算机,C2000DSP教学实验箱,XDS510USB仿真器,示波器,信号源

三、实验内容

针对FIR算法,设计滤波器系数,完成数据的定标,查看滤波器特性曲线。

建立工程,编写DSP的主程序,并对工程进行编译、链接,利用现有DSP平台实现FIR滤波器的算法,通过信号源、示波器理解滤波器特性,验证实现与理论设计的一致性。

四、实验要求与结果

1、独立完成项目的编译、链接、调试的全过程

2、当输入信号为正弦信号时,改变正弦信号频率,观察示波器,几率各频点对应的幅度,并描点作图,与实际理论幅频曲线对比,做误差分析,指出FIR滤波器的设计参数指标。

3、记录FIR核心算法程序执行时间,以及采样时间,判断系统是否实时

五、实验思考

1、观察各种输入信号通过数字滤波器系统之后的输出波形,解释信号失真原因。

2、加载其他格式编写程序所产生的FIR滤波器程序,测量运算时间,比较分析C语言效率低的原因。

3、以该FIR滤波器系统为例,总结分析实时性的取决因素。

六具体实验过程

1、DSP实现流程:

开始

中断设置

ADC设置

EVA设置

FIR计算

保存AD结果

复位ADC

数据写DAC

等待

退出中断

DSP初始化

读取AD结果

2、算法实现流程:

3用matlab生成滤波器系数,并仿真验算正确性

FIRDesign

%

%

clc;

clear;

closeall;

N=50;

wm=0.5;

h_ft=fir1(N,wm);

q=quantizer('fixed','fixed',[16,15]);

h_fx=quantize(q,h_ft)*2^15;

[H_ft,W_ft]=freqz(h_ft);

[H_fx,W_fx]=freqz(h_fx);

A_ft=20*log10(abs(H_ft));

A_fx=20*log10(abs(H_fx));

figure,

plot(W_ft/pi,A_ft,'b',W_fx/pi,A_fx,'r');

ylabel('幅度:

dB');

xlabel('归一化频率:

×\pirad')

legend('FloatCoff','FixedCoff');

N=50,Wn=o.5并用Q15定标,采样频率20khz

得出h[N]={33,0,-43,0,68,0,-112,0,180,0,-276,0,410,0,-593,0,852,0,-1240,0,1901,0,-3361,0,10382,16368,10382,0,-3361,0,1901,0,-1240,0,852,0,-593,0,410,0,-276,0,180,0,-112,0,68,0,-43,0,33};

4、在程序中实现FIR滤波器功能,其中核心代码如下:

/***************************************************/

/*FIR数字滤波器程序*/

/*采样频率fs=29.29KHz,wn=0.5*/

#include"DSP281x_Device.h"

#defineN51

#defineCHAR_NULL0x00

#defineCHAR_L0x38

#defineCHAR_40x66

#defineCHAR_DH0x08

#defineCHAR_C0x39

#defineCHAR_F0x71

#defineCHAR_i0x10

#defineCHAR_r0x50

#defineCHAR_DOT0x80

 

voidConfigureGpio(void);

voidInitSystem(void);

voidInitLed(void);

interruptvoidadc_isr(void);

volatileunsignedint*DA1OUT=(volatileunsignedint*)0x002900;

unsignedintadcInput0[N];

unsignedintAdIndex=0;

intcoef[N]={33,0,-43,0,68,0,-112,0,180,0,-276,0,410,0,-593,0,852,0,-1240,0,1901,0,-3361,0,10382,16368,10382,0,-3361,0,1901,0,-1240,0,852,0,-593,0,410,0,-276,0,180,0,-112,0,68,0,-43,0,33};

inti;

unsignedlongintFirRslt;

 

voidmain(void)

{

InitSystem();//初始化DSP内核寄存器

InitPieCtrl();//调用PIE控制单元初始化函数

InitPieVectTable();//调用PIE向量表初始化函数

InitAdc();//调用ADC模块的基本初始化函数

InitLed();

EALLOW;

PieVectTable.ADCINT=&adc_isr;//重新设置PIE向量表中ADc的中断入口向量

EDIS;

PieCtrlRegs.PIEIER1.bit.INTx6=1;//使能PIE中断分组1中的ADC中断

IER=1;//使能和ADC中断相连的CPUINT1中断

EINT;//使能全局中断位INTM

ERTM;//使能全局实时调试中断DBGM

/*SETADC*/

AdcRegs.ADCTRL1.bit.SEQ_CASC=0;

AdcRegs.ADCTRL1.bit.CONT_RUN=0;

AdcRegs.ADCTRL1.bit.CPS=0;

AdcRegs.ADCMAXCONV.all=0x0000;//单通道转换

AdcRegs.ADCCHSELSEQ1.bit.CONV00=0x0;//将ADCINA0设置为SEQ1的第一个转换通道

AdcRegs.ADCTRL2.bit.EVA_SOC_SEQ1=1;//使能EVA引起的中断

AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1=1;

AdcRegs.ADCTRL3.bit.ADCCLKPS=2;//ADc模块的核心时钟频率=HSPCLK/4

/*SETEVA*/

EvaRegs.GPTCONA.bit.TCMPOE=0;//禁止比较输出

EvaRegs.GPTCONA.bit.T1PIN=0;

EvaRegs.GPTCONA.bit.T1TOADC=2;//设置周期中断标志启动ADC

EvaRegs.T1CON.bit.FREE=0;//防真挂起时,定时器1立即停止工作

EvaRegs.T1CON.bit.SOFT=0;

EvaRegs.T1CON.bit.TMODE=2;//连续增计数模式

EvaRegs.T1CON.bit.TPS=7;//设置定时器时钟频率为HSPCLK/128

EvaRegs.T1CON.bit.TENABLE=1;//允许定时器操作

EvaRegs.T1CON.bit.TCLKS10=0;//内部时钟

EvaRegs.T1CON.bit.TCLD10=0;//计数器为0时重载

EvaRegs.T1CON.bit.TECMPR=0;//禁止比较操作

EvaRegs.T1PR=62;//定时器周期寄存器

/*SETGPIO*/

EALLOW;

GpioMuxRegs.GPAMUX.all=0x0;

GpioMuxRegs.GPADIR.all=0xFFFF;

EDIS;

/*Initialisedatabuffer*/

for(AdIndex=0;AdIndex

adcInput0[AdIndex]=1;

AdIndex=0;

while

(1)

{

}

}

voidInitSystem(void)

{

EALLOW;

SysCtrlRegs.WDCR=0x00E8;//禁止看门狗模块

SysCtrlRegs.PLLCR.bit.DIV=10;//将CPU的PLL倍频系数设为5

SysCtrlRegs.HISPCP.all=0x1;//高速时钟的预定标器设置成除以2

SysCtrlRegs.LOSPCP.all=0x2;//低速时钟的预定标器设置成除以4

//根据需要时能各种外设模块的时钟

SysCtrlRegs.PCLKCR.bit.EVAENCLK=1;

SysCtrlRegs.PCLKCR.bit.EVBENCLK=0;

SysCtrlRegs.PCLKCR.bit.SCIAENCLK=0;

SysCtrlRegs.PCLKCR.bit.SCIBENCLK=0;

SysCtrlRegs.PCLKCR.bit.MCBSPENCLK=0;

SysCtrlRegs.PCLKCR.bit.SPIENCLK=0;

SysCtrlRegs.PCLKCR.bit.ECANENCLK=0;

SysCtrlRegs.PCLKCR.bit.ADCENCLK=1;

EDIS;

}

}

interruptvoidadc_isr(void)

{

EALLOW;

GpioDataRegs.GPASET.all=0xFFFF;

AdIndex=0;

adcInput0[AdIndex]=AdcRegs.ADCRESULT0>>4;

FirRslt=0;

for(i=0;i

FirRslt+=(int)(adcInput0[i])*coef[i];

*DA1OUT=(FirRslt>>12)+0x8000;

for(i=N-1;i>=0;i--)

adcInput0[i+1]=adcInput0[i];

//重新初始化ADC采样序列

AdcRegs.ADCTRL2.bit.RST_SEQ1=1;//复位SEQ1

AdcRegs.ADCST.bit.INT_SEQ1_CLR=1;//清除中断位INTSEQ1

PieCtrlRegs.PIEACK.all=PIEACK_GROUP1;//清除PIE1的中断响应位

GpioDataRegs.GPACLEAR.all=0xFFFF;

EDIS;

}

 

说明:

FirRslt的定标:

将滤波器的结果赋值给输出的时候,要根据FirRslt的动态范围对其进行适当右移。

因为DA1OUT接受的是一个16bit数据,而y是unsignedint型,即32bit,直接赋值势必会溢出。

检验的FirRslt动态范围有多种方法,其中比较简便的方法是将FirRslt添加到变量观察窗口,在赋值语句后设置断点,动态运行,观察的动态范围,即估计FirRslt的最大与最小值,目标是保留有效数值的高16位,于是便能确定最后赋值给输出口前y需要右移的位数,经过这一步,我们确定y应右移12位。

5调试程序,验证滤波器功能:

我们设置的系统参数为:

输入型号幅度1vpp,低通FIR滤波器,wn=0.5,采样频率20khz,则截止频率fn=5kHz

改信号源频率与示波器输出波形的幅度列表:

信号频率(khz)

1

2

3

4

4.1

幅度(v)

0.36

0.35

0.35

0.348

0.342

信号频率(khz)

4.2

4.3

4.4

4.5

4.6

幅度(v)

0.340

0.32

0.29

0.25

0.21

信号频率(khz)

4.7

4.8

4.9

5.0

5.1

幅度(v)

0.16

0.12

0.08

0.04

0.02

描点绘图

6实验思考

1.以该FIR滤波器为例,总结分析系统实时性取决因素。

滤波器阶数对实时性的影响:

滤波器阶数越高,运算量越大,实时性越难满足

实时性取决为运算量和芯片速度两个方面。

而运算量又可以分为数据率和算法复杂采样频率对实时性的影响:

采样频率越高,则数据率越大,实时性越难满足程度。

语言和汇编语言实现相同算法所需时间的比较也可以看出,算法或者代码的复杂程度对实时性也有很大影响。

2.观察各种信号通过数字滤波器后的输出波形,解释信号失真原因。

采样频率为20Khz时,如果输入信号频率大于5khz,则平均一个周期采样点数小于4,造成了严重的失真现象。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 工作计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1