DFT与FFT计算速度比较分析
DFT和FFT算法比较

DFT和FFT算法的比较摘要:快速傅里叶变 (Fast Fourier Tranformation,FFT)是将一个大点数N的DFT分解为若干小点的D F T的组合。
将用运算工作量明显降低,从而大大提高离散傅里叶变换(D F T) 的计算速度。
因各个科学技术领域广泛的使用了FFT 技术它大大推动了信号处理技术的进步,现已成为数字信号处理强有力的工具。
关键词:离散傅立叶变换;快速傅立叶变换Abstract:Fast Fourier (Fast Fourier Tranformation) is to a large number N of DFT is decomposed into several smaller D F T combination. Will use computing workload is decreased obviously, thus greatly improve the discrete Fourier transform (DFT) computing speed. Due to the various areas of science and technology widely USES the FFT technology, it greatly promotes the progress of the signal processing technology, has become a powerful digital signal processing tools.Keyword:discrete Fourier transform;Fast Fourier TranformationDFT算法:FFT是一种DFT的高效算法,称为快速傅立叶变换(fast Fourier transform)。
FFT算法可分为按时间抽取算法和按频率抽取算法,先简要介绍FFT的基本原理。
不同DFT方法的比较与选择

不同DFT方法的比较与选择傅里叶变换(Fourier Transform,简称FT)是一种将时域信号转换为频域信号的数学工具。
离散傅里叶变换(Discrete Fourier Transform,简称DFT)是傅里叶变换的离散形式,广泛应用于信号处理、图像处理、数字滤波等领域。
目前,有多种不同的DFT方法可供选择,每种方法都有其优缺点,因此需要根据具体应用场景选择适当的方法。
常见的DFT方法包括快速傅里叶变换(Fast Fourier Transform,简称FFT)、分治法(Divide and Conquer)、蝶形算法(Butterfly Algorithm)等。
下面将对这几种方法进行比较与选择。
1.FFT是DFT方法中最常用的一种。
FFT算法利用了对称性质和递归的思想,具有高效的计算速度和较小的算法复杂度。
在信号处理和图像处理中,通常使用基于FFT的快速算法进行频域分析和频谱估计。
FFT算法能够快速计算出离散信号的频谱,适用于处理大量数据点或需要实时处理的应用。
2.分治法是另一种常见的DFT方法。
该算法将DFT问题分解为若干小规模的DFT问题,然后通过递归求解得到最终的结果。
分治法适用于处理规模较小的信号或需要逐步分析的应用。
由于分治法涉及递归计算,对于大规模问题可能存在计算效率较低的问题。
3.蝶形算法是一种优化的DFT计算方法,通过巧妙地使用旋转因子和矩阵乘法来减少计算量。
蝶形算法比较适用于对称信号和周期信号的频谱估计。
蝶形算法的计算复杂度较低,适用于对计算效率要求较高的应用场景。
在选择DFT方法时,需要考虑以下几个因素:1.数据规模:当数据规模较大时,FFT算法通常是较好的选择,因为其计算速度较快。
而当数据规模较小时,分治法和蝶形算法可能更适合,因为它们更加灵活和可控。
2.应用场景:不同的应用场景对DFT方法的要求也不同。
例如,在音频信号处理中,常常需要对实时音频流进行频谱分析,这时候FFT算法是较为合适的选择。
基于Matlab的DFT及FFT频谱分析

