版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hhhhhhxh/article/details/80792924
FFT是一种快速计算DFT的算法。按时间抽选的基-2FFT推导过程如下:
首先给出DFT的计算公式:
X(k)=DFT[x(n)]=∑n=0N−1x(n)WnkN
其中
WN=e−j2πN
容易证明:
WnkN=W(n+rN)kN=W(k+rN)nN,r为整数
WnkN=WmnkmN,WnkN=Wnk/mN/m
因此,可以得出一些特殊值:
WN/2N=−1
Wk+N2N=−WkN
W(N−k)nN=W(N−n)kN=W−nkN
FFT的主要思想就是利用这些性质将DFT中的某些项合并。
设序列的长度为
N=2L
,将其分成奇偶两组:
{x(2r)=x1(r)x(2r+1)=x2(r)(1)
其中
r=0,1,...,N2−1
则
X(k)=∑n=0(n为偶数)N−1x(n)WnkN+∑n=0(n为奇数)N−1x(n)WnkN
X(k)=∑r=0N2−1x(2r)W2rkN+∑r=0N2−1x(2r+1)W(2r+1)kN
X(k)=∑r=0N2−1x1(r)WrkN/2+WkN∑r=0N2−1x2(r)WrkN/2
令
X1(k)=∑r=0N2−1x1(r)WrkN/2
X2(k)=∑r=0N2−1x2(r)WrkN/2
则
X(k)=X1(k)+WkNX2(k)(2)
X1(k),X2(k)
分别是
x1(r)和x2(r)
的
N/2
点DFT。
这样我们就可以把一个
N
点DFT分解为两个
N/2
点DFT,并通过
(2)
式组合成
N
点DFT。
但是式中的
k,r=0,1,...,N2−1
,也就是说,这只是
X(k)
的前一半序列。
可以应用周期性求解
X(k)
的后一半序列。
易证:
X1(N2+k)=X1(k)X2(N2+k)=X2(k)Wk+N2N=−WkN
因此:
X(k+N2)=X1(k)−WkNX2(k),k=0,1,...,N2−1(3)
通过
(2)
式和
(3)
式,就可以通过两个
N/2
点DFT序列组合出一个完整的
N
点DFT序列。
附运算次数(序列的长度为
N
):
直接DFT:
复数乘法
N2
次
复数加法
N(N−1)
次
利用FFT求解DFT:
复数乘法
N2log2N
次
复数加法
Nlog2N
次