DSP实验报告模拟信号的ADFFT变换精.docx

上传人:b****4 文档编号:27148613 上传时间:2023-06-27 格式:DOCX 页数:13 大小:122.46KB
下载 相关 举报
DSP实验报告模拟信号的ADFFT变换精.docx_第1页
第1页 / 共13页
DSP实验报告模拟信号的ADFFT变换精.docx_第2页
第2页 / 共13页
DSP实验报告模拟信号的ADFFT变换精.docx_第3页
第3页 / 共13页
DSP实验报告模拟信号的ADFFT变换精.docx_第4页
第4页 / 共13页
DSP实验报告模拟信号的ADFFT变换精.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

DSP实验报告模拟信号的ADFFT变换精.docx

《DSP实验报告模拟信号的ADFFT变换精.docx》由会员分享,可在线阅读,更多相关《DSP实验报告模拟信号的ADFFT变换精.docx(13页珍藏版)》请在冰豆网上搜索。

DSP实验报告模拟信号的ADFFT变换精.docx

DSP实验报告模拟信号的ADFFT变换精

一、实验开发环境

1.通用PC机一台,安装Windows2000或WindowsXP操作系统且已安装常用软件(如:

WinRAR等。

2.TMS320C55xx评估板及相关电源。

本实验采用ICETEK-VC5509-A评估板。

3.通用DSP仿真器一台及相关连线。

本实验采用ICETEK-5100USB仿真器。

4.控制对象(选用。

本实验采用ICETEK-CTR控制板。

5.TI的DSP开发集成环境CodeComposerStudio。

本实验采用CCS2.21for’C5000。

6.仿真器驱动程序。

7.实验程序及相关文档。

二、实验目的

1.通过实验熟悉VC5509A的定时器。

2.掌握VC5509A片内AD的控制方法。

3.掌握用窗函数法设计FFT快速傅里叶的原理和方法。

4.熟悉FFT快速傅里叶特性。

5.了解各种窗函数对快速傅里叶特性的影响。

三、实验设备

通用计算机一台,ICETEK-VC5509-EDU实验箱。

四、实验原理

1.将从信号源获取的模拟信号经过A/D转换后,再进行FFT变换,然后输出。

2.TMS320VC5509A模数转换模块特性:

内置采样和保持的10位模数转换模块ADC,最小转换时间为500ns,最大采样率为21.5kHz。

有2个模拟输入通道(AIN0—AIN1)。

采样和保持获取时间窗口有单独的预定标控制。

3.模数转换工作过程:

模数转换模块接到启动转换信号后,开始转换第一个通道的数据。

经过一个采样时间的延迟后,将采样结果放入转换结果寄存器保存。

转换结束,设置标志。

等待下一个启动信号。

4.模数转换的程序控制:

模数转换相对于计算机来说是一个较为缓慢的过程。

一般采用中断方式启动转换或保存结果,这样在CPU忙于其他工作时可以少占用处理时间。

设计转换程序应首先考虑处理过程如何与模数转换的时间相匹配,根据实际需要选择适当的触发转换的手段,也要能及时地保存结果。

由于TMS320VC5509ADSP芯片内的A/D转换精度是10位的,转换结果的低10位为所需数值,所以在保留时应注意将结果的高6位去除,取出低10位有效数字。

5.FFT的原理和参数生成公式:

FFT并不是一种新的变换,它是离散傅立叶变换(DFT)的一种快速算法。

由于我们在计算DFT时一次复数乘法需用四次实数乘法和二次实数加法;一次复数加法则需二次实数加法。

每运算一个X(k)需要4N次复数乘法及2N+2(N-1)=2(2N-1)次实数加法。

所以整个DFT运算总共需要4N^2次实数乘法和N*2(2N-1=2N(2N-1次实数加法。

如此一来,计算时乘法次数和加法次数都是和N^2成正比的,当N很大时,运算量是可观的,因而需要改进对DFT的算法减少运算速度。

根据傅立叶变换的对称性和周期性,我们可以将DFT运算中有些项合并。

我们先设序列长度为N=2^L,L为整数。

将N=2^L的序列x(n(n=0,1,……,N-1,按N的奇偶分成两组,也就是说我们将一个N点的DFT分解成两个N/2点的DFT,他们又重新组合成一个如下式所表达的N点DFT:

一般来说,输入被假定为连续的。

当输入为纯粹的实数的时候,我们就可以利用左右对称的特性更好的计算DFT。

我们称这样的RFFT优化算法是包装算法:

首先2N点实数的连续输入称为“进包”。

其次N点的FFT被连续运行。

最后作为结果产生的N点的合成输出是“打开”成为最初的与DFT相符合的2N点输入。

使用这一思想,我们可以划分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的源代码:

voidInitADC(;

voidwait(unsignedintcycles;

voidInitADC(

{

ADCCLKCTL=0x23;//4MHzADCLK

ADCCLKDIV=0x4f00;

}

voidwait(unsignedintcycles

{

inti;

for(i=0;i

}

AD_FFT.h的源代码

#include

#definePI3.1415926

#defineSAMPLENUMBER128

floatw[SAMPLENUMBER];

floatsin_tab[SAMPLENUMBER],cos_tab[SAMPLENUMBER];

voidFFT(floatdataR[SAMPLENUMBER],floatdataI[SAMPLENUMBER];

voidInitForFFT(;

voidFFT(floatdataR[SAMPLENUMBER],floatdataI[SAMPLENUMBER]

{

intx0,x1,x2,x3,x4,x5,x6,xx;

inti,j,k,b,p,L;

floatTR,TI,temp;

/**********followingcodeinvertsequence************/

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&0x01;x6=(i/64&0x01;

xx=x0*64+x1*32+x2*16+x3*8+x4*4+x5*2+x6;

dataI[xx]=dataR[i];

}

for(i=0;i

{

dataR[i]=dataI[i];dataI[i]=0;

}

/**************followingcodeFFT*******************/

for(L=1;L<=7;L++

{/*for(1*/

b=1;i=L-1;

while(i>0

{

b=b*2;i--;

}/*b=2^(L-1*/

for(j=0;j<=b-1;j++/*for(2*/

{

p=1;i=7-L;

while(i>0/*p=pow(2,7-L*j;*/

{

p=p*2;i--;

}

p=p*j;

for(k=j;k<128;k=k+2*b/*for(3*/

{

TR=dataR[k];TI=dataI[k];temp=dataR[k+b];

dataR[k]=dataR[k]+dataR[k+b]*cos_tab[p]+dataI[k+b]*sin_tab[p];

dataI[k]=dataI[k]-dataR[k+b]*sin_tab[p]+dataI[k+b]*cos_tab[p];

dataR[k+b]=TR-dataR[k+b]*cos_tab[p]-dataI[k+b]*sin_tab[p];

dataI[k+b]=TI+temp*sin_tab[p]-dataI[k+b]*cos_tab[p];

}/*ENDfor(3*/

}/*ENDfor(2*/

}/*ENDfor(1*/

for(i=0;i

{

w[i]=sqrt(dataR[i]*dataR[i]+dataI[i]*dataI[i];

}

}/*ENDFFT*/

voidInitForFFT(

{

inti;

for(i=0;i

{

sin_tab[i]=sin(PI*2*i/SAMPLENUMBER;

cos_tab[i]=cos(PI*2*i/SAMPLENUMBER;

}

}

clk_init.c的源代码:

#include"myapp.h"

voidCLK_init(

{

ioportunsignedint*clkmd;

clkmd=(unsignedint*0x1c00;

*clkmd=0x2033;//0x2033;//0x2413;//200MHz=0x2513

}

voidSetDSPPLL(unsignedintuPLL

{

ioportunsignedint*clkmd;

clkmd=(unsignedint*0x1c00;

*clkmd=uPLL;

}

voidTMCR_reset(void

{

ioportunsignedint*TMCR_MGS3=(unsignedint*0x07FE;

ioportunsignedint*TMCR_MM=(unsignedint*0x07FF;

*TMCR_MGS3=0x510;

*TMCR_MM=0x000;

}

FFT.c的源代码:

#include"myapp.h"

#include"ICETEK-VC5509-EDU.h"

#include"scancode.h"

#include

#include"ad.h"

#include"AD_FFT.h"

#definePI3.1415926

#defineSAMPLENUMBER128

//voidInitForFFT(;

//voidMakeWave(;

//voidFFT(floatdataR[SAMPLENUMBER],floatdataI[SAMPLENUMBER];

intINPUT[SAMPLENUMBER],DATA[SAMPLENUMBER];

floatfWaveR[SAMPLENUMBER],fWaveI[SAMPLENUMBER];

intnADC0[256],nADC1[256];

floatw[SAMPLENUMBER];

main(

{

inti;

intuWork;

//EnableAPLL(;

//SDRAM_init(;

InitADC(;

PLL_Init(144;

while(1

{

for(i=0;i<256;i++

{

ADCCTL=0x8000;//启动AD转换,通道0

do

{

uWork=ADCDATA;

}while(uWork&0x8000;

nADC0[i]=uWork&0x0fff;

}

for(i=0;i<128;i++

{

INPUT[i]=nADC0[i];

//INPUT[i]=(floatINPUT[i];

}

//asm("nop";//breakpoint

//FFT

InitForFFT(;

for(i=0;i

{

fWaveR[i]=(floatINPUT[i];

fWaveI[i]=0.0f;

w[i]=0.0f;

}

FFT(fWaveR,fWaveI;

for(i=0;i

{

DATA[i]=w[i];

}

//while(1;//breakpoint

}

}

六、实验步骤

1.实验准备:

⑴连接实验设备:

⑵准备信号源进行AD输入。

1取出2根实验箱附带的信号线(两端均为单声道语音插头的信号线。

②用1根信号线连接实验箱底板上信号源I模块的“波形输出”插座和“A/D输入”模块的“ADCIN2”插座,注意插头要插牢、到底。

这样,信号源I的输出波形即可送到ICETEK-VC5509-A板的AD输入通道0。

③用1根信号线连接实验箱底板上信号源II模块的“波形输出”插座和“A/D输入”模块的“ADCIN3”插座,注意插头要插牢、到底。

这样,信号源Ⅱ的输出波形即可送到ICETEK-VC5509-A板的AD输入通道1。

④设置信号源I:

-调整拨动开关“频率选择”拨到“100Hz-1KHz”档。

-将“频率微调”顺时针调到头(最大。

-调整拨动开关“波形选择”拨到“正弦波”档。

-将“幅值微调”顺时针调到头(最大。

⑤设置信号源Ⅱ:

-调整拨动开关“频率选择”拨到“10Hz-100Hz”档。

-将“频率微调”顺时针调到头(最大。

-调整拨动开关“波形选择”拨到“正弦波”档。

-将“幅值微调”顺时针调到头(最大。

⑥将两个信号源的电源开关拨到“开”的位置。

2.设置CodeComposerStudio2.21在硬件仿真(Emulator方式下运行。

3.启动CodeComposerStudio2.21:

选择菜单Debug→ResetCPU。

4.打开工程文件:

-在项目浏览器中,双击main.c,打开main.c文件,浏览该文件的内容,理解各语句作用。

5.编译、下载程序。

6.打开观察窗口:

-选择菜单View->Graph->Time/Frequency…设置好波形观察参数。

7运行程序,观察结果:

观察经D转换和FFT变换后的波形,调整信号源可调部分,观察实时波形随之变化。

8选择菜单File→workspace→saveworkspacsAs…,输入文件名SY.wks。

9退出CCS:

七、实验结果及分析

实验输入的模拟信号如下图所示:

实验所输入模拟信号经FFT变换后的输出:

实验所输入模拟信号经AD转换后的输出:

实验所输入模拟信号经AD转换后的信号经FFT变换后的输出:

八、实验总结

通过本次CCS环境下对模拟信号进行A/D转换和FFT变换的硬件仿真实验,让我掌握了CodeComposerStudio2.21的安装和配置步骤过程;了解了DSP开发系统和计算机与目标系统的连接方法,CodeComposerStudio2.21软件的操作环境和基本功能,TMS320C55xx软件开发过程以及CCS环境下DSP的C语言程序编写方法;学会了创建工程和管理工程的方法,基本的编译和调试功能,以及观察窗口和图形窗口的使用;熟悉了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