基于Matlab的DFT及FFT频谱分析基于Matlab的DFT及FFT频谱分析一、引言频谱分析是信号处理中的重要任务之一,它可以揭示信号的频率特性和能量分布。
离散傅里叶变换(DFT)及快速傅里叶变换(FFT)是常用的频谱分析工具,广泛应用于许多领域。
本文将介绍通过Matlab进行DFT及FFT频谱分析的方法和步骤,并以实例详细说明。
二、DFT及FFT原理DFT是一种将时域信号转换为频域信号的离散变换方法。
它将信号分解成若干个正弦和余弦函数的叠加,得到频率和幅度信息。
FFT是一种高效的计算DFT的算法,它利用信号的对称性和周期性,将计算复杂度从O(N^2)降低到O(NlogN)。
FFT通过将信号分解成不同长度的子序列,递归地进行计算,最终得到频谱信息。
三、Matlab中的DFT及FFT函数在Matlab中,DFT及FFT可以通过内置函数进行计算。
其中,DFT使用函数fft,FFT使用函数fftshift。
fft函数可直接计算信号的频谱,fftshift函数对频谱进行频移操作,将低频移到频谱中心。
四、Matlab中DFT及FFT频谱分析步骤1. 读取信号数据首先,将待分析的信号数据读入到Matlab中。
可以使用内置函数load读取文本文件中的数据,或通过自定义函数生成模拟信号数据。
2. 时域分析通过plot函数将信号数据在时域进行绘制,以观察信号的波形。
可以设置合适的坐标轴范围和标签,使图像更加清晰。
3. 信号预处理针对不同的信号特点,可以进行预处理操作,例如去除直流分量、滤波等。
这些操作可提高信号的频谱分析效果。
4. 计算DFT/FFT使用fft函数计算信号数据的DFT/FFT,并得到频谱。
将信号数据作为输入参数,设置采样频率和点数,计算得到频谱数据。
5. 频域分析通过plot函数将频谱数据在频域进行绘制,观察信号的频率特性。
可以设置合适的坐标轴范围和标签,使图像更加清晰。
6. 结果解读根据频谱图像,分析信号的频率成分、幅度分布和峰值位置。
DFT与FFT计算速度比较分析报告

DFT与FFT计算速度比较分析报告DFT(离散傅里叶变换)和FFT(快速傅里叶变换)是数字信号处理领域常用的算法,用于将离散的时域信号转换为频域信号。
本文将重点分析DFT和FFT计算速度的比较。
DFT是一种直接计算离散傅里叶变换的方法,通过计算离散时间序列的N个采样点的和与相位差来计算频谱。
DFT算法的时间复杂度为O(N^2),其中N为采样点数。
由此可见,DFT计算速度较慢,尤其当N较大时,计算复杂度呈指数级增长。
FFT是一种基于分治思想的算法,并且通过利用信号的周期性质来加速计算速度。
FFT算法时间复杂度为O(NlogN),相比于DFT算法,FFT在计算速度上具有明显的优势。
FFT算法将长度为N的序列分解成多个长度为N/2的子序列,并使用递归地计算两个子序列的傅里叶变换,然后再通过一些乘法运算组合得到原始序列的傅里叶变换结果。
在实际应用中,FFT算法通常通过库函数或者硬件实现,如FFT处理器,以进一步提高计算速度。
例如,在数字音频处理中,常用的库函数如numpy中的FFT函数可以实现高效的FFT计算,从而大大提高了信号处理的实时性和效率。
此外,FFT算法还有一些其他的优势。
它能够处理不同长度的信号序列,因为FFT算法是通过补零或者截断来实现的。
而DFT算法要求输入序列的长度是固定的。
此外,由于FFT算法的计算过程中具有很好的并行性,因此可以在并行计算平台上实现高效的计算加速。
综上所述,通过比较DFT和FFT算法的时间复杂度和实际应用中的计算速度,可以得出以下结论:FFT算法具有更快的计算速度和更高的计算效率,尤其在处理大规模数据时表现得更加突出。
因此,在信号处理领域中,FFT算法得到了广泛的应用,并成为了一种标准的傅里叶变换算法。
FS,FT,DFS,DTFT,DFT,FFT的联系和区别

