目录1引言............................................................................................................................12基于MATLAB的FFT算法实现............................................................................22.1系统总体流程图...............................................................................................22.2FFT运算规律及编程思想...............................................................................22.2.1图像信号的采集.....................................................................................22.2.2DIT-FFT算法的基本原理.....................................................................32.2.3FFT算法的运算规律及编程思想.........................................................53Matlab程序实现........................................................................................................73.1程序运行结果...................................................................................................73.2对比结果分析...................................................................................................84系统人机对话界面....................................................................................................94.1GUI简介..........................................................................................................94.2界面设计..........................................................................................................94.3运行调试........................................................................................................105Matlab软件简介......................................................................................................116心得体会..................................................................................................................12参考文献......................................................................................................................13附录Ⅰ..........................................................................................................................14附录Ⅱ..........................................................................................................................18课程设计说明书11引言MATLAB是矩阵实验室(MatrixLaboratory)的简称,是美国MathWorks公司出品的商数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。MATLAB的应用范围非常广,包括信号和图像处理、通讯、控制系统设计、测试和测量、财务建模和分析以及计算生物学等众多应用领域。附加的工具箱(单独提供的专用MATLAB函数集)扩展了MATLAB环境,以解决这些应用领域内特定类型的问题。它以矩阵运算为基础,把计算、可视化、程序设计融合在一个简单易用的交互式工作环境中,是一款数据分析和处理功能都非常强大的工程适用软件。它可以将声音文件变换为离散的数据文件,然后利用其强大的矩阵运算能力处理数据,如数据滤波、傅立叶变换、时域和频域分析、声音回放以及各种图的呈现等,它的信号处理与分析工具箱位语音信号分析提供了十分丰富的功能函数,利用这些功能函数可以快捷而又方便的完成语音信号的处理和分析以及信号的可视化。数字信号处理是MATLAB重要应用的领域之一。对于有限长序列x(n),若要求其N点的傅里叶变换(DFT)需要经过2N次复数乘法运算和N*(N-1)次复数加法运算。随着N的增加,运算量将急剧增加,而在实际问题中,N往往是较大的,如当N=1024时,完成复数乘法和复数加法的次数分别为百万以上,无论是用通用计算机还是用DSP芯片,都需要消耗大量的时间和机器内存,不能满足实时的要求。因此,DFT的这种运算只能进行理论上的计算,不适合对实时处理要求高的场合。因此,研究作为DSP的快速算法的FFT是相当必要的,快速傅里叶变换(FFT)是为提高DFT运算速度而采用的一种算法,快速算法的种类很多,而且目前仍在改进和提高,它是根据离散傅里叶变换的奇、偶、虚、实等特性,对离散傅立叶变换的算法进行改进获得的。基于本学期所学的DIT-FFT的运算规律和编程思想以及Matlab的学习和使用,本课设要求在Matlab环境下编写基2DIT-FFT算法实现对离散信号的快速傅里叶变换,再与Matlab软件自带的FFT函数实现对离散信号的傅里叶变换进行比较,如果得到的频谱相同,那么我们编写的程序就是正确的。本次课程设计是实现对选定图片进行FFT计算、还原(IFFT计算),并与系统FFT函数做对比,进行分析。如果有能力可以选做系统人机对话界面。用GUI界面完成人机交互方便使用的。本课程设计主要是对数字信号的分析。课程设计说明书22基于MATLAB的FFT算法实现2.1系统总体流程图本设计要求找到一张明暗对比较大的图片;在Matlab环境下编写基FFT算法;利用自己编写的算法对已选择的图片信号进行计算,并显示出计算的结果,将计算的结果与Matlab数字信号处理工具箱中自带的fft函数进行对比研究,验证自编算法的正确性。系统的总体设计流程图如图2-1所示:图2-1系统的总体设计流程图2.2FFT运算规律及编程思想2.2.1图像信号的采集图像信号最好采用明暗对比比较大的灰度图像进行分析,这样实验结果对比比较明显。在Matlab中用语句:[filename,pathname]=uigetfile({'*.jpg;*.tif;*.bmp;*.gif'},'FileSelector');对图像进行灰度处理用系统自带的IFFT计算并显示用自编的FFT计算并显示用自编的IFFT计算并显示将显示的结果进行对比验证自编FFT算法和IFFT算法的正确性用系统自带的FFT计算并显示图像信号的采集和读入课程设计说明书3image=imread(strcat(pathname,filename));用于读取图片的信号,Matlab图像分析支持多种格式的图像信号,用上述语句时,在Matlab中分析图像的时候可以系统自动检索所需分析的图片。语句:image=rgb2gray(image);可以对图像进行灰度处理。当我们要将图片显示出来的的时候只需要用语句:imshow(image);本次课程设计就是分析灰度图像。通过用两种不同的方法对灰度图像的FFT计算和IFFT计算,来得到我们想要的结果。采集到图像信号之后,就可以对图像信号进行分析和计算了。2.2.2DIT-FFT算法的基本原理快速傅里叶变换(FFT)是为提高DFT运算速度而采用的一种算法。对一个有限长度序列x(n)的N点的DFT为:所以,要求N点的DFT,需要N2次的复数乘法运算,N*(N-1)次复数乘法运算算。随着N的增加,运算量将急剧增加,而在实际问题中,N往往是较大的,如当N=1024时,完成复数乘法和复数加法的次数分别为百万以上,无论是用通用计算机还是用DSP芯片,都需要消耗大量的时间,不能满足实时的要求,,不适合于对实时处理要求高的场合。为了能实时处理DFT,要想减少DFT的运算量可以有两个途径:第一是降N,N的值减小了,运算量就减少了;第二是利用旋转因子的周期性,对称性和可约性。利用这两个途径实现DFT的快速傅里叶变换(FFT),FFT算法基本上可分为按时间抽取的FFT算法(DIT-FFT)和按频率抽取的FFT算法(DIF-FFT)。旋转因子的性质:(1)周期性(2)共轭对称性(3)可约性本次课设要求用用基2的按时间抽取的FFT算法(DIT-FFT)实现FFT功能,设序列x(n)的长度为N,且N满足N=2M,M为正整数。若N不能满足上述关系,可以将序列x(n)补零实现。按时间抽取基2-FFT算法的基本思路是将N点序列按时间下标的奇偶分为两个N/2点序列,计算这两个N/2点序列的N/2点DFT,计算量可减小约一半;每一个N/2点序列按照同样的划分原则,可以划分为两个1010,0,1,2,...,11,0,1,2,...,1NnkNnNnkNkXkxnWkNxnXkWnNN)()(NnkNnNkNknN*)(*)(][][nkNnkNknNmknmNknNmknmNknN课程设计说明书4N/4点序列,最后,将原序列划分为多个2点序列,将计算量大大降低。按时间下标的奇偶将N点x(n)分别抽取组成两个N/2点序列,分别记为x1(n)和x2(n),将x(n)的DFT转化为x1(n)和x2(n)的DFT的计算。利用旋转因子的可约性,即:用蝶形运算可表示为如图2-2所示:以此类推,还可以把x1(n)和x2(n)按n值得奇偶分为两个序列,这样就达到了降N得目的,从而减少了运算量。FFT对DFT的数学运算量改进:直接采用DFT进行计算,运算量为N2次复数乘法和N*(N-1)次复数乘法。当采用M次FFT时,由N=2M求得M=logN,运算流图有M级蝶形,每一级都由N/2个蝶形运算构成,这样每一级蝶形运算都需要N/2次复数乘法和N次复数加法。M级运算共需要复数乘法次数为C=N/2*M,复数加法次数为C=N*M。1N