DSP课程设计--多波形信号发生器.doc

上传人:PIYPING 文档编号:10526514 上传时间:2021-05-21 格式:DOC 页数:16 大小:1.12MB
返回 下载 相关 举报
DSP课程设计--多波形信号发生器.doc_第1页
第1页 / 共16页
DSP课程设计--多波形信号发生器.doc_第2页
第2页 / 共16页
DSP课程设计--多波形信号发生器.doc_第3页
第3页 / 共16页
DSP课程设计--多波形信号发生器.doc_第4页
第4页 / 共16页
DSP课程设计--多波形信号发生器.doc_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《DSP课程设计--多波形信号发生器.doc》由会员分享,可在线阅读,更多相关《DSP课程设计--多波形信号发生器.doc(16页珍藏版)》请在三一文库上搜索。

1、DSP课程设计报告 多波形信号发生器 目 录一、实验目的3二、实验内容3三、实验原理31.产生连续的波形的方法31.1 查表法:31.2计算法:32. TLV320AIC23B的内部结构及工作原理4四、程序设计5五、程序调试111、编译过程112、.cmd程序(5502.cmd)全文及其解释:113、程序运行结果(图形和数据显示):13六、硬件输出演示:16七、实验感想与体会18八、参考文献18一、实验目的1.学习并掌握D/A转换器的初始化设置及其应用2.学习并掌握使用DSP产生正弦波的原理和算法,进而掌握任意信号波形(如三角波、锯齿波、矩形波等信号)产生的原理和算法。3.比较产生信号的两种主

2、要方法(查表法和计算法)的优缺点。4.熟练使用软件CCS3.3对程序的完整调试过程。二、实验内容使用DSP产生30016000Hz的正弦、方波、锯齿波和三角波信号,输出信号的幅度从01Vrms(有效值)。要求使用计算法,并且频率可变、幅度可变。 本实验要求用软件CCS3.3编程实现,并与硬件连接进行功能演示。三、实验原理1.产生连续的波形的方法1.1 查表法:把事先将需要输出的数据计算好,存储在DSP中,然后依次输出就可以了。查表法的优点是速度快,可以产生频率较高的波形,而且不占用DSP的计算时间;查表法的缺点在于需要占用DSP的内部的存储空间,尤其对采样频率比较大的输出波形,这样,需要占用的

3、内部的空间将更大,而DSP内部的存储空间毕竟有所限制。这使得查表法的应用场合十分有限。 1.2计算法:采用计算的方法依次计算数据而后输出,然后再计算而后输出。计算法的优缺点正好和查表法相反。即:其优点是不占用DSP的存储空间,其缺点是占用DSP的计算时间,使得执行程序的开销变大。本实验将用第二种方法即计算法产生一个正弦波信号,从DA输出。由余弦信号的递推公式: 得知:如果需要产生连续的余弦信号,必须知道首先两个余弦值的大小,然后就可以利用上式计算出后面的数据,这就是下面编程依据的核心算法。 正弦函数和余弦函数的泰勒级数数学表达式为:,.如果要计算一个角度的正弦和余弦值,可以取其前五项进行近似计

4、算。也可以用递推公式求正弦和余弦值:利用递推公式计算正弦和余弦值需已知cos(x)、sin(n-1)x、sin(n-2)x和cos(n-2)x的值。用这种方法,求少数点可以,如产生连续正弦、余弦波,则累积误差太大,不可取。最终产生信号的频率为f0=fs/N,其中N为抽样点数。2. TLV320AIC23B的内部结构及工作原理TLV320AIC23B是TI公司生产的高性能语音CODEC芯片,16、20、24、32位串行A/D、D/A转换电路。采样速率:可通过DSP编程来设置,范围8KHz96KHz。 内含抗混叠滤波器和重构滤波器。/AIC23波特率设置,CLKIN=CLKOUT=MCLK,采样率

5、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的波特率设置,采样率为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_S