FS,FT,DFS,DTFT,DFT,FFT的联系和区别对于初学数字信号处理(DSP)的人来说,这几种变换是最为头疼的,它们是数字信号处理的理论基础,贯穿整个信号的处理。
学习过《高等数学》和《信号与系统》这两门课的朋友,都知道时域上任意连续的周期信号可以分解为无限多个正弦信号之和,在频域上就表示为离散非周期的信号,即时域连续周期对应频域离散非周期的特点,这就是傅里叶级数展开(FS),它用于分析连续周期信号。
FT是傅里叶变换,它主要用于分析连续非周期信号,由于信号是非周期的,它必包含了各种频率的信号,所以具有时域连续非周期对应频域连续非周期的特点。
FS和FT 都是用于连续信号频谱的分析工具,它们都以傅里叶级数理论问基础推导出的。
时域上连续的信号在频域上都有非周期的特点,但对于周期信号和非周期信号又有在频域离散和连续之分。
在自然界中除了存在温度,压力等在时间上连续的信号,还存在一些离散信号,离散信号可经过连续信号采样获得,也有本身就是离散的。
例如,某地区的年降水量或平均增长率等信号,这类信号的时间变量为年,不在整数时间点的信号是没有意义的。
用于离散信号频谱分析的工具包括DFS,DTFT和DFT。
DTFT是离散时间傅里叶变换,它用于离散非周期序列分析,根据连续傅里叶变换要求连续信号在时间上必须可积这一充分必要条件,那么对于离散时间傅里叶变换,用于它之上的离散序列也必须满足在时间轴上级数求和收敛的条件;由于信号是非周期序列,它必包含了各种频率的信号,所以DTFT对离散非周期信号变换后的频谱为连续的,即有时域离散非周期对应频域连续周期的特点。
当离散的信号为周期序列时,严格的讲,离散时间傅里叶变换是不存在的,因为它不满足信号序列绝对级数和收敛(绝对可和)这一傅里叶变换的充要条件,但是采用DFS(离散傅里叶级数)这一分析工具仍然可以对其进行傅里叶分析。
我们知道周期离散信号是由无穷多相同的周期序列在时间轴上组成的,假设周期为N,即每个周期序列都有N个元素,而这样的周期序列有无穷多个,由于无穷多个周期序列都相同,所以可以只取其中一个周期就足以表示整个序列了,这个被抽出来表示整个序列特性的周期称为主值周期,这个序列称为主值序列。
DFT的快速算法—FFT

DFT的快速算法—FFTDFT(离散傅里叶变换)是一种常见的信号处理和频谱分析方法。
它将时域上的离散信号转换为频域上的复数序列。
然而,传统的DFT算法的计算复杂度为O(N^2),当信号长度N较大时,计算量非常大,不适用于实时应用或大规模数据处理。
为了解决这个问题,Cooley和Tukey于1965年提出了快速傅里叶变换(FFT)算法,将计算复杂度降低到O(NlogN)。
FFT算法的基本思想是将DFT的计算任务分解成较小规模的子问题,然后通过重复使用这些子问题的解来得到原问题的解。
它利用了傅里叶变换的对称性和周期性的特点,采用了递归和分治的策略。
具体而言,FFT 算法将长度为N的DFT分解成两个长度为N/2的DFT,并通过一些运算将这两个子问题的解合并成原问题的解。
FFT算法的核心是蝶形运算,它的计算复杂度为O(N)。
蝶形运算将两个输入信号按照指定的规则进行运算,并将结果输出。
在FFT算法中,蝶形运算是基于旋转因子的乘法和加减运算。
每个蝶形运算需要两个复数相乘和两个复数相加减,总共需要4个浮点运算。
通过将整个信号划分成多个蝶形运算的组合,FFT算法可以高效地计算出DFT的结果。
FFT算法的具体步骤如下:1.将输入信号切分成长度为N/2的两个子信号。
2.对这两个子信号进行FFT变换,得到它们的频谱。
3.根据旋转因子的乘法和加减运算,将这两个子信号的频谱合并成原始信号的频谱。
4.递归地应用FFT算法,直到切分得到的子信号长度为15.将最终得到的频谱按照一定的顺序排列,得到DFT的结果。
FFT算法具有以下几个优点:1. 计算复杂度低:FFT算法的计算复杂度为O(NlogN),相比于传统的DFT算法的O(N^2),计算量大大减少,特别适用于大规模信号处理和频谱分析。
2.高效实现:FFT算法利用了信号的对称性和周期性,通过重复使用子问题解来计算原问题的解,计算过程简洁高效。
3.应用广泛:FFT算法被广泛应用于数字信号处理、图像处理、音视频编码、通信系统等领域,为这些领域的算法和应用提供了基础支持。
不同DFT方法的比较与选择

