DSP任意信号发生器的设计2012(优)_第1页
DSP任意信号发生器的设计2012(优)_第2页
DSP任意信号发生器的设计2012(优)_第3页
DSP任意信号发生器的设计2012(优)_第4页
DSP任意信号发生器的设计2012(优)_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、DSP综合性实验任意信号发生器实验DSP课程设计实 验 报 告任意信号发生器院(系):理学院指导教师:杨恒小组成员: 目 录一、实验目的:3二、实验内容:3三、实验原理:31.产生连续的波形的方法31.1 查表法:31.2计算法:32. TLV320AIC23B的内部结构及工作原理4四、程序设计 :51.正弦波52.方波93. 三角波114.锯齿波145.可调正弦波18五、CCS3.3程序调试:211、编译过程212、.cmd程序(5502.cmd)全文及其解释:223、程序运行结果(图形和数据显示):24六、硬件输出演示:27七、扩展部分:34八、实验感想与体会41九、参考文献42一、实验目

2、的:1.学习并掌握D/A转换器的初始化设置及其应用2.学习并掌握使用DSP产生正弦波的原理和算法,进而掌握任意信号波形(如三角波、锯齿波、矩形波等信号)产生的原理和算法。3.比较产生信号的两种主要方法(查表法和计算法)的优缺点。4. 熟练使用软件CCS3.3对程序的完整调试过程。二、实验内容: 信号发生器已广泛应用于科学实验、通讯和控制等应用领域中。使用 DSP 和 D/A 转换器可以产生连续的正弦波信号,同样也能产生方波、锯齿波、三角波等其它各种信号波形。本设计要求采用DSP及其D/A转换器产生上述各种信号波形。 本实验要求用软件CCS3.3编程实现,并硬件(DSK板或示波器)连接进行功能演

3、示。三、实验原理:1.产生连续的波形的方法1.1 查表法:把事先将需要输出的数据计算好,存储在DSP中,然后依次输出就可以了。查表法的优点是速度快,可以产生频率较高的波形,而且不占用DSP的计算时间;查表法的缺点是在于需要占用DSP的内部的存储空间,尤其对采样频率比较大的输出波形,这样,需要占用的内部的空间将更大,而DSP内部的存储空间毕竟有所限制。这使得查表法的应用场合十分有限。 1.2计算法:采用计算的方法依次计算数据而后输出,然后再计算而后输出。计算法的优缺点正好和查表法相反。即:其优点是不占用DSP的存储空间,其缺点是占用DSP的计算时间,使得执行程序的开销变大。本实验将用第二种方法即

4、计算法产生一个正弦波信号,从DA输出。由余弦信号的递推公式: 得知:如果需要产生连续的余弦信号,必须知道首先两个余弦值的大小,然后就可以利用上式计算出后面的数据,这就是下面编程依据的核心算法。 正弦函数和余弦函数的泰勒级数数学表达式为:,.如果要计算一个角度的正弦和余弦值,可以取其前五项进行近似计算。也可以用递推公式求正弦和余弦值:利用递推公式计算正弦和余弦值需已知cos(x)、sin(n-1)x、sin(n-2)x和cos(n-2)x的值。用这种方法,求少数点可以,如产生连续正弦、余弦波,则累积误差太大,不可取。最终产生信号的频率为f0=fs/N,其中N为抽样点数。2. TLV320AIC2

5、3B的内部结构及工作原理TLV320AIC23B是TI公司生产的高性能语音CODEC芯片,16、20、24、32位串行A/D、D/A转换电路。采样速率:可通过DSP编程来设置,范围8KHz96KHz。 内含抗混叠滤波器和重构滤波器。/AIC23波特率设置,CLKIN=CLKOUT=MCLK,采样率32KHz,时钟模式为普通模式, Uint16 Sample_Rate_Control2 = Codec_SRC_REV, SRC_CLKIN(0)+SRC_CLKOUT(0)+SRC_SR(6) +SRC_BOSR(0)+SRC_USB(0) ; 在AIC23中设置如下:/ AIC23的波特率设置,

6、采样率为32k,CLKIN=CLKOUT=MCLK/ 时钟模式设为普通模式,基过采样率为250Fs/96k 7/48k 0/32k 6/8k 3Uint16 Sample_Rate_Control2 = Codec_SRC_REV, SRC_CLKIN(0)+SRC_CLKOUT(0)+SRC_SR(6)+SRC_BOSR(0)+SRC_USB(0);本报告中所有程序的采样频率波特率均为32000Hz四、程序设计 :1.正弦波为了将想法转化成程序实现,我们考虑程序的框架如下:开始系统初始化DSP进行泰勒级数展开保存DA转换循环输出读数组x图一 正弦波程序流程图程序代码:#include #in