6、R(6)+SRC_BOSR(0)+SRC_USB(0);本报告中所有程序的采样频率波特率均为32000Hz四、程序设计 我们的设计围绕要求展开,需要实现的基本功能为:1. 产生正弦、方波、三角波、锯齿波四种波形2. 波形幅度、频率可借助GEL的slider调整通过对GEL的学习,我们发现其slider也可以实现选择波形,于是整个演示过程就不需要切换程序了。主程序设计思路如下图:代码:#include #include #include #include #include #include #include #include #include #include /#include E2PROM_

7、Function.h#include CODEC.h #define Nx 360 /每周期抽取点数#pragma DATA_SECTION(output1,data_out1); /存放sin数据,浮点型float output1Nx; #pragma DATA_SECTION(output2,data_out2); /存放sin数据,浮点型float output2Nx; #pragma DATA_SECTION(output3,data_out3); /存放sin数据,浮点型float output3Nx; #pragma DATA_SECTION(output4,data_out4);

8、 /存放sin数据,浮点型float output4Nx; #pragma DATA_SECTION(output,data_out); /存放sin数据,定点型int outputNx,gain=1,gainnew=0,frq=300,wave=1; #undef CODEC_ADDR#define CODEC_ADDR 0x1A / 定义McBSP的句柄MCBSP_Handle hMcbsp; /*-*/ FUNCTION: MAIN/*-*/ void main(void) Uint16 i=0,k=0; float input0=0,x1; float a,b,c,d,e,f,g,h,

