数字信号处理实验报告实验名称:实验五基于E300TECHV6713的快速傅里叶变换实验实验时间:2014年11月18日学号:201211106134姓名:孙舸成绩:评语:一、实验目的:1、加深对DFT算法原理和基本性质的理解;2、熟悉FFT算法原理和FFT子程序的应用;3、学习用FFT对连续信号和时域信号进行谱分析的方法,了解可能出现的分析误差及其原因,以便在实际中正确应用FFT。二、实验原理与步骤:(一)实验原理:1、离散傅立叶变换DFT的定义:将时域的采样变换成频域的周期性离散函数,频域的采样也可以变换成时域的周期性离散函数,这样的变换称为离散傅立叶变换,简称DFT。2、FFT是DFT的一种快速算法,将DFT的N2步运算减少为(N/2)log2N步,极大的提高了运算的速度。3、旋转因子的变化规律。4、蝶形运算规律。5、基-2FFT算法。(二)实验步骤:1、复习DFT的定义、性质和用DFT作谱分析的有关内容;2、复习FFT算法原理与编程思想,并对照DIT-FFT运算流程图和程序框图,分析本实验提供的FFT样例子程序;3、运行CCS软件,对样例程序进行跟踪,分析结果;记录必要的参数。4、填写实验报告。5、样例程序实验操作说明A、实验前准备:1)正确完成计算机、E300的连接;2)用音频线连接音源和E300板的MIC_IN,系统上电;B、实验启动CCS,Project/Open打开“..\Algorithm\02FFT\example.pjt”工程文件;双击“example.pjt”及“Source”可查看各源程序;加载“example.out”;在主程序中,k++处设置断点;单击“Run”运行程序,程序将运行至断点处停止;用View/Graph/Time/Frequency打开一个图形观察窗口;设置该观察图形窗口变量及参数;采用双踪观察在启始地址分别为x和mo,长度为1024,数值类型为32位有符号浮点变量,如图所示;数组x和mo分别存放的是经A/D转换后的语音信号和对该信号进行FFT变换的结果;单击“Animate”或按F10运行程序;调整观察窗口并同步观察输入语音信号波形及其FFT变换结果;单击“Halt”暂停程序运行,关闭窗口,本实验结束。三、实验内容及结果:(一)内容:启动CCS,Project/Open打开“..\Algorithm\02FFT\example.pjt”工程文件;双击“example.pjt”及“Source”可查看各源程序;加载“example.out”;在主程序中,k++处设置断点;单击“Run”运行程序,程序将运行至断点处停止;用View/Graph/Time/Frequency打开一个图形观察窗口;设置该观察图形窗口变量及参数;采用双踪观察在启始地址分别为x和mo,长度为1024,数值类型为32位有符号浮点变量,如图所示;数组x和mo分别存放的是经A/D转换后的语音信号和对该信号进行FFT变换的结果;单击“Animate”或按F10运行程序;调整观察窗口并同步观察输入语音信号波形及其FFT变换结果。(二)实验结果:a.源程序:#includeConfig1cfg.h//定义包含的库#includestdio.h#includec6x.h#includec6211dsk.h#includecsl_pll.h#includecsl.h#includee300_codec.h#includemath.h#defineLength1024//宏定义#defineLen10//==================================================intin;floatx[Length],mo[Length];floatpr[Length],pi[Length],fr[Length],fi[Length];//定义数组intxm,i,n,k;//定义变量//LeftandrightsignalsamplesunsignedintxL,xR;//==================================================voidmain()//主函数{unsignedintdat;init_sys();initial_aic23();delay_SYS(1);initial_mcbsp1();//子函数声明i=0;//初始化变量k=0;n=Length;for(;;)//死循环{for(i=0;i=n-1;i++){mcbsp1Rx_ready();dat=(*(unsignedint*)0x1900000);//DRR1;in=(intshort)dat;//xm=x[i]=(float)in;//32768.0;pr[i]=x[i];pi[i]=0;}kfft(pr,pi,Length,Len,fr,fi,0,1);for(i=0;i=n-1;i++){mo[i]=sqrt(fr[i]*fr[i]+fi[i]*fi[i]);//快速傅里叶变换}k++;}}b.图:下图是输入两个不同的音频信号得到的波形:改变length的值:当length=512时:当length=128时:五、思考题:1、对于不同的N,幅频特性会相同吗?为什么?答:对于不同的N,幅频特性不相同,因为他们函数表达式不相同,模不相同。2、FFT进行谱分析,可以应用在什么方面?答:FFT只是DFT的一种快速算法,所以FFT的运算结果必然满足DFT的基本性质。可以应用在对周期信号频谱分析和对模拟信号频谱分析。3、结合实验中所给定典型序列幅频特性曲线,与理论结果比较,并分析说明误差产生的原因以及用FFT作谱分析时有关参数的选择方法。答:误差主要来自于用FFT作频谱分析时,得到的是离散谱,而信号(周期信号除外)是连续谱,只有当N较大时离散谱的包络才能逼近于连续谱,因此N要适当选择大一些。对信号进行谱分析的重要问题是频谱分辨率D和分析误差。频谱分辨率直接和FFT的变换区间N有关,因为FFT能够实现的频率分辨率是2π/N≤D。可以根据此时选择FFT的变换区间N。4、总结实验所得主要结论。给的输入信号不同,得到的结果也不同。FFT只是DFT的一种快速算法,所以FFT的运算结果必然满足DFT的基本性质。只有当N较大时离散谱的包络才能逼近于连续谱,因此N要适当选择大一些。对信号进行频谱分析时,数据样本应有足够的长度,一般FFT程序中所用数据点数与原含有信号数据点数相同,这样的频谱图具有较高的质量,可减小因补零或截断而产生的影响。周期信号的频谱是离散谱,只有用整数倍周期的长度作FFT,得到的离散谱才能代表周期信号的频谱。如果不知道信号周期,可以尽量选择信号的观察时间长一些。对模拟信号的频谱时,首先要按照采样定理将其变成时域离散信号。如果是模拟周期信号,也应该选取整数倍周期的长度,经过采样后形成周期序列,按照周期序列的谱分析进行。