关于DFT与FFT运算速度的比较Word文件下载.docx
《关于DFT与FFT运算速度的比较Word文件下载.docx》由会员分享,可在线阅读,更多相关《关于DFT与FFT运算速度的比较Word文件下载.docx(19页珍藏版)》请在冰豆网上搜索。
4.总结:
6
参考文献6
0.引言
离散傅里叶变换(DiscreteFourierTransform),是连续傅里叶变换在时域和频域上都离散的形式,将时
域信号的采样变换为在离散时间傅里叶变换(DTFT)频域的采样。
在形式上,变换两端(时域和频域上)
的序列是有限长的,而实际上这两组序列都应当被认为是离散周期信号的主值序列。
即使对有限长的离散信号作DFT,也应当将其看作经过周期延拓成为周期信号再作变换。
离散傅里叶变化的出现解决了信号离散化的问题,从而使其在数字滤波、功率谱分析、仿真、系统分析、通信方面得以应用。
快速傅里叶变换(FastFourierTransform),是离散傅里叶变换的快速算法,它是根据离散傅里叶变换的奇、偶、虚、实等特性,对离散傅立叶变换的算法进行改进获得的。
由于它应用的理论基础仍是离散傅里叶变换,所以它对离散傅里叶变换的理论并没有新的发现,但是对于在计算机系统或者说数字系统中应用离散傅立叶变换,可以说是进了一大步。
快速傅里叶变化最早于1965年由Cooly和Tukey提出,这使离散傅里叶变化运算次数由N2减少为
Nlog2N次,使得离散傅里叶变换应用于实际变成现实。
目前,快速傅里叶变化技术已广泛应用于各个领域,
成为数字信号处理技术的一个重要组成部分。
离散傅里叶变化除了本文介绍的基2快速傅里叶变化算法外,
他们都不同程度上减少了运算次数,如戈泽尔(Goertzel)算法、Chirp-Z变化(CZT)算法、WinogradFastTransformAlogrithm(WFTA)等。
本文将仅介绍基2快速傅里叶变化。
1.DFT与FFT的定义
DFT的定义:
设hnTs是连续函数h(t)的n个抽样值n=0,1,…,N_1,这N个点的宽度为N的DFT为:
第1页共10页
WN^k,(n=0,1,…,N_1)。
(Ng丿
用FFT实现DFT:
先设序列点数为N=2m,M为整数。
如果不满足这个条件,可以人为地加上若干零值点,使之达到这一要求。
这种N为2的整数幕的FFT称基2FFT设输入序列长度为N=2m(M为正整数),
将该序列按时间顺序的奇偶分解为越来越短的子序列,称为按时间抽取(DIT)的FFT算法。
下面给出8点基
2FFT的运算流图:
下面对两种变化的运算量进行比较。
设x(n)为N项的复数序列,由DFT变换,任一X(m)的计算都
需要N次复数乘法和N-1次复数加法,而一次复数乘法等于四次实数乘法和两次实数加法,一次复数加法等于两次实数加法,即使把一次复数乘法和一次复数加法定义成一次“运算”(四次实数乘法和四次实数
2
加法),那么求出N项复数序列的X(m),即N点DFT变换大约就需要N次运算。
当N=1024点甚至更多的时候,需要2=1048576次运算,在FFT中,利用WN的周期性和对称性,把一个N项序列(设N=2k,k为正整数),分为两个N/2项的子序列,每个N/2点DFT变换需要(N/2)2次运算,再用N次运算把两个N/2点的DFT变换组合成一个N点的DFT变换。
这样变换以后,总的运算次数就变成2*(N/2)2=Nf/2。
继续上
面的例子,N=1024时,总的运算次数就变成了525312次,节省了大约50%勺运算量。
而如果我们将这种
“一分为二”的思想不断进行下去,直到分成两两一组的DFT运算单元,那么N点的DFT变换就只需要NIogzN次的运算,N在1024点时,运算量仅有10240次,是先前的直接算法的1%点数越多,运算量的节约就
越大,这就是FFT的优越性。
图2-2
比较可以发现用DFT和FFT对同一序列变化得到的结果是完全一样的。
这说明DFT与FFT是完全等价
的,而区别仅在于其具体算法。
号类型无关。
当信号点数较多时,对不同类型信号进行DFT与FFT变化将花费大量时间,而上面已经验证DFT与FFT
DFT与FFT的运算
C程序中计时受机器滴
DFT运算时间将按N2规
运算时间仅与N有关,而与具体信号类型无关。
故下面将仅对同一类型不同点数信号的时间的比较,而这也具有一般代表性。
下面将仅对不同点数正弦信号做DFT与FFT变化,并进行运算时间比较。
由于
答时间限制,故对点数较小信号进行较多次数DFT与FFT变换。
而当点数较多时,
律增长,故对点数较多信号进行较少次数DFT与FFT变换。
各次DFT与FFT运算时间如下诸图:
黃R八诞件、课程设计參老E"
EimE3
ThetimeforSignalCosbpFFT<
N=2,10000times>
uas:
0.031000seconds
ThetimeFor8ignalCosb*DFT<
H=2>
10000tines>
was■0.032000secands
图3-4
c:
:
E;
\课件\踝程设计参考\Dcbug\Text1.eze
|_ia[
X
ThetineforSisinalCo^byFFT<
N=4,10000tine^>
0.063000sec
ThetimeFoi*SignalCe^byDFT<
N=4,10000tines>
uas:
0.156000sec
onds
^onds
«
1
1
图3-5
5E八谍件'
课稈设计孝考\Uebug\TextKexe冃回
E
ThetineforSignalCosbyFFTCN=8,1000time?
>
:
0.016000seconds
ThetineforSisrn^lCosbyDFTCN-Sj.1090times>
8.062000seconds
il
图3-6
E八课件'
深程设计孝考\Debug\TextLexeB回
s
ThetimeforSignalGosbyFFTCH~16,1@00times>
was:
0H04700BsecondsTheti<
T>
eforSignAlCosbyDFTCN=16,1000tines>
u&
s:
0.256003seconds
i
图3-7
CAE注课件、課程设计参考\Debug\Text1.exe
ThetineforSignalCosbyFFTtimes>
0.1090133seconds
Thetinefor8ignalCo^bvDFT<
N-32,1900times>
vias:
1seconds
图3-8
KE:
件、課稈设计秦考\Debug\T&
xt1.曲e
ThetineForSifrnalCosbyFFT<
H=1I324>
10tines>
B.0630(31*secondsThetineforSi^nalCosbyDFKN=1024,10tines>
seconds
图3-13
兀E:
\课ft\課程设计参考\®
ebug\Test1-exe
ThetimeforSlgnAlCosbyFFTCN-2048,10tines>
0.156080seconds
ThetimeforSignalCoshyDFTCN=2048^10times>
42.172000seconds图3-14
E:
件'
谍程设计蚩考\Debug\Text1-exe
B
Thetit^eforSignalCoshyFFTCN-4096,10times>
0.34400BsecondsThetineforSignalCosbyDFT<
N=499&
10tines?
167^047000seconds
图3-15
CAE:
\课件'
课程设计参考\Dwlrag\TextLexe
lllietimeforSignaICosbpFFT<
11=8192^1tiniestwas:
~B.07S000seconds
TJietineFopSignalGosbyDFT<
M-8192,1times^uas:
67-141000seconds
图3-16
小E:
课程设计^#\Debuf\Text1-exe
IhetineforSignAlCosbyFFT<
N=1&
384,1tbias=0,X56S0Sseconds
ThetineforSl^nalCosbyDFTCN=16384J±
time&
^ua&
267.485080seconds
图3-17
F面对以上数据进行整理分析。
(注:
e+n表示*10-n)
N
变换次数
Tdft/S
Tfft/s
mean(TDF》/s
mean(Tfft)/s
Tdft/Tfft
理论比值
10000
0.032
0.031
P3.2e-6
P3.1e-6
P1.03
4
0.156
0.063
1.56e-5
6.3e-6
2.48
8
1000
0.062
0.016
P6.2e-5
P1.6e-5
3.875
2.67
16
0.25
0.047
2.5e-4
4.7e-5
5.32
32
1.016
0.109
1.016e-3
1.09e-4
9.32
6.4
64
100
0.406
4.06e-3
1.6e-4
25.38
10.67
128
1.703
1.703e-2
6.3e-4
27.03
18.29
256
6.609
0.141
6.609e-2
P1.41e-3
P46.87
512