You are on page 1of 23

第 4 章 快速傅立叶变换

 问题的提出
 解决问题的思路与方法
 基 2 时间抽取 FFT 算法
 基 2 时间抽取 FFT 算法的计算复杂度
 基 2 时间抽取 FFT 算法流图规律
 基 2 频率抽取 FFT 算法
 FFT 算法的实际应用
问题的提出

4 点序列 {2 , 3 , 3 , 2} DFT 的计算复杂度



N 1 何
X [ m]   x[k ]W Nkm , m  0,1, N  1 提
k 0

0 0 0 0
X [0]  2W N  3W N  3W N  2W N  10

DFT
0 1 2 3

?
X [1]  2W N  3W N  3W N  2W N  1  j
0 2 4 6

X [2]  2W N  3W N  3W N  2W N 0 运
0 3 6 9 算
X [3]  2W N  3W N  3W N  2W N  1  j

复数加法 N(N-1) 复数乘法 N 2 率
解决问题的思路

1. 将长序列 DFT 分解为短序列的 DFT

2. 利用旋转因子 W Nkm 的周期性、对称性、可约


性。
km
旋转因子 WN 的性质

1) 周期性
W N( k  N ) m  W Nk ( m N )  W Nkm
2) 对称性

 
N
mk  km 
WN 2  W Nmk WN  W N mk

3) 可约性
W Nmk  W nN
nmk

W Nmk  W Nmk/ n/ n , N / n为整数


解决问题的方法

将时域序列逐次分解为一组子序列,利用旋转因子
的特性,由子序列的 DFT 来实现整个序列的 DFT 。

基 2 时间抽取 (Decimation in time)FFT 算法


 x[2r ] N
x[k ]   r  0,1,   1
 x[2r  1] 2

基 2 频率抽取 (Decimation in frequency)FFT 算


法  X [ 2 m]
X [ m]  
 X [2m  1]
基 2 时间抽取 FFT 算法流图

N=2 x[k]={x[0], x[1]}

X [0]  x[0]  W 20 x[1]

X [1]  x[0]  W 21 x[1]  x[0]  W 20 x[1]

x[0] X [0]
W20
x[1] X [1]
-1
X [m]  X 1[m]  W4m X 2 [m], m  0,1
4 [点基
X m  2]2时间抽取
X 1[m]  WFFT
m 算法流图
4 X 2 [ m], m  0,1

X1[0]
x[0] X [0]

W20 2 点 DF X1[1]
x[2] T X [1]
1
X2[0] W40
x[1] X [2]
1
2 点 DF 1
0
W2 T X2[1] W4
x[3] X [3]
1 1
4 点基 2 时间抽取 FFT 算法流图

X1[0]
x[0] X[0]

W40 X1[1]
x[2] X[1]
1

X2[0] W40
x[1] X[2]
1

W40 X2[1] W41


x[3] X[3]
1 1
m
X [m]  X 1[m]  W8 X 2 [m], m  0,1,2,3
8 点基 2 时间抽取m FFT 算法流图
X [m  4]  X 1[m]  W8 X 2 [m], m  0,1,2,3
X1[0]
x[0] X [0]
X1[1]
x[2] X [1]
4 点 DFT X1[2]
x[4] X [2]
X1[3]
x[6] X [3]
X2[0] W80
x[1]
1 1 X [4]
W
X2[1] 8
x[3] X [5]
4 点 DFT 2 1
W
X2[2] 8
x[5] X [6]
1
X2[3] W83
x[7] X [7]
1
8 点基 2 时间抽取 FFT 算法流图

XX [0]
[0] X1[0]
x[0]
x[0] 1111
X [0]
W 0 2点DFT
8 XX [1]
[1] X1[1]
x[4]
x[2] 1
1111
X [1]
0 0
4XX12点 DFT
WW
[0]
[0] X1[2]
x[2]
x[4] 12 8 4
1 X [2]
W80 2点DFT
XX [1]WW
[1] 8 4
21
X1[3]
x[6]
x[6] 1
1212
1 X [3]
XX2121[0]
[0] X2[0] W80
x[1]
x[1] 0 1 X [4]
W 2点DFT W 1
8 XX2121[1]
[1] X2[1] 8
x[5]
x[3] 1 0 0 1
X [5]
4XX22点 DFT
W W
[0] 8 4
[0] W
X2[2] 8
2
x[5]
x[3] 22
X [6]
0 2 1 1 1
W 8
2点DFT XX [1][1]WW X2[3] W83
x[7]
x[7] 2222 8 4
X [7]
1 1 1
基 2 时间抽取 FFT 算法

第一级 第二级 第三级


x[0] X[0]
W80
x[4] X[1]
1
W80
x[2] X[2]
1
W80 W82
x[6] X[3]
1 1
W80
x[1] X[0]
1
W80 W81
x[5] X[1]
1 1
W80 W82
x[3] X[2]
1 1
W80 W82 W83
x[7] X[3]
1 1 1
算法的计算复杂度

N
复乘次数 log 2 N
2
复乘次数

N2

N
log2 N
2
N
基 2 时间抽取 FFT 算法流图