7、clude #include #include #include #include #include #include #include #include /#include E2PROM_Function.h#include CODEC.h#define pi 3.14159265 #define N 360#define F0 1000 /定义所求输出频率#define amp 1 /调节信号幅度#define L 0 /调节直流分量#pragma DATA_SECTION(output1,data_out1); /存放sin数据,浮点型double output1N; #pragma D

8、ATA_SECTION(output,data_out); /存放sin数据,定点型int outputN;#undef CODEC_ADDR#define CODEC_ADDR 0x1A / 定义McBSP的句柄MCBSP_Handle hMcbsp; /*-*/ FUNCTION: MAIN/*-*/ void main(void) float Nx=32000/F0*2; /Fs为32000Hz,Nx为抽样点数 unsigned int i; float input0=0,x1; float a,b,c,d,e,f,g,h,ii,step;/step为角度步长 step=360.0/Nx

9、; / Nx为360度内取样点数 /*新增函数段*/for(i=0;i=Nx-1;i+) float angle,xx; angle=input0+step*i; x1=pi*angle/180; /角度转换为弧度 xx=x1*x1; a=1-xx/16/17;b=1-xx/14/15*a;c=1-xx/12/13*b;d=1-xx/10/11*c;e=1-xx/8/9*d;f=1-xx/6/7*e;g=1-xx/4/5*f;h=1-xx/2/3*g;ii=x1*h; output1i=amp*32767*ii; /利用泰勒级数计算出正弦波前8项的数值,存放到output1中 outputi=

