唐山学院
数字信号处理课程设计
题目基于MATLAB的FFT算法的设计
系(部)智能与信息工程学院matlab求傅里叶变换
班级13电信本1班
姓名李玉娇
学号4130220204
指导教师王超张雅静
2016年2月29日至3月11日共2周
2016年3月11日
目录
1引言 (1)
2设计任务和原理 (2)
2.1设计任务 (2)
2.2设计原理 (2)
3软件介绍 (5)
3.1软件概述 (5)
3.2界面基本操作 (5)
3.3MATLAB主要特点 (8)
4MATLAB程序实现 (9)
4.1程序流程图 (9)
4.2程序分析 (9)
4.2.1原始图像程序及分析 (9)
4.2.2灰度图像程序及分析 (10)
4.2.3自建的FFT程序及分析 (11)
4.2.4自建的IFFT程序及分析 (12)
4.2.5内置的FFT程序及分析 (12)
4.2.6内置的IFFT程序及分析 (13)
4.3程序运行结果 (13)
4.4自建FFT与内置FFT图形及比较 (14)
4.5IFFT结果与原灰度图形及比较 (15)
5GUI界面 (16)
5.1GUI简介 (16)
5.2界面设计 (16)
5.3运行调试 (19)
6总结体会 (20)
参考文献 (21)
附录ⅠFFT算法的程序 (22)
附录ⅡGUI设计的程序 (26)
1引言
数字信号处理(Digital Signal Processing,DSP)是一门涉及许多学科而又广泛应用于许多领域的新兴学科,是一种通过使用数学技巧执行转换或提取信息,来处理显示信号的方法,这些信号由数字序列表示。随着信息时代,数字时代的到来,数字信号处理已经成为一门极其重要的学科和技术领域。以DSP为核心芯片的处理系统日益变成了数字信号处理系统的主流。它广泛用于电子信息、通信、图像处理、语音处理、生物医学、自动控制、地质探测等领域,受到工程设计和使用人员的青睐。
FFT(Fast Fourier Transformation),即为快速傅立叶变换,是离散傅立叶变换的快速算法,它是根据离散傅氏变换的奇、偶、虚、实等特性,对离散傅立叶变换的算法进行改进获得的。它对傅氏变换的理论并没有新的发现,但是对于在计算机系统或者说数字系统中应用离散傅立叶变换,可以说是进了一大步,在实际应用中,FFT是最常见的数字信号处理算法,它在各种数字信号处理系统中扮演重要的角。在信号处理过程中。频域分析往往比时域分析方便和高效,FFT 是时域和频域转换的基本运算。
正是鉴于DFT极为复杂的时间复杂度,1965年J.W.Cooley和J.W.Tukey巧妙的利用W N因子的周期性和对称性,提出了一个DFT的快速算法,即快速傅立叶变换(FFT),从而使得DFT在信号处理中才得到真正的广泛应用。
DFT是一种应用广泛的数学变换工具,MATLAB是一款功能强大的科学计算语言。MATLAB提供的FFT函数解决了DFT的快速计算问题,但由于它是内建函数而不能了解到软件实现的过程。本文以按时间抽取的基2FFT算法为例,根据快速傅立叶变换的原理和规律,绘出了算法实现的程序框图,列出了MATLAB环境下软件实现的程序,建立了从算法理论到程序实现的完整概念。
在信号处理中,DFT(离散傅立叶变换)的计算具有举足轻重的地位。但是基于其复杂的计算,直接应用起来十分麻烦,基于此,本文利用MATLAB软件对有限长度信号的DFT进行改进,提出FFT(快速傅立叶变换),并利用FFT 对所给连续时间和离散时间信号做了频谱分析。
图像信号的处理主要是用MATLAB作为工具平台,设计中涉及到图像的选取、存储和读取、灰度处理、FFT变换、IFFT变换、频谱分析。通过数字信号处理课程的理论知识的综合运用,以及选做系统人机对话界面,用GUI界面完成人机交互使用,从实践上初步实现对数字信号的处理。
2设计任务和原理
2.1设计任务
所设计的FFT算法应完成以下功能:
(1)在MATLAB环境下编写FFT算法(不调用系统现有函数);
(2)实现对选定图片进行FFT计算、还原(IFFT计算),并与系统FFT函数做对比,进行分析;
(3)设计GUI界面。
设计要求:
1.根据题目要求进行算法GUI总体设计。
2.完成算法具体部分的设计。
(1)算法原理图。
(2)算法原理说明。
3.算法程序的设计。
(1)对选定图片进行自编FFT计算与还原,并与自带函数进行对比;
(2)完整源程序。
2.2设计原理
对于有限长序列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函数实现对离散信号的傅里叶变换进行比较,如果得到的频谱相同,那么我们编写的程序就是正确的。其中离散信号是自己选取的图像信号,用MATLAB处理得到频谱图以及选用系统人机对话界面,用GUI界面完成人机交互。
快速傅立叶变换(FFT)是为提高DFT运算速度而采用的一种算法。
对一个有限长度序列x(n)的N 点的DFT 为:
10X k (n ),0,1,2,...,N 1
N n k N n x k W -==-∑()=101X (k),n 0,1,2,...,N 1
N nk N k x N W --==-∑(n)=所以,要求N 点的DFT ,需N 2的复数乘法运算,)1(*-N N 次复数乘法运算。随着N 的增加,运算量将急剧增加,而在实际问题中,N 往往是较大的,如当N=1024时,完成复数乘法和复数加法的次数分别为百万以上,无论是用通用计算机还是用DSP 芯片,都需要消耗大量的时间,不能满足事实的要求,不适合对实时处理要求高的场合。为了能实时处理DFT ,要想减少DFT 的运算量可以有两个途径:一是降N ,N 的值减小了,运算量就减少了;第二是利用旋转因子的周期性,对称性和可约性。利用这两个途径实现DFT 的快速傅立叶变换(FFT ),FFT 算法基本上可分为按时间抽取的FFT 算法(FFT )和按频率抽取的FFT 算法(FFT )。
旋转因子的性质:
周期性
(k N)n (n N)N kn k N N W W W ++==共轭对称性
(k)n (n)N ]*[]*[kn k N N W W W --==可约性W km
mnk N nN W =,//W km mk n
N N n W =本次课设要求用基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点序列按照同样的划分原则,可以划分为两个N/4点序列,最后,将原序列划分为多个2点序列,将计算量大大降低。
按时间下标的奇偶将N 点x(n)分别抽取组成两个N/2点序列,分别记为x 1(n)和x 2(n),将的DFT 转化为x 1(n)和x 2(n)的DFT 的计算。
1,,1,0,)()12()()2(21-=⎭⎬⎫=+=N r r x r x r x r x
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论