第一级 第二级 第三级


x[0] X[0]
W80
x[4] X[1]
1
W80
x[2] X[2]
1
W80 W82
x[6] X[3]
1 1
W80
x[1] X[0]
1
W80 W81
x[5] X[1]
1 1
W80 W82
x[3] X[2]
1 1
W80 W82 W83
x[7] X[3]
1 1 1
P
FFT 算法流图旋转因子 W N 规律

0
W
第一级的蝶形系数均为 N ,蝶形节点的距离
为1。
第二级的蝶形系数为 W N0 , W NN / 4 ,蝶形节点
的距离为 2 。
第三级的蝶形系数为 W N0 , W NN / 8 , W N2 N / 8 , W N3 N / 8
,蝶形节点的距离为 4 。

W N0 , W N1 ,  , W N( N / 21)
第 M 级 的蝶形系数为
,蝶形节点的距离为 N /2 。
k0 k1 k2

0 x[000]
0
1 x[100]
倒序 0
x[k2 k10] 0 x[010]
1
1 x[110]
x[k2 k1k0] 0
x[001]
0
1 x[101]
1
x[k2 k11] 0 x[011]
1
1 x[111]
基 2 频率抽取 FFT
算法
N / 2 1 N 1
X [m ]  k 0
x[k ]W mk
N  
kN / 2
x[k ]W mk
N

N / 2 1 N / 2 1
 
k 0
x[k ]W Nmk  
k 0
x[k  N / 2]W Nm ( k  N / 2 )
N / 2 1
   x[k ]  (1)
k 0
m
x[k  N / 2] W Nmk
N / 2 1
X [ 2r ]    x[k ]  x[k  N / 2]W
k 0
rk
N /2

N / 2 1
X [2r  1]    x[ k ]  x[ k  N / 2]W k
N W rk
N /2
k 0
N / 21
X [ 2r ]    x[ k ]  x[ k  N / 2]W rk
N /2
r  0,1 N / 2  1
k 0
N / 2 1
X [2r  1]    x[ k ]  x[ k  N / 2]W k
N W rk
N /2
k 0

x[0] X[0]
x[1] X[2]
4点
x[2] DFT X[4]
x[3] X[6]
x[4] WN0
-1 X[1]
x[5] WN1
-1 4点 X[3]
x[6]
WN2 DFT
-1 X[5]
3
x[7]
WN
-1 X[7]
x[0] X[0]
2点
x[1] DFT X[4]
0
W N
x[2] -1
X[2]
2
2点
W DFT
x[3] -1
N X[6]
0
x[4]
W
N X[1]
-1 2点
1
x[5] W
N DFT X[5]
-1
2 0
x[6] W
N WN X[3]
-1 -1 2点
3 2
x[7] W
N WN DFT X[7]
-1 -1
x[0] X[0]

x[1] WN0
-1
X[4]

x[2] WN0
-1
X[2]

x[3] WN2 WN0


-1 -1
X[6]
0
x[4] W
N X[1]
-1
1 0
x[5] W
N WN
X[5]
-1 -1
2
x[6] W
N WN0
-1 -1
X[3]
3
x[7] W
N WN2 WN0
-1
X[7]
-1 -1
FFT 算法应用

 利用 N 点复序列的 FFT 计算两个 N 点实序列 F


FT

 利用 N 点复序列的 FFT ,计算 2N 点序列的 FF


T

 利用 FFT 计算 IFFT
利用 N 点复序列的 FFT 算法计算
两个 N 点实序列 FFT

x1[k], x2[k] 是实序列, DFT  x1[k ]  ?


将其构成复序列 y[k]=x1[k]+j x2[k] DFT  x 2 [k ]  ?
DFT{x1[k]+j x2[k]}=YR [m]+jYI [m]

DFT  x1[k ]  jx 2 [k ]  YR [(m) N ]  jYI [(m) N ]

1
DFT  x1[k ]  YR [m]  YR [(m) N ]  j (YI [m]  YI [(m) N ])
2
1
DFT  x 2 [k ]  YR [m]  YR [(m) N ]  j (YI [m]  YI [(m) N ])
2j
利用 N 点复序列的 FFT ,计算 2N 点序列的 FFT

y[k] 是一个长度为 2N 的序

 x1[k ]  y[2k ]
y[k ]   k  0,1,  N  1
 x 2 [k ]  y[2k  1]

Y [m]  X 1[m]  W2mN X 2 [m]


m  0,1, , N  1
Y [m  N ]  X 1[m]  W2mN X 2 [ m]

问题:如何利用 N 点 FFT ,计算 4N 点序列的 F


FT ?
利用 FFT 实现 IFFT
N 1
X [m]  DFT  x[k ]   x[k ]W Nmk
k 0
1 N 1
x[k ]  IDFT  X [m]   X [m]W Nmk
N m 0


1  N 1 mk 
x[k ]    X [m]W N 

N  m 0 

步骤: A) 将 X [m] 取共轭



B) 用FFT流图计算DFT { X [m]}
C) 对 B) 中结果取共轭并除以 N

You might also like