基于DSP的FFT的实现邵阳学院课程设计目录1绪论(1)1.1课题来源(1)1.2课题研究的目的意义(1)1.3国内外现状及水平(1)2开发运行环境CCS..............................................错误!未定义书签。3系统方案设计..(4)3.1设计原理(4)4软件设计(7)4.1程序流程图(7)4.2源程序(8)4.3设计步骤(8)总结(14)参考文献(15)致谢(16)附录(17)第1章绪论1.1课题来源傅立叶变换是一种将信号从时域变换到频域的变换形式,是声学,语音,电信和信号处理等领域中一种重要的分析工具。快速傅立叶变换(FFT)是快速计算DFT的一种高效方法,FFT的出现使DFT的运算大大简化,运算时间缩短一至两个数量级之多,DSP芯片的出现使FFT的实现变得更加方便。1.2课题研究的目的意义随着电子技术和集成电路技术的飞速发展,数字信号处理已经广泛地应用于通信、信号处理、生物医学以及自动控制等领域中。离散傅立叶变换(DFT)及其快速算法FFT作为数字信号处理的基本变换,有着广泛的应用。特别是近年来,基于FFT的ODFM技术的兴起,进一步推动了对高速FFT处理器的研究。FFT算法从出现到现在已有四十多年代历史,算法理论已经趋于成熟,但是其具体实现方法却值得研究。面向高速、大容量数据流的FFT实时处理,可以通过数据并行处理或者采用多级流水线结构来实现。特别是流水线结构使得FFT处理器在进行不同点数的FFT计算时可以通过对模板级数的控制很容易的实现。分析和比较了各种FFT算法后,选择基2和基4混合频域抽取算法作为FFT处理器的而实现算法,一种高速、处理点数可变的流水线结构FFT处理器的实现方法。1.3国内外现状及水平数字信号处理(DigitalSignalProcessing,简称DSP)是一门涉及许多学科而又广泛应用于许多领域的新兴学科。DSP有两种含义:DigitalSignalProcessing(数字信号处理)、DigitalSignalProcessor(数字信号处理器)。我们常说的DSP指的是数字信号处理器。数字信号处理器是一种适合完成数字信号处理运算的处理器。20世纪60年代以来,随着计算机和信息技术的飞速发展,数字信号处理技术应运而生并得到迅速的发展。在过去的二十多年时间里,数字信号处理已经在通信等领域得到极为广泛的应用。数字信号处理是利用计算机或专用处理设备,以数字形式对信号进行采集、变换、滤波、估值、增强、压缩、识别等处理,以得到符合人们需要的信号形式。数字信号处理是以众多学科为理论基础的,它所涉及的范围及其广泛。例如,在数学领域,微积分、概率统计、随机过程、数值分析等都是数字信号处理的基本工具,与网络理论、信号与系统、控制论、通信理论、故障诊断等也密切相关。近来新兴的一些学科,如人工智能、模式识别、神经网络等,都与数字信号处理密不可分。可以说,数字信号处理是把许多经典的理论体系作为自己的理论基础,同时又使自己成为一系列新兴学科的理论基础。DSP主要应用在数字信号处理中,目的是为了能够满足实时信号处理的要求,因此需要将数字信号处理中的常用运算执行得尽可能快,这就决定了DSP的特点和关键技术。适合数字信号处理的关键技术:DSP包含乘法器、累加器、特殊地址产生器、领开销循环的等;提高处理速度的关键技术:流水线技术、并行处理技术、超常指令(VLIW)、超标量技术、DMA等。从广义上讲,DSP、微处理器和微控制器(单片机)等都属于处理器,可以说DSP是一种CPU。DSP和一般的CPU又不同,最大的区别在于:CPU是冯.诺伊曼结构的;DSP是数据和地址空间分开的哈佛结构。第2章系统开发平台与环境TICodeComposerStudio(CCStudio)是TIeXpressDSPTM实时软件技术的重要组成部分,它可以使开发人员充分应用DSP的强大功能。随着TI的TMS320C5000(C5K)和TMS320C6000(C6K)DSP平台的应用范围不断扩大,已经由其应用于下载视频流的手持因特网接入产品扩展到蜂窝通信网络和光网络的通信基础设施,eXpressDSPTM也便获得了越来越多软件工程师的青睐。eXpressDSP还包含了DSP/BIOS可伸缩内核,TMS320TMDSP标准算法的应用互操作性和可重复使用性以及400多家第三方厂商支持。大部分厂商提供eXpressDSP兼容算法、即插式应用以及种类繁多的硬件配件和咨询服务。CodeComposerStudio3.1能够使开发人员编制出更多面向高级DSP应用的、紧凑的高性能代码。通过实时接入的DSP开发者之家网站,内置UpdateAdvisor对最新的工具、驱动程序及其技术进行自动的流线式管理。只要确保代码和功能调用的正确输入,凭借编辑器程序中的DynamicCodeMaestro技术即可快速生成C和C++编码。TI的eXpressDSP产品市场营销经理MikeTrujillo说:通过充分利用CCS的工具与功能,编程人员能够大大缩短应用开发的时间。使用CCStudio生成的高度优化代码,工程师能够最大限度地发挥高性能DSP的全部功能,或者,在其它情况下能够以成本更低的器件来满足其应用需求。CodeComposerStudiov3.1使开发人员能够无缝管理任何复杂程度的项目,其项目管理器通过一个集成版本的控制接口与通用资源控制器连接,管理着成千上万的文件。同时支持外部“文件制作”功能,使项目能够在PC和UNIX平台上交叉运行。他们可以通过采用一个改进的产品开发流程,就可实现同一组项目文件的共享。于是可以使他们的开发周期缩短数周,并获得时间上提前于竞争对手推向市场的优势。对于那些希望把业界领先的C6000TMDSP平台的高性能与C5000TMDSP平台的低功耗相结合的系统开发者来说,CodeComposerStudiov3.1为使其同时调试混合多处理器成为了可能。CodeComposerStudiov3.1还增加了实时数据交换(RTDXTM)仿真功能,可支持来自任何地方的2至50个C5000和C6000DSP器件同时运行。此外,支持RTDX的仿真器还实现了实时DSP/BIOSTM仿真调试,该高级调试功能可以使开发人员更深入地了解DSP代码在硬件或仿真状态中的运行情况。3系统方案设计3.1设计原理3.1.1离散傅里叶变换DFT对于长度为N的有限长序列x(n),它的离散傅里叶变换(DFT)为X(k)=∑∞=0*)(nWnxN-nk(1)式中,WN=e-j*2π/N,称为旋转因子或蝶形因子。从DFT的定义可以看出,在x(n)为复数序列的情况下,对某个k值,直接按(1)式计算X(k)只需要N次复数乘法和(N-1)次复数加法。因此,对所有N个k值,共需要N2次复数乘法和N(N-1)次复数加法。对于一些相当大有N值(如1024点)来说,直接计算它的DFT所需要的计算量是很大的,因此DFT运算的应用受到了很大的限制。3.1.2快速傅里叶变换FFT旋转因子WN有如下的特性。对称性:WNk+N/2=-WNk(2)周期性:WNn(N-k)=WNk(N-n)=WN-nk(3)利用这些特性,既可以使DFT中有些项合并,减少了乘法积项,又可以将长序列的DFT分解成几个短序列的DFT。FFT就是利用了旋转因子的对称性和周期性来减少运算量的。FFT的算法是将长序列的DFT分解成短序列的DFT。例如:N为偶数时,先将N点的DFT分解为两个N/2点的DFT,使复数乘法减少一半:再将每个N/2点的DFT分解成N/4点的DFT,使复数乘又减少一半,继续进行分解可以大大减少计算量。最小变换的点数称为基数,对于基数为2的FFT算法,它的最小变换是2点DFT。一般而言,FFT算法分为按时间抽取的FFT(DITFFT)和按频率抽取的FFT(DIFFFT)两大类。DIFFFT算法是在时域内将每一级输入序列依次按奇/偶分成2个短序列进行计算。而DIFFFT算法是在频域内将每一级输入序列依次奇/偶分成2个短序列进行计算。两者的区别是旋转因子出现的位置不同,得算法是一样的。在DIFFFT算法中,旋转因子WN出现在输入端,而在DIFFFT算法中它出现在输入端。假定序列x(n)的点数N是2的幂,按照DIFFFT算法可将其分为偶序列和奇序列。偶序列:x(2r)=x1(r)奇序列:x(2r+1)=x2(r)其中:r=0,1,2,…,N/2-1,则x(n)的DFT表示为式中,X1(k)和X2(k)分别为X1(r)和X2(r)的N/2的DFT。由于对称性,WNk+N/2=-WNk。因此,N点DFT可分为两部分:前半部分:x(k)=x1(k)+WkNx2(k)(4)后半部分:x(N/2+k)=x1(k)-WkNx2(k)k=0,1,…,N/2-1(5)从式(4)和式(5)可以看出,只要求出0~N/2-1区间x1(k)和x2(k)的值,就可求出0~N-1区间x(k)的N点值。以同样的方式进行抽取,可以求得N/4点的DFT,重复抽取过程,就可以使N点的DFT用上组2点的DFT来计算,这样就可以大减少运算量。基2DIFFFT的蝶形运算如图3.1所示。设蝶形输入为x1(k)和x2(k),输出为x(k)和x(N/2+K),则有x(k)=x1(k)+WkNx2(k)(6)x(N/2+k)=x1(k)-WkNx2(k)(7)在基数为2的FFT中,设N=2M,共有M级运算,每级有N/2个2点FFT()()()()111NNNnknknkNNNnnnXkxnWxnWxnW---=====+∑∑∑n为偶数n为奇数()()()/21/212120221NNrkrkNNrrxrWxrW--+===++∑∑()()()()/21/21221200NNrkrkkNNNrrxrWWxrW--===+∑∑()()/21/211/22/2NNrkkrkNNNrrxrWWxrW--===+∑∑()()12kNXkWXk=+,0,1,.../21rkN=-蝶形运算,因此,N点FFT总共有MN/2个蝶形运算。图3.1基2DIFFFT的蝶形运算例如:基数为2的FFT,当N=8时,共需要3级,12个基2DITFFT的蝶形运算。其信号流程如图3.2所示。x(0)x(0)WN0x(4)x(1)-1WN0x(2)x(2)-1WN0WN2x(6)x(3)-1-1WN0x(1)x(4)-1WN0WN1x(5)x(5)-1-1WN0WN2x(3)x(6)-1-1WN0WN2WN3x(7)x(7)A+BCA-BC-1-1-1图3.28点基2DIFFFT蝶形运算从图(b)可以看出,输入是经过比特反转的倒位序列,称为位码倒置,其排列顺序为x(0),x(4),x(2),x(6),x(1),x(5),x(3),x(7),输出是按自然顺序排列,其顺序为x(0),x(1),x(2),x(3),x(4),x(5),x(6),x(7).4软件设计4.1程序流程图图4.1程序流程图4.2源程序见附录。4.3设计步骤(1)启动CCS,在CCS中建立一个C源文件和一个命令文件,并将这两个文件添加到工程,再编译并装载程序:阅读DSP原理及应用中FFT用DSP实现的有关程序。双击,启动CCS的仿真平台的配着选项。选择C5502Simulator。(2)启动CCS2后建立工程文件FFT.pjt图4.3创建新工程的界面(3)建立源文件FFT.c与链接文件FFT.cmd图4.4创建新程序的界面(4)将这两个文件加到FFT.pjt这个工程中。图4.5添加工程所需文件的界面(5)创建out文件图4.6程序编译的界面(6)加载out文件图4.7加载.out文件的界面(7)加载数据图4.8加载数据的界面(8)观察输入输出波形图4.9输入波形(时域)图4.10输出图形(频域)总结通过这次DSP课程设计,加深对DFT算法原理和基本性质的理解,熟悉了FFT的算法原理和FFT子程序的算法流程和应用,掌握了DSP中FFT的设计和编程思想,以及用FFT对连续信号和时域信号进行