10、output1i/128+L;/除以128为使输出不溢出/ Initialize CSL library - This is REQUIRED ! 初始化CSL库 CSL_init(); / The main frequency of system is 240MHz/ 该频率是为了设置IIC模块的需要设置的,为了使用I2C_setup函数 PLL_setFreq(1, 0xC, 0, 1, 3, 3, 0); /EMIF初始化 Emif_Config(); / Open McBSP port 1 and get a McBSP type handlehMcbsp = MCBSP_open(M

11、CBSP_PORT1,MCBSP_OPEN_RESET);/ Config McBSPport 1 by use previously defined structureMcbsp_Config(hMcbsp);/I2C初始化I2C_cofig(); /CODEC寄存器初始化inti_AIC(); /*-*/ / Receive the ADC output data of CODEC / Then output the received data to DAC of CODEC /*-*/while(1) /循环产生波形for(i=0;iNx-1;i+)while(!MCBSP_xrdy(h

12、Mcbsp) ; MCBSP_write16(hMcbsp, outputi); for(i=0;iNx-1;i+)while(!MCBSP_xrdy(hMcbsp) ;MCBSP_write16(hMcbsp, outputi);for(i=0;iNx-1;i+)while(!MCBSP_xrdy(hMcbsp) ;MCBSP_write16(hMcbsp, outputi); /*/No more/*/总之,该程序的算法依据的是正弦函数泰勒展开公式,根据公式得到每个点的值;2.方波#include #include #include #include #include #include #

13、include #include #include #include /#include E2PROM_Function.h#include CODEC.h #define N 1024#define T 16 /设置调节频率#pragma DATA_SECTION(fang,data_buf1)double fangN;#pragma DATA_SECTION(dacdata,data_buf2)int dacdataN,outbufferN;double t=0, dt;float amp=40; /设置调节幅度float L=5; /设置直流分量#undef CODEC_ADDR#def

14、ine CODEC_ADDR 0x1A / 定义McBSP的句柄MCBSP_Handle hMcbsp; /*-*/ FUNCTION: MAIN/*-*/ void main(void) unsigned int i=0,j=0,k=0; /*新增函数段*/for(j=0;jT;j+)for(i=N/T*2*j;iN/T*(2*j+1);i+)fangi=0;for(i=N/T*(2*j+1);iN/T*(2*j+2);i+)fangi=1;for(i=0;i=N;i+) dacdatai=amp*fangi; outbufferi=dacdatai+L;/ Initialize CSL l

15、ibrary - This is REQUIRED ! CSL_init(); / The main frequency of system is 240MHz/ 该频率是为了设置IIC模块的需要设置的,为了使用I2C_setup函数 PLL_setFreq(1, 0xC, 0, 1, 3, 3, 0); /EMIF初始化 Emif_Config(); / Open McBSP port 1 and get a McBSP type handlehMcbsp = MCBSP_open(MCBSP_PORT1,MCBSP_OPEN_RESET);/ Config McBSPport 1 by u

16、se previously defined structureMcbsp_Config(hMcbsp);/I2C初始化I2C_cofig(); /CODEC寄存器初始化inti_AIC(); /*-*/ / Receive the ADC output data of CODEC / Then output the received data to DAC of CODEC /*-*/while(1)for(i=0;iN-1;i+)while(!MCBSP_xrdy(hMcbsp) ; j=j+1;MCBSP_write16(hMcbsp, outbufferi);k=k+1; for(i=0

17、;iN-1;i+)while(!MCBSP_xrdy(hMcbsp) ;MCBSP_write16(hMcbsp, outbufferi);for(i=0;iN-1;i+)while(!MCBSP_xrdy(hMcbsp) ;MCBSP_write16(hMcbsp, outbufferi); /*/No more/*/3. 三角波#include #include #include #include #include #include #include #include #include #include /#include E2PROM_Function.h#include CODEC.h

18、 #define N 256#define pi 3.1415927#define F0 1000 /Signal frequency#define Fs 16000 /Sampling frequency#define T 8 /设置调节频率#pragma DATA_SECTION(tri,data_buf1)double triN;#pragma DATA_SECTION(dacdata,data_buf2)int dacdataN,outbufferN;double t=0, dt;int amp=1; /设置调节幅度unsigned int L=0;#undef CODEC_ADDR#

19、define CODEC_ADDR 0x1A / 定义McBSP的句柄MCBSP_Handle hMcbsp; /*-*/ FUNCTION: MAIN/*-*/ void main(void) unsigned int i=0,j=0,k=0; /*新增函数段*/ dt=2*pi*F0/Fs;for(j=0;jT;j+)for(t=0,i=N/T*2*j;i=N/T*(2*j+1);i+,t+=dt)triN/T*2-i+N=trii=t;for(i=0;i=N;i+) dacdatai=trii*T; outbufferi=amp*dacdatai+L;/ Initialize CSL l

20、ibrary - This is REQUIRED ! CSL_init(); / The main frequency of system is 240MHz/ 该频率是为了设置IIC模块的需要设置的,为了使用I2C_setup函数 PLL_setFreq(1, 0xC, 0, 1, 3, 3, 0); /EMIF初始化 Emif_Config(); / Open McBSP port 1 and get a McBSP type handlehMcbsp = MCBSP_open(MCBSP_PORT1,MCBSP_OPEN_RESET);/ Config McBSPport 1 by u

21、se previously defined structureMcbsp_Config(hMcbsp);/I2C初始化I2C_cofig(); /CODEC寄存器初始化inti_AIC(); /*-*/ / Receive the ADC output data of CODEC / Then output the received data to DAC of CODEC /*-*/while(1)for(i=0;iN-1;i+)while(!MCBSP_xrdy(hMcbsp) ; j=j+1;MCBSP_write16(hMcbsp, outbufferi);k=k+1; for(i=0

22、;iN-1;i+)while(!MCBSP_xrdy(hMcbsp) ;MCBSP_write16(hMcbsp, outbufferi);for(i=0;iN-1;i+)while(!MCBSP_xrdy(hMcbsp) ;MCBSP_write16(hMcbsp, outbufferi); /*/No more/*/4.锯齿波#include #include #include #include #include #include #include #include #include #include /#include E2PROM_Function.h#include CODEC.h

23、#define N 1024 #define pi 3.1415927#define F0 1000 /Signal frequency#define Fs 16000 /Sampling frequency#define T 4#pragma DATA_SECTION(saw,data_buf1)double sawN;#pragma DATA_SECTION(dacdata,data_buf2)int dacdataN,outbufferN;double t=0, dt;float amp=1;float L=0;#undef CODEC_ADDR#define CODEC_ADDR 0x

24、1A / 定义McBSP的句柄MCBSP_Handle hMcbsp; /*-*/ FUNCTION: MAIN/*-*/ void main(void) unsigned int i=0,j=0,k=0; /*新增函数段*/ dt=2*pi*F0/Fs;for(j=1;j=T;j+)for(t=0,i=N/T*(j-1);i=N/T*j;i+,t-=dt) /若步进反号,则锯齿波方向改变 sawi=t; sawi+N/T=0;for(i=0;iN;i+) dacdatai=sawi*T; outbufferi=amp*dacdatai+L;/ Initialize CSL library -

25、 This is REQUIRED ! CSL_init(); / The main frequency of system is 240MHz/ 该频率是为了设置IIC模块的需要设置的,为了使用I2C_setup函数 PLL_setFreq(1, 0xC, 0, 1, 3, 3, 0); /EMIF初始化 Emif_Config(); / Open McBSP port 1 and get a McBSP type handlehMcbsp = MCBSP_open(MCBSP_PORT1,MCBSP_OPEN_RESET);/ Config McBSPport 1 by use previ

26、ously defined structureMcbsp_Config(hMcbsp);/I2C初始化I2C_cofig(); /CODEC寄存器初始化inti_AIC(); /*-*/ / Receive the ADC output data of CODEC / Then output the received data to DAC of CODEC /*-*/while(1) for(i=0;iN-1;i+)while(!MCBSP_xrdy(hMcbsp) ; j=j+1;MCBSP_write16(hMcbsp, outbufferi);k=k+1; for(i=0;iN-1;i

27、+)while(!MCBSP_xrdy(hMcbsp) ;MCBSP_write16(hMcbsp, outbufferi);for(i=0;iN-1;i+)while(!MCBSP_xrdy(hMcbsp) ;MCBSP_write16(hMcbsp, outbufferi); /*/No more/*/5.可调正弦波添加Gel文件,使输入频率和幅度可调,便于观察#include #include #include #include #include #include #include #include #include #include /#include E2PROM_Function.

28、h#include CODEC.h#define pi 3.14159265 #define N 360#define L 0 /调节直流分量volatile int Amp; /调节幅度volatile int Fre; /调节频率#pragma DATA_SECTION(output1,data_out1); /存放sin数据,浮点型double output1N; #pragma DATA_SECTION(output,data_out); /存放sin数据,定点型int outputN;#undef CODEC_ADDR#define CODEC_ADDR 0x1A / 定义McBSP

29、的句柄MCBSP_Handle hMcbsp; /*-*/ FUNCTION: MAIN/*-*/ void main(void) Uint16 i,k=0; int amp=(int)Amp/pi; int Nx=(int)32000/Fre; /Fs为32000Hz,Nx为抽样点数 float input0=0,x1; float a,b,c,d,e,f,g,h,ii,step;/step为角度步长 step=360.0/Nx; / Nx为360度内取样点数 /*新增函数段*/for(i=0;i=Nx) k=k%Nx; /*/No more/*/Gel文件:Amp.gel:menuitem

30、 Signal Gainslider gain(1,1000,1,1,gainparameter) /增益范围从1-1000Amp=gainparameter;Fre.gel:menuitem Signal Frequencyslider fre(300,4000,1,1,freparameter) /频率范围从300-4000Fre=freparameter;五、CCS3.3程序调试:1、编译过程按照上面第四点编写好程序后,进行编译,结果如下(图二):图二 程序调试过程 在编译程序之前,还要做一些准备工作,即这项工程的文件添加等。如library的库文件就需要自己从TI(或CCS5000)文

31、件夹中寻找添加:1、 csl5502x.lib是软件仿真所用的仿真器所必需的库文件;2、 rts55x.lib,这个库提供目标DSP运行时间支持(runtime-support)。 在编译之前,还应设置一下编译环境,虽然本程序没有对其修改。在Project菜单中选择Build Options选项有如图三所示的对话框:图三 编译环境设置2、.cmd程序(5502.cmd)全文及其解释:2.1 .cmd文件类型及作用:.cmd是链接器命令文件,用于存储器配置。2.2 .cmd文件结构:.cmd由两条链接伪指令来描述:MEMORY 和SECTIONS,其中:MEMORY定义用户目标系统存储器的配置;

32、SECTIONS控制段的构建和存储器的分配。 首先存储器空间是需要配置的,因为DSP不同的空间占用相同的地址,因此需要人工分配。 2.3 5502.cmd全文及其解释如下:MEMORY MMR : origin = 0000000h, length = 00000c0h SPRAM : origin = 00000c0h, length = 0000040 VECS : origin = 0000100h, length = 0000100h DARAM0 : origin = 0000200h, length = 0007E00h DARAM1 : origin = 0008000h, le

33、ngth = 0008000h CE0 : origin = 0010000h, length = 03f0000h /* 对应ZBTRAM空间 */ FLASH : origin = 0400000h, length = 0100000h/* Flash 空间 */* FLASH : origin = 0410000h, length = 00f0000h*/ EXTEND: origin = 0500000h, length = 0300000h/* 状态控制寄存器、UARTA、UARTB、USB、和扩展总线所对应的空间 */ SDRAM : origin = 0800000h, leng

34、th = 03FFFFCh/* SDRAM 空间*/ CE3 : origin = 0c00000h, length = 03f8000h/* SDRAM 空间*/ PDROM : origin = 0ff8000h, length = 07f00h RESET_VECS : origin = 0ffff00h, length = 000ffh /* reset vector */ SECTIONS .vectors : VECS /* interrupt vector table */ .cinit : DARAM1 /*把.cinit输出段分配到DARAM1中的*/ .text : DARAM1 .Audio_in_data1: SDRAM .Audio_in_data2: SDRAM .Audio_in_data3: SDRAM .Audio_out_data1: SDRAM .Audio_out_data2: SDRAM .Audio_out_data3: SDRAM data_out : SDRAMdata_out1 : SDRAM /*以上对应主程序部分*/ .stack : DARAM0 .sysstack: DARAM0 .sysmem : DARAM0 .cio : DARAM1 .data : DARAM1 .bss : DARAM1 .const :

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论