9、ii,step;/step为角度步长 step=360.0/Nx; / Nx为360度内取样点数 /*新增函数段*/ for(i=0;i=Nx-1;i+) float angle,xx; angle=input0+step*i; x1=3.1415926*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; / g=x1*(1-xx/2/3*(1-xx/4/5*(1-xx

10、/6/7*(1-xx/8/9*(1-xx/10/11*(1-xx/12/13*(1-xx/14/15*(1-xx/16/17);/数学总公式 / fprintf(stdout,COMPUTE%f,ii); fprintf(stdout,n ); /输出计算的正弦波的数值,x2=e output1i= 32767*ii; /利用泰勒级数计算出正弦波的数值,存放到output1中 / outputi=gain*output1i/1024; / 正弦波 output20=0; for(i=0;i=(Nx-1)/2;i+)output2i+1=output2i+2;for(i=(Nx+1)/2;i=(

11、Nx-1);i+)output2i+1=output2i-2; / 三角波 for(i=0;i=(Nx-1)/2;i+)output3i=500;for(i=(Nx+1)/2;i=(Nx-1);i+)output3i=0; / 方波output40=0; for(i=0;i=(Nx-1);i+)output4i+1=output4i+2;/ Initialize CSL library - This is REQUIRED ! CSL_init(); / The main frequency of system is 240MHz/ 该频率是为了设置IIC模块的需要设置的,为了使用I2C_se

12、tup函数 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 previously defined structureMcbsp_Config(hMcbsp);/I2C初始化I2C_cofig(); /CODEC寄存器初始化inti_AIC(); /*-*/ / Receive

13、the ADC output data of CODEC / Then output the received data to DAC of CODEC /*-*/while(1)if(wave=1) if(gain!=gainnew)for(i=0;iNx;i+) outputi=gain*output1i/204800; gainnew=gain; else if(wave=2) if(gain!=gainnew)for(i=0;iNx;i+) outputi=gain*output2i/1024; gainnew=gain; else if(wave=3) if(gain!=gainne

14、w)for(i=0;iNx;i+) outputi=gain*output3i/1024; gainnew=gain; else(wave=4); if(gain!=gainnew)for(i=0;i=Nx) k=k%Nx; GEL文件如下:Volume.gel/* * Copyright 1998 by Texas Instruments Incorporated. * All rights reserved. Property of Texas Instruments Incorporated. * Restricted rights to use, duplicate or disclo

15、se this code are * granted through contract. */* = volume.gel =*/menuitem Application Controlslider Gain(0,1000,1,1, gainParm) gain = gainParm;menuitem Application Controlslider Frq(300,16000,100,100, frqParm) frq = frqParm;menuitem Application Controlslider Wave(1,4,1,1, waveParm) wave = waveParm;五

16、、程序调试1、编译过程 在编译程序之前,还要做一些准备工作,即这项工程的文件添加等。如library的库文件就需要自己从TI(或CCS5000)文件夹中寻找添加:1、 csl5502x.lib是软件仿真所用的仿真器所必需的库文件;2、 rts55x.lib,这个库提供目标DSP运行时间支持(runtime-support)。 2、.cmd程序(5502.cmd)全文及其解释:2.1 .cmd文件类型及作用:.cmd是链接器命令文件,用于存储器配置。2.2 .cmd文件结构:.cmd由两条链接伪指令来描述:MEMORY 和SECTIONS,其中:MEMORY定义用户目标系统存储器的配置;SECT

17、IONS控制段的构建和存储器的分配。 首先存储器空间是需要配置的,因为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, length

18、 = 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, length =

19、 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

20、.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 : DARAM1 .

21、csldata: DARAM0 dmaMem: DARAM0 根据上面的具体文件作以下补充:msections是COFF文件中最重要的概念,它至少包含以下三个段:.text 段:包含可执行代码;.data 段:包含初始化数据;.bss 段: 为未初始化变量保留存储空间。其他为自定义段(或汇编器生成段),如:.usect段,.sect段,.cinit段等。 m初始化代码段:包含数据或可执行代码,C/C+ compiler 产生下面的初始化段:4.cinit 段:包含初始化变量表和常数,C/C+ 的全局变量;4.const 段:包含由C/C+限定的字符串常数和数据;(假如 constant也不是定

22、义为 volatile).4.text 段:包含所有的可执行代码,还有字符串汇编产生的常数。m.cmd文件的细节问题:未初始化段:存储器中的保留空间(通常是RAM)。程序可以在运行时使用这个空间,建立和存储变量。汇编器compiler 建立如下未初始化段:4.bss段:为global and static variables保留空间。当使用-c 链接选项,程序启动时,C/C+ boot 程序将.cinit段的数据拷出,存到.bss段中。4.stack 段:为C/C+系统堆栈system stack分配存储器,其存储器可以传送变量。 1、链接命令语言是ASCII码形式的文件。它支持C语言的“/*

23、 */”作为注释,但不支持“/”。2、链接命令文件中的常数可以采用汇编语言格式,也可以采用C语言格式,或者混用。3、程序运行结果(图形和数据显示): 加载Volume.gel打开三个slider显示如图:编译成功后,选择File菜单中的Load Program选项。3.1 图形显示:选择View中的Graph的第一项,修改项如图所示: 图形显示参数界面及其修改(1)、Start Address:该选项是选择图像的输出从哪个变量的地址开始,在本程序中为output,是软件仿真和硬件演示的数据出口;(2)、Acquisition Buffer Size/Display Data Size:这两个数

24、值用于设置输出函数画出的点数,通常是一样的。图中所选32000/1000*2是根据程序编写output时,其数组长度为Nx,即抽样点数,由公式Nx=Fs/F0得出,又因为本程序输出为左右声道叠加,故Nx为抽样点数的2倍。(3)、DSP Data Type:这里我们选择16-bit signed integer.单击OK,选择正弦和三角波时截图如下:六、硬件输出演示:正弦波 方波 锯齿波 三角波通过gain和fre调节增益大小和频率大小,幅度调节范围为1-1000,频率调节范围为300-16000Hz。误差分析:产生误差的原因除了实验板内部结构和噪声的问题外,最主要的是程序中随着频率的变化,由Nx=Fs/F0算出的抽样点数需要取整,因此可能会带来一些误差。另外在高频部分随着频率的增加,干扰越来越明显,波形失真严重。八、参考文献1高海林,钱满义.DSP技术及其应用M:清华大学出版社,北京交通大学出版社,2009.2陈后金.数字信号处理M:北京交通大学出版社,2009.第 16 页 共 16 页

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

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1