FFT算法分析
FFT算法分析
FFT 算法分析
FFT 算法的基本原理是把长序列的DFT 逐次分解为较短序列的DFT 。按照抽取方式的不同可分为DIT-FFT (按时间抽取)和DIF-FFT (按频率抽取)算法。按照蝶形运算的构成不同可分为基2、基4、基8以及任意因子(2n,n 为大于1的整数),基2、基4算法较为常用。
基2、DIT-FFT (按时间抽取):
-1
0/21
/21
2(21)/21
/21
/2
/2
()() ()()(2)(21)(2)(21)N kn
N
n kn
kn
N N
n n N N k r k r N
N
r n N N kr k kr N N
N r n X k x n W x n W x n W x r W
x r W
x r W
W
x r W ===--+==--====
+
=
+
+=
++∑∑
∑
∑
∑
∑
∑
偶数奇数0
00
令/211/2
(2)()
N kr N r x r W
X k -==∑0
,/212/2
(21)()
N kr N r x r W
X k -=+=∑0
,则有:
1212()()()
(/2)()()
k
N k
N
X k X k W X k X k N X k W X k =++=-
蝶形运算单元如下所示:
基2、DIF-FFT (按频率抽取):
-1
0/211
/2/21
/21
(/2)
/21
/2/21
/2
()() ()()()(/2)[()(/2)](2)[()(/2)](21)[()(N kn
N n N N kn kn
N
N n n N N N kn
k n N N
N
n n N kN kn N
N
n N rn N n X k x n W x n W x n W x n W x n N W x n W
x n N W
X r x n x n N W
X r x n x n N =--==--+==-=-===
+
=
+
+=
++=
+++=
-+∑∑
∑
∑
∑
∑∑0
00
/21
/2
/2)]N n rn N
N n W W
-=∑0
则有:
12()()(/2)()[()(/2)]n N
x n x n x n N x n x n x n N W
=++=-+
蝶形运算单元如下所示:
由前面的分析可知,DIT (按时间抽取)算法与DIF (按频率抽取)算法没有本质上的区别,只是复数加减法与旋转因子乘法的次序有区别,两种方法的运算量是一样的。
在基2算法中,每个蝶形运算单元都包括1次复数乘法、2次复数加法。N (N=
2M
)点序列的
运算流图应有M 级蝶形,每一级都由N/2个蝶形运算组成,所以N 点序列的基2FFT 算法,总的运算量为2
log 2
N N 次复数乘法,2
log
N N
次复数加
法。直接DFT 运算量为2
N 次复数乘法、(1)N N 次复数加法。可见,FFT 算法大大减少了运算量,当N 越大时,FFT 算法的优越性越明显。
基4、DIF-FFT(按频率抽取)
10
/41
/213/411
/4/2
3/4
/41
/41
/41
(/4)(/2)
(3/4)
()() ()()()()()(/4)(/2)(3/4)N kn
N n N N N N kn kn kn kn
N
N
N
N
n n N n N n N N N N kn k n N k n N N
N
N n n n k n N N n X k x n W x n W x n W x n W x n W x n W x n N W
x n N W x n N W -=----====---++===+===++
+
=+
++
+++∑∑
∑
∑
∑
∑
∑
∑
/41
/41/4/23/40
/41
/4
/41
/4
[()(/4)(/2)(3/4)](4)[()(/4)(/2)(3/4)](41)[()(/4)(/2)(3/4)](42)[N N kN kN kN kn
N
N N N
n N rn
N n N n rn N
N n x n x n N W
x n N W x n N W W X r x n x n N x n N x n N W
X r x n jx n N x n N jx n N W W
X r x --=-=-==++++++=+++++++=-+-++++=∑
∑∑∑/412/4
/41
3/4
()(/4)(/2)(3/4)](43)[()(/4)(/2)(3/4)]N n rn N N n N n rn N
N n n x n N x n N x n N W
W X r x n jx n N x n N jx n N W
W
-=-=-+++-++=
++-+-+∑∑
令:
012233()()(/4)(/2)(3/4)
()[()(/4)(/2)(3/4)]()[()(/4)(/2)(3/4)]()[()(/4)(/2)(3/4)]n
N
n N
n
N
x n x n x n N x n N x n N x n x n jx n N x n N jx n N W x n x n x n N x n N x n N W
x n x n jx n N x n N jx n N W =++++++=-+-+++=-+++-+=++-+-+
则有:
/41
/41
01/4
/4
00
/41
/41
23/4/4
(4)(),(41)()(42)(),(43)()N N rn rn
N N n n N N rn
rn
N N n n X r x n W
X r x n W X r x n W X r x n W --==--===+=
+=
+=
∑
∑
∑
∑
蝶形运算单元如下所示:
由上图可知每个基4蝶形运算单元包括3次复数乘法、8次复数加法。N (N=
2M
,M 为偶数)
点序列的FFT 运算若采用基4算法则有M/2级蝶形,每级由N/4个蝶形运算构成。采用基4算
法计算N 点序列的FFT 共需要2
3
log 8N N 次复数乘
法、2
log N N 次复数加法。由于主要的运算时间集
中在乘法上面,可见基4算法的运算量较基2算法减少了25%,但运算量的减少是以硬件的复杂性及使用更多资源为代价的。
FFT 算法的FPGA 实现
以8点(复数点,包括实部与虚部)、基2、DIF-FFT 为例来考虑FFT 算法的FPGA 实现。整个运算流图应由3级蝶形构成,每级中有4个蝶形运算。若DIF 的输入序列为顺序输入,则得到倒序输出。完整的运算流图如下所示:
考虑采用流水线结构,系统可采用3级基2蝶形运算单元构成,系统总体结构如下所示:
总体结构说明
输入数据为串行的数据流,故在第一级蝶形运算模块前加入串并转换模块,将串行数据流转换为并行的两列数据流以适应基2蝶形运算模块