点基于DIT的FFT的实现.doc
- 文档编号:1265584
- 上传时间:2022-10-19
- 格式:DOC
- 页数:27
- 大小:954.12KB
点基于DIT的FFT的实现.doc
《点基于DIT的FFT的实现.doc》由会员分享,可在线阅读,更多相关《点基于DIT的FFT的实现.doc(27页珍藏版)》请在冰豆网上搜索。
武汉理工大学《数字信号处理》课程设计说明书
课程设计任务书
学生姓名:
专业班级:
指导教师:
工作单位:
题目:
8点基于DIT的FFT的实现
初始条件:
具备Matlab编程能力;
熟悉基于DIT的FFT的实现原理;
提供编程所需要的计算机一台。
要求完成的主要任务:
(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)
1、编写一个8点的基于DIT的FFT函数,不能使用matlab自带的FFT实现函数;
2、并调用该函数实现16点的FFT运算,用matlab自带函数对运行结果结果进行验证;
3、完成符合学校要求的设计说明书。
时间安排:
一周,其中3天程序设计,2天程序调试
指导教师签名:
年月日
系主任(或责任教师)签名:
年月日
目录
摘要 I
1概述 1
1.1快速傅立叶变换(FFT)简介 1
1.2MATLAB简介 2
2直接计算DFT的问题及改进 3
2.1直接计算DFT的运算量 3
2.2改进措施 4
3按时间抽选的基-2FFT算法(DIT-FFT) 5
3.1DIT-FFT算法原理 5
3.2DIT-FFT的运算量 11
3.3DIT-FFT算法的特点 12
3.4N=16时的DIT-FFT算法 14
4MATLAB程序代码 15
4.1N=8点DIT-FFT代码 15
4.2N=16点DIT-FFT代码 16
5MATLAB仿真结果及验证 17
5.1DIT-FFT函数调试 17
5.2DIT-FFT函数运行结果 18
5.3调用系统函数验证 19
6心得体会 21
参考文献 22
武汉理工大学《数字信号处理》课程设计说明书
摘要
此次课设目的是利用MATLAB实现8点基于DIT的FFT的仿真,不使用MATLAB自带的FFT实现函数。
本文先就直接计算傅立叶变换(DFT)存在的问题进行讨论,之后详细介绍了快速傅立叶变换(FFT)的原理以及推导过程,给出了8点FFT的蝶形流图以及MATLAB仿真的程序代码,并通过调用该函数代码计算16点的FFT。
最后给出了仿真调试结果和此次课设的总结。
关键词:
FFT;MATLAB;仿真
Abstract
TheaimofthisCourseDesignistouseMATLABtoachieve8-pointDIT-FFTsimulation,andcannotusethebuilt-inMATLABFFTfunctiontorealize.ThebeginningofthisarticlediscusstheproblemsofdirectcalculationoftheFouriertransform(DFT),andthenintroducestheprincipleofFastFourierTransform(FFT)andtheprocessofderivation.Thenthereisgivenbutterflyflowdiagramof8-pointFFTandtheMATLABsimulationprogramcode,andrealize16-pointFFTcalculationbycallingthefunctioncode.Finally,enumerate thesimulationresultsand make thesummaryofthiscurriculumdesign.
Keywords:
FFT;MATLAB;Simulation
I
1概述
1.1快速傅立叶变换(FFT)简介
傅立叶变换,表示能将满足一定条件的某个函数表示成三角函数(正弦和/或余弦函数)或者它们的积分的线性组合。
傅立叶变换是一种分析信号的方法,它可分析信号的成分,也可用这些成分合成信号。
傅立叶变换是声学、语音、电信和信号处理等领域中一种重要的分析工具。
在不同的研究领域,傅立叶变换具有多种不同的变体形式,如连续傅立叶变换和离散傅立叶变换。
离散傅立叶变换(DFT),是傅立叶变换在时域和频域上都呈现离散的形式,将时域信号的采样变换为在离散时间傅立叶变换(DTFT)频域的采样。
在形式上,变换两端(时域和频域上)的序列是有限长的,而实际上这两组序列都应当被认为是离散周期信号的主值序列。
即使对有限长的离散信号作DFT,也应当将其看作经过周期延拓成为周期信号再作变换。
有限长序列可以通过离散傅立叶变换(DFT)将其频域也离散化成有限长序列。
但其计算量太大,很难实时地处理问题,因此引出了快速傅立叶变换(FFT)。
1965年,Cooley和Tukey提出了计算离散傅立叶变换(DFT)的快速算法,将DFT的运算量减少了几个数量级。
从此,对快速傅立叶变换(FFT)算法的研究便不断深入,数字信号处理这门新兴学科也随FFT的出现和发展而迅速发展。
根据对序列分解与选取方法的不同而产生了FFT的多种算法,基本算法是基2DIT和基2DIF。
FFT在离散傅立叶反变换、线性卷积和线性相关等方面也有重要应用。
计算离散傅立叶变换的快速方法,有按时间抽取的FFT算法(DIT-FFT)和按频率抽取的FFT算法(DIF-FFT)。
前者是将时域信号序列按偶奇分排,后者是将频域信号序列按偶奇分排。
它们都借助于的两个特点:
一是周期性;二是对称性。
这样,便可以把离散傅立叶变换的计算分成若干步进行,计算效率大为提高。
快速傅立叶变换(FFT),是离散傅立叶变换的快速算法,它是根据离散傅立叶变换的奇、偶、虚、实等特性,对离散傅立叶变换的算法进行改进获得的。
它对傅立叶变换的理论并没有新的发现,但是对于在计算机系统或者说数字系统中应用离散傅立叶变换,可以说是进了一大步。
1.2MATLAB简介
MATLAB是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。
MATLAB是matrix&laboratory两个词的组合,意为矩阵工厂(矩阵实验室)。
是由美国MathWorks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。
它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。
MATLAB和Mathematica、Maple并称为三大数学软件。
它在数学类科技应用软件中在数值计算方面首屈一指。
MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。
MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并且MATLAB也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。
在新的版本中也加入了对C,FORTRAN,C++,JAVA的支持。
优势特点:
1)高效的数值计算及符号计算功能,能使用户从繁杂的数学运算分析中解脱出来;
2)具有完备的图形处理功能,实现计算结果和编程的可视化;
3)友好的用户界面及接近数学表达式的自然化语言,使学者易于学习和掌握;
4)功能丰富的应用工具箱(如信号处理工具箱、通信工具箱等),为用户提供了大量方便实用的处理工具。
2直接计算DFT的问题及改进
DFT在数字信号处理中有着重要的作用。
然而直接计算DFT的运算量非常大,它与序列长度的平方成正比,因此制约了DFT的应用。
快速傅立叶变换(FastFourierTransform,FFT)是实现DFT的一种快速算法。
2.1直接计算DFT的运算量
离散傅立叶变换对为:
正变换:
, (2.1.1)
反变换:
, (2.1.2)
其中,为旋转因子且,x(n)表示输入的离散数字信号序列,X(k)为输入序列x(n)对应的N个离散频率点的相对幅度。
比较两式,正变换与反变换的差别就在于旋转因子的指数差个负号及少一个比例因子。
因此DFT与IDFT的计算量极为相似,所以只需以正变换为例来考虑直接计算DFT时所存在的问题。
一般情况下,序列、x(n)及其离散频谱X(k)都是复序列,因此,要计算离散频谱X(k)的一个值就需要N次复数乘法与N-1次复数加法运算,而计算一个完整的N点的X(k)(对应),就需要次复数乘法与N(N-1)次复数加法运算,当N很大时,,因此直接计算DFT的运算量就几乎与成正比,随着N的增加,运算量将急剧增大,即使采用计算机,也很难实时处理。
当然,以上的分析的DFT计算量与实际的运算量稍有出入,例如,计算时就不需要做乘法运算,但是当N很大时,这种情况对整个DFT的计算量影响很小,一般不做特别统计。
2.2改进措施
FFT主要利用DFT旋转因子的周期性与对称性来减少运算量:
周期性:
(2.2.1)
对称性:
(2.2.2)
利用周期性与对称性,一方面可以在DFT的运算过程中把有些项进行合并,另一方面可以把长序列的DFT分解成若干短序列的DFT。
因为DFT的运算量与变换长度的平方成正比,如果可以把一个长序列DFT分解成若干短序列DFT再进行计算,就可以大大减少运算量。
3按时间抽选的基-2FFT算法(DIT-FFT)
常用的FFT算法有两大类,一类是按时间抽取的FFT算法(简称DIT-FFT),另一类是按频率抽取的FFT算法(简称DIF-FFT)。
最早提出的基-2FFT算法,使DFT的运算效率提高了1~2个数量级,从而为DFT由理论研究到实际应用创造了条件。
3.1DIT-FFT算法原理
按时间抽取的FFT算法基本思想是:
时域下的序列x(n)按序列n的奇偶分组,频域下序列X(k)按序列k前后分组。
有限长序列x(n),设其长度,L为整数,若不满足该条件,加零补足。
显然N为偶数,可以按序列序号分为奇、偶两组序列,长度分别为N/2,如:
按n的奇偶分组,对x(n)重新排列,得:
令
(3.1.1)
(3.1.2)
再令
(3.1.3)
(3.1.4)
N点序列x(n)的DFT为:
因为
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 DIT FFT 实现