快速傅里叶变换FFT算法源码经典_精品文档.pdf
- 文档编号:3212884
- 上传时间:2022-11-20
- 格式:PDF
- 页数:68
- 大小:442.57KB
快速傅里叶变换FFT算法源码经典_精品文档.pdf
《快速傅里叶变换FFT算法源码经典_精品文档.pdf》由会员分享,可在线阅读,更多相关《快速傅里叶变换FFT算法源码经典_精品文档.pdf(68页珍藏版)》请在冰豆网上搜索。
快速傅里叶变换FFT算法及其应用摘要本文较为系统地阐述了快速傅里叶变换的算法原理及其在数字信号处理等工程技术中的应用。
根据抽取方法的不同,一维基2FFT算法分为两种:
频域抽取的FFT算法和时频域抽取的FFT算法。
第1节阐述了这两种FFT算法的原理。
第2节给出了两种算法的编程思想和步骤。
第3节阐述了一维非基2FFT的两种算法:
Cooley-tukeyFFT算法和素因子算法(PrimeFactorAlgorithm)的思想原理,给出了在把一维非基2DFT的多层分解式转化为二层分解的过程中,如何综合运用这两种算法以达到总运算次数最少的方案;并以20点DFT为例描述了非基2FFT算法实现的一般步骤。
第4节介绍了一维FFT算法在计算连续时间信号的傅里叶变换、离散信号的线性卷积、离散信号压缩和滤波等数字信号处理中的典型应用。
第5节把一维FFT变换推广到二维FFT变换,并在一维FFT算法的基础上,给出了二维FFT算法的原理和实现过程。
最后在附录中给出了一维DFT的基2FFT算法(包括频域抽取的FFT和IFFT算法、时域抽取的FFT和IFFT算法),一维任意非基2FFT算法,二维DFT的基2FFT算法以及二维DFT的任意非基2FFT算法的详细的VisualC+程序。
本文通过各种流程图和表格,较为深入系统地阐述了FFT的算法原理;运用Matlab编程,通过大量生动的实例,图文并茂地列举出了FFT算法的各种应用,并在每个实例中都附上了完整的Matlab程序,可供读者参考。
由于篇幅所限,本文未涉及FFT变换以及其应用的数学理论背景知识。
关键词:
FFT算法的应用,一维基2FFT算法,频域抽取,时域抽取,非基2FFT算法,Cooley-Tukey算法,素因子算法,线形卷积,信号压缩和滤波,二维FFT算法快速傅里叶变换FFT算法及其应用1目录1一维DFT的快速算法FFT.11.1频域抽取的基2算法.11.1.1正变换的计算.11.1.2逆变换的计算.41.2时域抽取的基2算法.52一维基2FFT算法编程.63一维任意非基2FFT算法.103.1COOLEY-TUKEYFFT算法.103.2素因子算法(PRIMEFACTORALGORITHM,PFA).113.3一维任意非基2FFT算法.134一维FFT算法的应用.164.1利用FFT计算连续时间信号的傅里叶变换.164.2利用FFT计算离散信号的线性卷积.194.3利用FFT进行离散信号压缩.214.4利用FFT对离散信号进行滤波.244.5利用FFT提取离散信号中的最强正弦分量.275二维DFT的快速变换算法及应用简介.325.1二维FFT变换及其算法介绍.325.2二维FFT变换算法的应用.33参考文献.33附录.341一维DFT的基2FFT算法VISUALC+程序.34
(1)频域抽取的FFT和IFFT算法.34
(2)时域抽取的FFT和IFFT算法.392一维任意非基2FFT算法VISUALC+程序.443二维DFT的基2FFT算法VISUALC+程序.494二维DFT的任意非基2FFT算法VISUALC+程序.5711一维DFT的快速算法FFT当序列fn的点数不超过N时,它的N点DFT定义为21001NiknNnFkfnekN=
(1)反变换IDFT定义为210101NiknNkfnFkenNN=
(2)二者形式相似,快速算法的原理一样,这里先就其正变换进行讨论。
令2/iNNWe=,当k依次取为0,1,2,1NL时,可表示为如下的方程组:
0001020
(1)1011121
(1)2021222
(1)
(1)0
(1)1
(1)
(1)0012110121201211011NNNNNNNNNNNNNNNNNNNNNNFfWfWfWfNWFfWfWfWfNWFfWfWfWfNWFNfWfWfNW=+=+=+=+LLLML(3)由上式可见,直接按照定义计算N点序列的N点DFT时,每行含N个复乘和N个加,从而直接按定义计算点的总计算量为2N个复乘和2N个加。
当N较大时,2N很大,计算量过大不仅耗时长,还会因字长有限而产生较大的误差,甚至造成计算结果不收敛。
所谓快速傅里叶变换就是能大大减少计算量而完成全部点计算的算法。
下面介绍两种经典的DFT的快速算法:
频域抽取的FFT算法和时域抽取的FFT算法。
1.1频域抽取的基2算法1.1.1正变换的计算这里仅介绍基2算法,即是2的整次幂的情况。
由定义1001NknNnFkfnWkN=(4)把fn分成两半,即fn和/2fnN+(0/21)nN,代入(4)式得/21/21(/2)00/201NNknknNNNnnFkfnWfnNWkN+=+(5)1一维DFT的快速算法FFT2由于(/2)/2
(1)knNknkNkknNNNNWWWW+=(5)式两项又可合并为/210
(1)/201NkknNnFkfnfnNWkN=+(6)当2kr=为偶数时,注意到
(1)1k=,222/knrnirnNNNWWe=/2rnNW=,(6)式变为/21/20/21/202(/2)()()0/21NrnNnNrnNnFrfnfnNWgnWGrrN=+=(7)当21kr=+为奇数时,(21)2(21)/2knrnirnNnrnNNNNWWeWW+=,(6)式变为/21/20/21/2021(/2)()()0/21NnrnNNnNrnNnFrfnfnNWWpnWPrrN=+=+=(8)这样就把一个N点序列(fn)的N点DFT(Fk)计算化成了两个/2N点序列(gn和pn)的/2N点DFT(Gr和Pr)计算。
由fn划分成gn和pn的计算量为N个加,即/2fnfnN+和/2,0/21fnfnNnN+和/2N个乘,即(/2),0/21nNfnfnNWnN+由于gn算出的/2N点DFT,是fn的N点DFT(Fk)中k为偶数的那一半,由pn算出的则是k为偶数的那一半,故需要把偶数k的Fk抽出来放在一起作为gn的DFT(()Gr)输出,同时把奇数k的Fk抽出来放在一起作为pn的DFT(()Pr)输出。
由于k是频域变量,故这种算法称为频域抽取的FFT算法。
接着,两个/2N点DFT仍可用上述方法各经/4N个乘/2N个加划分成两个/4N点DFT(同时还要做相应的频域抽取),从而共划分成4个/2N点DFT,总划分计算量仍是N个加和/2N个乘。
这样的划分可一步步做下去,不难看出,快速傅里叶变换FFT算法及其应用3每步的总划分计算量都是N个加和/2N个乘。
经过1M步的划分后就划成了/2N个如下两点DFT的计算问题00012210110222()AaWbWabBaWbWabW=+=+=+=(9)上式所需计算量是2个加和1个乘,于是完成/2N个两点DFT的总计算量仍是N个加和/2N个乘。
从而完成全部N点DFT的总计算量2logMNNN=个加和2/2(/2)logMNNN=个乘,这比直接按定义计算所需的2N个乘和加要少得多。
例如,1021024N=,10M=,用FFT算法计算所需的乘法个数为/2MN51024=,而直接按定义计算所需的乘法个数为210241024N=,二者相差1024/5200倍。
若直接计算需半小时,而用FFT计算只需9s即可完成,可见其效率之高,而且N越大,FFT的效率提高越明显。
图图1频域抽取的频域抽取的8点点FFT计算流图计算流图一般情况下,由于做了1M次分奇偶的抽取,此算法最后的/2N个两点DFT计算出的Fk不是顺序抽取的。
次序的变化可用二进码来说明:
第一次抽取所分的奇偶是由二进码第1位是1或0来区分的,该位为0时为偶数,该位为1时为奇数,第二次抽奇偶是由二进码第2位是1或0来区分的,每次抽取都是把偶数项放在前(左)边,把奇数项放在后(右)边,从而抽取以后数的二进码是按照二进制位从左向右依次排列的,和普通二进制数从右向左依次排列的的规律正好相反,所以称为倒位序。
在计算出Fk之后要把倒位序变成顺序。
f0F0000F0F0000f1-1W20F4100F2F1001gnf2-1W40F2010F4F2010f3-1W41-1W20F6110F6F3011f4-1W80F1001F1F4100f5-1W81-1W20F5101F3F5101pnf6-1W82-1W40F3011F5F6110f7-1W83-1W41-1W20F7111F7F71111一维DFT的快速算法FFT41.1.2逆变换的计算所谓逆变换是指由Fk求fn的计算,若直接按定义10101NknNkfnFkWnNN=做计算,则除了求和号和正变换相同的计算量外,每算一个fn都还需再多做一个乘1/N的乘法运算。
故按定义完成全部N点DFT的总计算量是2N个加和
(1)NN+个乘。
下面从图导出它的快速算法,先讨论第3列的2点DFT的逆运算如何完成。
由式(7)得,02()abAabWB+=由上式不难解出02021()21()2aABWbABW=+=(10)图图2频域抽取的频域抽取的8点点IFFT计算流图计算流图此计算过程如图2所示,可以看出:
左边各列的划分计算也都是由/2N个碟形运算来完成的,只是各碟形运算所乘的相移因子W不同。
把每个碟形运算都用图的办法变成对应的逆运算,并把它们按输入在左、输出在右重新排列,就F0000F0F00001/8f0F1001F2F41001/8W2-0-1f1F2010F4F20101/8W4-0-1f2F3011F6F61101/8W2-0-1W4-1-1f3F4100F1F10011/8W8-0-1f4F5101F3F51011/8W2-0-1W8-1-1f5F6110F5F30111/8W4-0-1W8-2-1f6F7111F7F71111/8W2-0-1W4-1-1W8-3-1f7快速傅里叶变换FFT算法及其应用5得到了全部N点IDFT的计算流图。
给出了8N=的示例,图中先对顺序输入的Fk做1M次的频域抽取,并把3个乘1/2的运算合成了一个乘1/8的运算放在了最前边,然后就开始做求逆的碟形运算。
1.2时域抽取的基2算法比较正变换DFT和反变换IDFT的定义式1001NknNnFkfnWkN=10101NknNkfnFkWnNN=可见,去掉乘1/N的运算,把1W换成W,交换Fk、fn和k、n,反变换定义式就变成了正变换的定义式。
对图2做这些变换,则得到图3的流程图。
对图1做这些变换,则得到图4的流程图。
这就是时域抽取的算法流图。
进行碟形运算之前,先要对顺序的时域输入序列进行1M次的奇偶抽取,故称为时域抽取的FFT算法。
图图3时域抽取的时域抽取的8点点FFT计算流图计算流图比较图2和图3不难看出,两种算法的计算量是完全一样的。
这里先算出/2N个两点的DFT000122()(/2)()(/2)AfnWfnNWfnfnN=+=+f0000f0f0000F0f1001
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 快速 傅里叶变换 FFT 算法 源码 经典 精品 文档