目 录
1 引言 ............................................................................................................................ 1 2 基于MATLAB的FFT算法实现 ............................................................................ 2
2.1系统总体流程图 ............................................................................................... 2 2.2 FFT运算规律及编程思想 ............................................................................... 2
2.2.1图像信号的采集 ..................................................................................... 2 2.2.2 DIT-FFT算法的基本原理 ..................................................................... 3 2.2.3 FFT算法的运算规律及编程思想 ......................................................... 5
3 Matlab程序实现 ........................................................................................................ 7
3.1程序运行结果 ................................................................................................... 7 3.2对比结果分析 ................................................................................................... 8 4 系统人机对话界面 .................................................................................................... 9
4.1 GUI简介 .......................................................................................................... 9 4.2 界面设计 .......................................................................................................... 9 4.3 运行调试 ........................................................................................................ 10 5 Matlab软件简介 ...................................................................................................... 11 6 心得体会 .................................................................................................................. 12 参考文献 ...................................................................................................................... 13 附录Ⅰ .......................................................................................................................... 14 附录Ⅱ .......................................................................................................................... 18
课程设计说明书
1 引言
MATLAB是矩阵实验室(Matrix Laboratory)的简称,是美国MathWorks公司出品的商数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。
MATLAB 的应用范围非常广,包括信号和图像处理、通讯、控制系统设计、测试和测量、财务建模和分析以及计算生物学等众多应用领域。附加的工具箱(单独提供的专用 MATLAB 函数集)扩展了 MATLAB 环境,以解决这些应用领域内特定类型的问题。它以矩阵运算为基础,把计算、可视化、程序设计融合在一个简单易用的交互式工作环境中,是一款数据分析和处理功能都非常强大的工程适用软件。它可以将声音文件变换为离散的数据文件,然后利用其强大的矩阵运算能力处理数据,如数据滤波、傅立叶变换、时域和频域分析、声音回放以及各种图的呈现等,它的信号处理与分析工具箱位语音信号分析提供了十分丰富的功能函数,利用这些功能函数可以快捷而又方便的完成语音信号的处理和分析以及信号的可视化。数字信号处理是MATLAB重要应用的领域之一。
对于有限长序列x(n),若要求其N点的傅里叶变换(DFT)需要经过N次复数乘法运算和N*(N-1)次复数加法运算。随着N的增加,运算量将急剧增加,而在实际问题中,N往往是较大的,如当N=1024时,完成复数乘法和复数加法的次数分别为百万以上,无论是用通用计算机还是用DSP芯片,都需要消耗大量的时间和机器内存,不能满足实时的要求。因此,DFT的这种运算只能进行理论上的计算,不适合对实时处理要求高的场合。因此,研究作为DSP的快速算法的FFT是相当必要的,快速傅里叶变换(FFT)是为提高DFT运算速度而采用的一种算法,快速算法的种类很多,而且目前仍在改进和提高,它是根据离散傅里叶变换的奇、偶、虚、实等特性,对离散傅立叶变换的算法进行改进获得的。基于本学期所学的DIT-FFT的运算规律和编程思想以及Matlab的学习和使用,本课设要求在Matlab环境下编写基2 DIT-FFT算法实现对离散信号的快速傅里叶变换,再与Matlab软件自带的FFT函数实现对离散信号的傅里叶变换进行比较,如果得到的频谱相同,那么我们编写的程序就是正确的。本次课程设计是实现对选定图片进行FFT计算、还原(IFFT计算),并与系统FFT函数做对比,进行分析。如果有能力可以选做系统人机对话界面。用GUI界面完成人机交互方便使用的。本课程设计主要是对数字信号的分析。
1
2课程设计说明书
2 基于MATLAB的FFT算法实现
2.1系统总体流程图
本设计要求找到一张明暗对比较大的图片;在Matlab环境下编写基FFT算法;利用自己编写的算法对已选择的图片信号进行计算,并显示出计算的结果,将计算的结果与Matlab数字信号处理工具箱中自带的fft函数进行对比研究,验证自编算法的正确性。系统的总体设计流程图如图2-1所示:
验证自编FFT算法和IFFT算法的正确性 图2-1 系统的总体设计流程图 将显示的结果进行对比 用系统自带的 FFT计算并显示 用系统自带的 I FFT计算并显 用自编的 FFT计算并显示 用自编的 I FFT计算并显示 对图像进行灰度处理 图像信号的采集和读入 2.2 FFT运算规律及编程思想
2.2.1图像信号的采集
图像信号最好采用明暗对比比较大的灰度图像进行分析,这样实验结果对比比较明显。
在Matlab中用语句:
[filename, pathname]=uigetfile({'*.jpg;*.tif;*.bmp;*.gif' },'File Selector');
2
课程设计说明书
image=imread(strcat(pathname,filename));
用于读取图片的信号,Matlab图像分析支持多种格式的图像信号,用上述语句时,在Matlab中分析图像的时候可以系统自动检索所需分析的图片。
语句:image=rgb2gray(image);可以对图像进行灰度处理。 当我们要将图片显示出来的的时候只需要用语句: imshow(image);
本次课程设计就是分析灰度图像。通过用两种不同的方法对灰度图像的FFT计算和IFFT计算,来得到我们想要的结果。
采集到图像信号之后,就可以对图像信号进行分析和计算了。
2.2.2 DIT-FFT算法的基本原理
快速傅里叶变换(FFT)是为提高DFT运算速度而采用的一种算法。 对一个有限长度序列x(n)的N点的DFT为: nkX?k???x?n?WN,k?0,1,2,...,N?1n?0N?11x?n??N ?X?k?Wk?0N?1?nkN,n?0,1,2,...,N?1所以,要求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)可约性
kn(k?N)nk(n?N)WN?WN?WNkn(?k)n*k(?n)*WN?[WN]?[WN]mknWNkn?WmN,/mWNkn?WNkn/m本次课设要求用用基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点序列按照同样的划分原则,可以划分为两个
3