FFT算法思想
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一.FFT 算法思想:
1.DFT 的定义:
对于有限长离散数字信号{x[n]},0 ≤ n ≤ N-1,其离散谱{x[k]}可以由离散付氏变换(DFT )求得。DFT 的定义为:
21
[][]N j
nk N
n X k x n e
π--==∑,k=0,1,…N-1
通常令2j
N
N e
W π-=,称为旋转因子。
2.直接计算DFT 的问题及FFT 的基本思想:
由DFT 的定义可以看出,在x[n]为复数序列的情况下,完全直接运算N 点DFT 需要(N-1)2次复数乘法和N (N-1)次加法。因此,对于一些相当大的N 值(如1024)来说,直接计算它的DFT 所作的计算量是很大的。
FFT 的基本思想在于,将原有的N 点序列分成两个较短的序列,这些序列的DFT 可以很简单的组合起来得到原序列的DFT 。例如,若N 为偶数,将原有的N 点序列分成两个(N/2)点序列,那么计算N 点DFT 将只需要约[(N/2)2 ·2]=N 2/2次复数乘法。即比直接计算少作一半乘法。因子(N/2)2表示直接计算(N/2)点DFT 所需要的乘法次数,而乘数2代表必须完成两个DFT 。上述处理方法可以反复使用,即(N/2)点的DFT 计算也可以化成两个(N/4)点的DFT (假定N/2为偶数),从而又少作一半的乘法。这样一级一级的划分下去一直到最后就划分成两点的FFT 运算的情况。
3.基2按时间抽取(DIT )的FFT 算法思想:
设序列长度为2L N =,L 为整数(如果序列长度不满足此条件,通过在后面补零让其满足)。
将长度为2L N =的序列[](0,1,...,1)x n n N =-,先按n 的奇偶分成两组:
12[2][][21][]
x r x r x r x r =+=,r=0,1,…,N/2-1
DFT 化为:
1/21
/21
2(21)0
/21
/21
22120
0/21
/21
1/2
2/2
[]{[]}[][2][21][][][][]N N N nk
rk r k
N
N
N
n r r N N rk k rk N
N
N r r N N rk k rk N N
N r r X k DFT x n x n W
x r W
x r W x r W W
x r W x r W
W
x r W ---+===--==--=====
+
+=+=
+∑∑
∑
∑
∑
∑
∑
上式中利用了旋转因子的可约性,即:2/2rk
rk
N
N W W =。又令
/21
/21
11/2
22/20
[][],[][]N N rk
rk
N N r r X k x r W
X k x r W --===
=
∑
∑
,则上式可以写成:
12[][][]k
N X k X k W X k =+(k=0,1,…,N/2-1)
可以看出,12[],[]X k X k 分别为从[]X k 中取出的N/2点偶数点和奇数点序列的N/2点DFT 值,所以,一个N 点序列的DFT 可以用两个N/2点序列的DFT 组合而成。但是,从上式可以看出,这样的组合仅表示出了[]X k 前N/2点的DFT 值,还需要继续利用12[],[]X k X k 表示[]X k 的后半段本算法推导才完整。利用旋转因子的周期性,有:(/2)
/2/2
rk
r k N N N W W +=,则后半段的DFT 值表达式:
/21/21()211/21/2100
[][][][]2N N N r k rk N N r r N X k x r W x r W X k --+==+===∑∑,同样,22[][]2N
X k X k +=
(k=0,1,…,N/2-1),所以后半段(k=N/2,…,N-1)的DFT 值可以用前半段k 值表达式获得,中间还利用到()2
2N
N
k k k N
N
W W W W +==-,得到后半段的[]X k 值表达式
为:12[][][]k N X k X k W X k =-(k=0,1,…,N/2-1)。