1、DSP实验报告模拟信号的ADFFT变换精一、 实验开发环境1通用 PC机一台,安装 Windows2000 或 WindowsXP 操作系统且已安装常用软件(如:WinRAR 等。 2TMS320C55xx 评估板及相关电源。本实验采用ICETEK-VC5509-A评估板。 3通用 DSP 仿真器一台及相关连线。本实验采用ICETEK-5100USB仿真器。 4控制对象(选用。本实验采用ICETEK-CTR控制板。 5TI的 DSP 开发集成环境 Code Composer Studio。本实验采用CCS2.21 for C5000。 6仿真器驱动程序。 7实验程序及相关文档。二、 实验目的1
2、. 通过实验熟悉 VC5509A的定时器。2. 掌握 VC5509A 片内 AD的控制方法。3. 掌握用窗函数法设计 FFT 快速傅里叶的原理和方法。4. 熟悉 FFT 快速傅里叶特性。5. 了解各种窗函数对快速傅里叶特性的影响。三、 实验设备通用计算机一台,ICETEK-VC5509-EDU 实验箱。四、 实验原理1. 将从信号源获取的模拟信号经过A/D转换后,再进行FFT变换,然后输出。2. TMS320VC5509A 模数转换模块特性:内置采样和保持的10位模数转换模块ADC,最小转换时间为500ns,最大采样率为21.5kHz。有2个模拟输入通道(AIN0AIN1)。采样和保持获取时间
3、窗口有单独的预定标控制。3. 模数转换工作过程:模数转换模块接到启动转换信号后,开始转换第一个通道的数据。经过一个采样时间的延迟后,将采样结果放入转换结果寄存器保存。转换结束,设置标志。等待下一个启动信号。 4. 模数转换的程序控制: 模数转换相对于计算机来说是一个较为缓慢的过程。 一般采用中断方式启动转换或保存结果,这样在 CPU 忙于其他工作时可以少占用处理时间。设计转换程序应首先考虑处理过程如何与模数转换的时间相匹配,根据实际需要选择适当的触发转换的手段,也要能及时地保存结果。 由于 TMS320VC5509A DSP芯片内的 A/D转换精度是10位的,转换结果的低10位为所需数值,所以
4、在保留时应注意将结果的高6位去除,取出低10位有效数字。5. FFT 的原理和参数生成公式:FFT 并不是一种新的变换,它是离散傅立叶变换(DFT)的一种快速算法。由于我们在计算 DFT 时一次复数乘法需用四次实数乘法和二次实数加法; 一次复数加法则需二次实数加法。每运算一个 X(k)需要 4N次复数乘法及 2N+2(N-1)=2(2N-1)次实数加法。所以整个 DFT运算总共需要 4N2 次实数乘法和 N*2(2N-1=2N(2N-1次实数加法。如此一来,计算时乘法次数和加法次数都是和 N2 成正比的,当 N很大时,运算量是可观的,因而需要改进对 DFT 的算法减少运算速度。 根据傅立叶变换
5、的对称性和周期性,我们可以将 DFT 运算中有些项合并。我们先设序列长度为 N=2L,L 为整数。将 N=2L 的序列 x(n(n=0,1,,N-1,按N的奇偶分成两组,也就是说我们将一个 N点的 DFT 分解成两个 N/2 点的 DFT,他们又重新组合成一个如下式所表达的 N点 DFT:一般来说,输入被假定为连续的。当输入为纯粹的实数的时候,我们就可以利用左右对称的特性更好的计算DFT。我们称这样的 RFFT 优化算法是包装算法:首先 2N 点实数的连续输入称为“进包”。其次N点的 FFT 被连续运行。最后作为结果产生的 N点的合成输出是“打开”成为最初的与 DFT 相符合的 2N点输入。
6、使用这一思想,我们可以划分 FFT 的大小,它有一半花费在包装输入O(N)的操作和打开输出上。这样的 RFFT 算法和一般的 FFT 算法同样迅速,计算速度几乎都达到了两次 DFT的连续输入。五、 实验源程序实验相关文档处有以下文件的源代码:5509.h、C5509.h、c55xxdefs.h、func.h、myapp.h、ICETEK-VC5509-EDU.h、peripherals.h、scancode.h、util.h、sdram_init.c 、util.c、ICETEK-VC5509-A.cmd。ad.h的源代码:void InitADC(;void wait(unsigned in
7、t cycles;void InitADC(ADCCLKCTL=0x23; / 4MHz ADCLKADCCLKDIV=0x4f00;void wait( unsigned int cycles int i;for ( i = 0 ; i cycles ; i+ AD_FFT.h的源代码#include #define PI 3.1415926#define SAMPLENUMBER 128float wSAMPLENUMBER;float sin_tabSAMPLENUMBER,cos_tabSAMPLENUMBER;void FFT(float dataRSAMPLENUMBER,floa
8、t dataISAMPLENUMBER;void InitForFFT(;void FFT(float dataRSAMPLENUMBER,float dataISAMPLENUMBERint x0,x1,x2,x3,x4,x5,x6,xx;int i,j,k,b,p,L;float TR,TI,temp;/* following code invert sequence */for ( i=0;i x0=x1=x2=x3=x4=x5=x6=0;x0=i&0x01; x1=(i/2&0x01; x2=(i/4&0x01; x3=(i/8&0x01;x4=(i/16&0x01; x5=(i/32
9、&0x01; x6=(i/64&0x01;xx=x0*64+x1*32+x2*16+x3*8+x4*4+x5*2+x6;dataIxx=dataRi;for ( i=0;i dataRi=dataIi; dataIi=0; /* following code FFT */for ( L=1;L0 b=b*2; i-; /* b= 2(L-1 */for ( j=0;j0 /* p=pow(2,7-L*j; */p=p*2; i-;p=p*j;for ( k=j;k128;k=k+2*b /* for (3 */TR=dataRk; TI=dataIk; temp=dataRk+b;dataRk
10、=dataRk+dataRk+b*cos_tabp+dataIk+b*sin_tabp;dataIk=dataIk-dataRk+b*sin_tabp+dataIk+b*cos_tabp;dataRk+b=TR-dataRk+b*cos_tabp-dataIk+b*sin_tabp;dataIk+b=TI+temp*sin_tabp-dataIk+b*cos_tabp; /* END for (3 */ /* END for (2 */ /* END for (1 */for ( i=0;i wi=sqrt(dataRi*dataRi+dataIi*dataIi; /* END FFT */v
11、oid InitForFFT(int i;for ( i=0;i sin_tabi=sin(PI*2*i/SAMPLENUMBER;cos_tabi=cos(PI*2*i/SAMPLENUMBER;clk_init.c的源代码:#includemyapp.hvoid CLK_init(ioport unsigned int *clkmd;clkmd=(unsigned int *0x1c00;*clkmd =0x2033; / 0x2033;/0x2413;/ 200MHz=0x2513void SetDSPPLL(unsigned int uPLLioport unsigned int *c
12、lkmd;clkmd=(unsigned int *0x1c00;*clkmd =uPLL;void TMCR_reset( void ioport unsigned int *TMCR_MGS3=(unsigned int *0x07FE; ioport unsigned int *TMCR_MM =(unsigned int *0x07FF; *TMCR_MGS3 =0x510;*TMCR_MM =0x000;FFT.c的源代码:#include myapp.h#include ICETEK-VC5509-EDU.h#include scancode.h#include #include
13、ad.h#include AD_FFT.h#define PI 3.1415926#define SAMPLENUMBER 128/void InitForFFT(;/void MakeWave(;/void FFT(float dataRSAMPLENUMBER,float dataISAMPLENUMBER;int INPUTSAMPLENUMBER,DATASAMPLENUMBER;float fWaveRSAMPLENUMBER,fWaveISAMPLENUMBER;int nADC0256,nADC1256;float wSAMPLENUMBER;main(int i;int uWo
14、rk;/EnableAPLL(;/SDRAM_init(;InitADC(;PLL_Init(144;while ( 1 for ( i=0;i256;i+ ADCCTL=0x8000; / 启动AD转换,通道0douWork=ADCDATA; while ( uWork&0x8000 ;nADC0i=uWork&0x0fff;for ( i=0;iGraph-Time/Frequency设置好波形观察参数。7运行程序,观察结果: 观察 经D转换和FFT变换后的波形,调整信号源可调部分,观察实时波形随之变化。 8选择菜单Fileworkspacesave workspacs As,输入文件名
15、SY.wks 。 9退出CCS:七、 实验结果及分析实验输入的模拟信号如下图所示:实验所输入模拟信号经FFT变换后的输出:实验所输入模拟信号经AD转换后的输出:实验所输入模拟信号经AD转换后的信号经FFT变换后的输出:八、 实验总结通过本次CCS环境下对模拟信号进行A/D转换和FFT变换的硬件仿真实验,让我掌握了Code Composer Studio 2.21的安装和配置步骤过程;了解了DSP开发系统和计算机与目标系统的连接方法,Code Composer Studio 2.21软件的操作环境和基本功能,TMS320C55xx软件开发过程以及CCS环境下DSP的C语言程序编写方法;学会了创建
16、工程和管理工程的方法,基本的编译和调试功能,以及观察窗口和图形窗口的使用;熟悉了VC5509A的定时器的使用和片内AD的控制方法;更深一步的理解了用窗函数设计FFT快速傅立叶变换的原理和方法,FFT快速傅立叶的特性和各种窗函数对快速傅立叶特性的影响。为我今后对DSP的进一步学习奠定了更好理论基础和应用基础。参考资料1 赵洪亮等编著.TMS320C55xDSP应用系统设计.北京:北京航空航天大学出版社,2008.2胡庆钟等编著. TMS320C55xDSP原理、应用和设计.北京:机械工业出版社,2005.3 ICETEK-VC5509-A-USB-EDU_V2.1(ICETEK-VC5509-A-USB-EDU教学实验系统软件实验指导书.
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1