不同DFT方法的比较与选择傅里叶变换(Fourier Transform)是一种常用于信号处理和图像处理领域的方法,可将一个时域信号转换为频域信号。
离散傅里叶变换(Discrete Fourier Transform,DFT)是对连续傅里叶变换进行离散采样的一种方法,常用于数字信号处理。
在进行DFT时,我们需要选择一种具体的DFT方法。
不同的DFT方法有不同的算法和特点,下面将对几种常用的DFT方法进行比较和选择。
1.基于暴力计算的DFT方法:最直接的DFT计算方法是基于暴力计算的(Brute-Force)方法,即直接按照DFT的定义进行计算。
该方法的时间复杂度为O(N^2),其中N 为输入信号的长度。
这种方法的优点是简单易懂,实现起来也比较容易。
然而,当信号长度很大时,计算复杂度会很高,较慢。
2. 快速傅里叶变换(Fast Fourier Transform,FFT):FFT是一种高效的计算DFT的算法,时间复杂度为O(NlogN),其中N 为输入信号的长度。
FFT利用了DFT的对称性和重复计算的性质,通过递归分治法将DFT计算分解为多个子问题的计算,并结合蝶形运算、置换运算等技巧进行加速。
FFT算法具有较高的计算速度和较低的计算复杂度,是目前应用最广泛的DFT方法。
3.快速傅里叶变换的变种算法:在FFT算法的基础上,还有一些变种算法,对特定情况的信号可以进行优化,进一步提高计算效率。
例如,对于长度为2的幂次的信号,可以使用Cooley-Tukey算法实现更高效的计算;对于奇偶对称的实数信号,可以使用实数FFT(Real FFT)算法进行计算。
4. 递归傅里叶变换(Recursive Fourier Transform,RFT):RFT是一种基于递归思想的DFT算法,将信号的长度逐步缩小,从而实现更高效的计算。
与FFT算法相比,RFT算法更适用于信号长度不是2的幂次的情况。
然而,RFT算法的计算复杂度仍然较高,且不如FFT算法快速。
1直接用DFT计算运算量与用FFT计算的运算量比较解读

