FFT算法分析

FFT算法分析
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蝶形运算模块

相关主题
相关文档
最新文档