1直接用DFT计算运算量与用FFT计算的运算量比较解读离散傅里叶变换(Discrete Fourier Transform, DFT)和快速傅里叶变换(Fast Fourier Transform, FFT)是两种常用的数学算法,用于将一个离散信号转换为频域的表示。
DFT是通过将信号分解为一系列正弦和余弦函数的线性和来计算频谱。
它通过对信号序列中的每个样本执行复杂的乘法和加法操作来实现。
在计算的过程中,DFT需要执行N个点的N次乘法运算和N-1次加法运算,其中N是信号序列的长度。
因此,DFT的计算复杂度为O(N^2)。
这意味着当信号变长时,DFT的计算时间会快速增加。
相比之下,FFT是一种通过将信号分解为几个较小的子序列并重复应用DFT的方法来加速DFT计算的技术。
FFT算法的基本思想是将信号通过递归地将其分解为两个子问题来分治,然后将子问题的结果合并到一个大问题中。
FFT使用了一些数学性质和优化技巧,以减少计算复杂度。
具体来说,FFT的计算复杂度为O(N log N)。
这意味着随着信号长度的增加,FFT的计算时间增长速度比DFT要慢得多。
然而,需要指出的是,FFT并不总是比DFT更优。
在信号较短的情况下,DFT的计算时间可能更短。
这是因为FFT的时间复杂度中包含了一个log N的因子,这意味着当N较小时,FFT的计算时间可能超过DFT。
因此,在实际应用中,根据信号的特点以及计算资源的情况,需要权衡选择使用DFT还是FFT。
另外,需要注意的是,FFT在计算傅里叶变换时,仅对长度为2的幂的信号序列有效。
如果信号序列的长度不是2的幂,则需要进行零填充操作,将信号序列的长度扩展为最接近2的幂的长度。
这可能会导致额外的计算开销,因为需要对零填充的位置进行处理。
总结起来,DFT和FFT是两种常用的傅里叶变换算法。
FFT通过分治和优化技巧加速了DFT的计算过程,降低了计算复杂度。
在大型数据集的情况下,FFT通常比DFT更快速。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
xx大学课程设计说明书题目: DFT与FFT计算速度比较分析系别:年级专业:学号:学生姓名:指导教师:教师职称:大神大学课程设计(论文)任务书院(系): xx工程学院基层教学单位: xxx学号222222222222 学生姓名xxx 专业(班级)xxx 设计题目DFT与FFT计算速度比较分析设计技术参数用MATLAB实现DFT及FFT对任意长度的序列进行傅里叶变换DFT与FFT的运算时间比较设计要求利用Matlab或者C语言设计DFT和FFT程序,比较两种频谱分析方法的计算速度,并与理论值进行比较。
工作量先对两种算法进行介绍,包括推导过程及运算性质,然后用MATLAB实现两种算法,再分别对两种算法进行运算时间对比,并分析时间长短的原因。
工作计划第一周第二周周一接受任务并查阅资料周二到周五上午学习相关知识下午编写程序上机调试程序周一到周四上午学习相关知识下午编写程序上机调试程序编写任务书参考资料1.谢平、王娜、林洪斌等,信号处理原理及应用。
机械工业出版社,2008.102.王宏,MATLAB 6.5 及其在信号处理中的应用。
清华大学出版社,2004.103.Sanjit K.Mitra 著孙洪、余翔宇等译,数字信号处理实验指导书。
电子工业出版社2005.1指导教师签字xxx基层教学单位主任签字xxx说明:此表一式四份,学生、指导教师、基层教学单位、系部各一份。
2011 年 7 月 13 日大神工程学院课程设计评审意见表指导教师评语:认真正确完善完善较为合理合理工作态度较认真理论分析一般软件设计一般不认真较差较差平时成绩:指导教师签字:年月日图面及其它成绩:答辩小组评语:清晰正确基本掌握优化设计基本正确原理了解不正确不清楚答辩成绩:组长签字:年月日课程设计综合成绩:答辩小组成员签字:年月日摘要时域分析方法和频域分析方法是信号和系统的分析的两种方法,本文介绍离散信号和系统的频域分析方法,它和连续信号和系统的频域分析方法有所不同,但也有相似之处。
本说明书主要是在介绍两种用于信号处理的傅里叶变换算法——DFT(离散傅里叶变换)和FFT(快速傅里叶变换),分别介绍了这两种运算的推导过程,并且对这两种变换作了简要的介绍,分析了各自的性质。
然后通过MATLAB分别实现了这两种傅里叶变换,并对这两种变换进行了运算时间的比较——分别对同一函数进行DFT和FFT计算两者的运行时间,并作图比较。
本说明书的程序部分都是在MATLAB环境下进行的运算。
MATLAB是矩阵实验室(Matrix Laboratory)的简称,是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。
MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完成相同的事情简捷得多。
在新的版本中也加入了对C,FORTRAN,C++ ,JA V A 的支持,可以直接调用,用户也可以将自己编写的实用程序导入到MATLAB 函数库中方便自己以后调用。
本文介绍了DFT与FFT的原理与Matlab实现程序,以及DFT与FFT的计算速度的比较。
并用guide函数亲自编写了一个界面。
关键词:DFT、FFT、Matlab、运算速度、guide目录摘要 (1)第一章DFT原理与Matlab实现 (3)1.1 DFT的原理 (3)1.2 DFT的Matlab实现 (4)第二章FFT的原理与Matlab实现 (6)2.1 FFT的原理 (6)2.1.1 FFT的基本思想 (6)2.1.2 基2 FFT算法 (7)2.2 FFT的Matlab实现 (9)第三章DFT与FFT计算速度比较分析 (12)3.1 FFT与直接计算DFT的比较 (12)3.2 FFT与DFT运算时间Matlab程序 (13)3.2.1随机序列的DFT计算时间程序 (13)3.2.2分析两者运算时间的差异: (16)第四章心得体会 (18)参考文献: (19)第一章 DFT 原理与Matlab 实现1.1 DFT 的原理傅里叶变换就是在以时间为自变量的“信号”与以频率为自变量的“频谱”函数之间的某种变换关系。
随时间自变量形式的不同,其傅里叶变换的形式也有不同:周期序列的离散傅里叶级数(DFS)和非周期序列的傅里叶变换(DTFT),其表示式分别为:()()()210DFS N j nk Nn X k x n xn e π--==⎡⎤=⎣⎦∑ (1.1.1)()DTFT[()]()j j n n X e x n x n e ωω∞-=-∞==∑(1.1.2)在实际工作中,当用数字计算机对信号进行频谱分析时,要求信号必须以有限长度的离散值作为输入,而计算所得的频谱值自然也是有限、离散的。
上述两种形式的傅里叶变换中,DFS 变换满足时、频域自变量的离散化,但其时间变量和频率变量又同时具有周期性;DTFT 变换满足时间自变量的有限长度(非周期能量有限信号),但其频率变量为连续形式。
可见,这两种变换都难以实际应用。
考虑到DFS 变换的时、频域形式虽是周期序列,但每个周期却只有N 个独立的复值,知道其一个周期的内容即可得到其它的内容。
因此,若从DFS 变换的时、频域各取出一个周期,即可构造出时间和频率自变量皆为离散、有限长度的傅氏变换,这就是离散傅里叶变换(DFT)的引出思想,下面进行具体推导。
设()x n 是一个长度为M 的有限长序列,由周期序列与有限长序列的本质联系,可以N(N M ≥)为周期将()x n 展开为无重叠的周期序列,即周期延拓为()()r xn x n rN ∞=-∞=+∑ (1.1.3)再利用式(1.1.1)对()xn 进行DFS 变换,得到周期离散的频谱()Xk ((,))k ∈-∞+∞,取()Xk 的主值序列(0,1,...,1)k N =-,代入DFS 反变换公式(4-3b),即()()()2101N j kn N k x n IDFS X k X k e N π-=⎡⎤==⎣⎦∑ (1.1.4) 分析可见:在DFS 正变换中,只要把一个周期内的()n x ~乘以对应的2j nk Neπ-(0,1, (1)n N =-,即可得任意k 下的()k X ~;同理,在DFS 反变换中,仅用()k X ~的一个周期的值(0,1,...,1)k N =-,即可得到任意n 下的()n x ~。
如果同时限制(1.1.1)式中的n 和(1.1.4)式中的k ,使其都只在()1~0-N 区间内取值,就得到了一个周期的()n x 和一个周期的()k X 间的对应关系()()∑-==1N n kn NWn x k X 10-≤≤N k (1.1.5) ()()∑-=-=101N k kn NWk X Nn x 10-≤≤N n (1.1.6)式中,2jNNW e π-=,N 为DFT 变换区间的长度,上两式即称为有限长序列的离散傅里叶变换对。
(1.1.5)式称为离散傅里叶变换,简称DFT ;(1.1.6)式称为离散傅里叶逆变换(Inverse Discrete Fourier Transform),简称IDFT 。
1.2 DFT 的Matlab 实现程序DFT 函数:function[xk]=dft(xn,N)%计算离散傅里叶变换 %----------------- %[Xk]=dft(xn,N)%Xk=在0<=k<=N-1间的DFT 系数数组 %xn=N 点有限长度序列 %N=DFT 的长度n=[0:1:N-1]; %n 的行向量 k=[0:1:N-1]; %k 的行向量WN=exp(-1i*2*pi/N); %Wn因子nk=n'*k; %产生一个含nk值的N乘N维矩阵WNnk=WN.^nk; %DFT矩阵q=xn*WNnk; %DFT系数的行向量对一个单位抽样序列的DFT变换(N=64):clear all;N=64;x=zeros(1,N);x(1)=1;xn=0:N-1;subplot(121),stem(xn,x);axis([-1 33 0 1.1]);XK=dft(xn,N);subplot(122);stem(abs(XK));DFT Matlab处理结果:第二章 FFT 的原理与Matlab 实现2.1 FFT 的原理DFT 在数字信号处理中有很重要的作用,如频谱分析、线性卷积等,但由于直接计算DFT 的计算量与变换区间长度N 的平方成正比,当N 较大时,计算量太大,所以在快速傅里叶变换(Fast Fourier Transform,简称FFT)出现前,直接用DFT 进行谱分析和信号的实时处理是不切实际的。
直到1965年库利(J .W Cooley)和图基(J .W .Tukey)提出了DFT 运算的一种快速方法以后,情况才发生了根本的变化。
多年来,人们不断改进和完善,形成了一系列新型FFT 算法,如基2FFT 算法、分裂基FFT 算法、N 为复合数的FFT 算法等。
必须强调指出:FFT 并不是与DFT 不同的另外一种变换,而是为减少DFT 计算次数的一种快速算法。
为了解FFT 高效算法的重要及实现思路,先介绍DFT 的运算特点,再具体讨论高效算法。
2.1.1 FFT 的基本思想从哪些方面能改进DFT 的运算以减少运算工作量呢? 如前所述,DFT 的运算量是与2N 成正比的。
显然,如果一个大点数N 的DFT 能分解为若干小点数DFT 的组合,则可达到减少运算工作量的效果。
充分利用系数nkN W 的下列固有周期性和对称性,使DFT 运算中的有些项可以合并,从而使长序列的DFT 分解为更小点数的DFT ,提高运算效率。
nk NW 的对称性 ()()*--==kn N kn Nn N k NW W WnkNW 的周期性 ()()n N k N N n k N nk N W W W ++== 快速傅里叶变换算法正是基于上述基本思想而发展起来的。
下面介绍最常用的基2FFT 算法(2mN =,库利一图基算法)。
2.1.2 基2 FFT 算法基2 FFT 算法主要包括两类:按时间抽取(Decimation-in-time ,简称DIT)法和按频率抽取(Decmation-in-Frequence ,简称DIF)法,本文只介绍DIT 算法。
设()n x 是列长为()1,,1,0-=N n N 的输入序列,且2mN =,其中m 为整数。
如果不满足这个条件,可以人为地加入若干零点来达到。
将()n x 按n 的奇偶分成两个子序列()()()()⎩⎨⎧=+=r x r x r x r x 21122 12,1,0-=Nr (2.1.1) 则(1.1.5)式可化为()()()()11N N nknk NNn n X k DFT x n x n Wx n W--===⎡⎤=+⎣⎦∑∑偶数奇数()()()()()()()N 21N 212120N 21N 2122120221r krk NNr r rk rk k NNNr r x r Wx r W x r WWx r W--+==--===++=+∑∑∑∑由于222222N N jNjN W eeW ===-⋅-ππ,故上式又可表示为()()()()()N 21N 211212022rk rk kN N N r r X k x r Wx r WX k W X k --===+=+∑∑ 1,,1,0-=N k (2.1.2)其中()k X 1和()k X 2分别是()r x 1及()r x 2的2N 点的DFT()()()N 2111N 210DFT[]rkr X k x r W x r -===∑(2.1.3)()()()N 2122N 220DFT[]rk r X k x r W x r -===∑(2.1.4)(2.1.2)式表明了—个N 点的DFT 被分解为两个2N 点的DFT 。