当前位置:
文档之家› 05-第五章 快速傅里叶变换
05-第五章 快速傅里叶变换
2
5.1 引言
DFT在实际应用中很重要 DFT在实际应用中很重要: 可以计算信号的频 在实际应用中很重要: 功率谱和线性卷积等。 谱、功率谱和线性卷积等。 直接按DFT变换进行计算,当序列长度N 直接按DFT变换进行计算,当序列长度N很 变换进行计算 大时,计算量非常大,所需时间会很长。 大时,计算量非常大,所需时间会很长。 FFT并不是一种与 FFT并不是一种与DFT不同的变换,而是 并不是一种与DFT不同的变换, 不同的变换 DFT的一种快速计算的算法。 DFT的一种快速计算的算法。 的一种快速计算的算法
∑
l =0
x3 (l )W
lk N /4
=
lk x3 (l )WN / 4 ∑ l =0
1
k=0, 1
0 0 X 3 (0) = x3 (0) + W20 x3 (1) = x(0) + W2 x(4) = x (0) + WN x(4)
X 3 (1) = x3 (0) + W21 x3 (1) = x(0) + W21 x(4) = x(0) − WN0 x(4)
由按时间抽取法FFT的信号流图可知,当N=2L时,共有 L 级 蝶形运算;每级都由 N/2 个蝶形运算组成,而每个蝶形有 1 次复乘、 2 次复加,因此每级运算都需 N/2 次复乘和 N 次复加。
22
级运算总共需要: 这样 L 级运算总共需要:
N N 复数乘法: ⋅ L = log 2 N 2 2
k=0,1,…,
N −1 4
17
且
N X 1 + k = X 3 ( k ) − WNk / 2 X 4 ( k ) 4
k=0,1,…,
N −1 4
由此可见,一个N/2点DFT可分解成两个 点DFT。 可分解成两个N/4点 由此可见,一个 点 可分解成两个 。 同理,也可对 进行同样的分解, 同理,也可对x2(n)进行同样的分解,求出 2(k)。 进行同样的分解 求出X 。
=
n=0 n为偶数
∑ x(n)W
nk N
+
n=0 n为奇数
nk x (n)WN ∑
10
=
2 ( = ∑x(2r)WN rk + ∑x(2r +1)WN2r+1)k r =0 r =0
N −1 2 r=0 N −1 2 r =0
n =0 n为偶数 N −1 2
∑ x(n)W
N −1
nk N
+
n =0 n为奇数 N −1 2
复数乘法次数: 复数乘法次数: N 复数加法次数: 复数加法次数: N-1
4
5.2.1 DFT的运算量 DFT的运算量
(2)计算全部 个X(k) 值的运算量 )计算全部N个
复数乘法次数: 复数乘法次数: N2 复数加法次数: 复数加法次数: N(N-1)
(3)对应的实数运算量 )
X ( k ) = ∑ x( n)W
nk x(n)WN ∑
N −1
rk k rk = ∑x1 (r)WN +WN ∑x2 (r)WN 2 2
k = X1 (k) +WN X 2 (k)
式中, 分别是x 式中,X1(k)和X2(k)分别是 1(n)和x2(n)的N/2的DFT。 和 分别是 和 的 的 。 另外,式中 的取值范围是 的取值范围是: , , , 另外,式中k的取值范围是:0,1, …,N/2-1 。 -
k=0,1, …,N/2-1 , , , -
13
蝶形运算
k X (k) = X1(k) +WN X2 (k)
蝶形运算式
X ( k ) = X 1 ( k ) − WNk X 2 ( k )
蝶形运算信 号流图符号
因此,只要求出 个 点的DFT,即X1(k)和X2(k),再 因此,只要求出2个N/2点的 点的 , 和 , 经过蝶形运算就可求出全部X(k)的值,运算量大大减少。 的值, 经过蝶形运算就可求出全部 的值 运算量大大减少。
18
以8点为例第二次按奇偶分解
19
算法原理
对此例N=8,最后剩下的是4个N/4= 2点的 ,最后剩下的是 个 点的DFT,2点 对此例 点的 , 点 DFT也可以由蝶形运算来完成。以X3(k)为例。 也可以由蝶形运算来完成。 为例。 也可以由蝶形运算来完成 为例
X 3 (k ) =
即
N / 4 −1
14
以8点为例第一次按奇偶分解
为例, 以N=8为例, 为例 分解为2个 点 分解为 个4点 的DFT,然后 , 做8/2=4次蝶形 次蝶形 运算即可求出 所有8点 所有 点X(k)的 的 值。
0 WN
1 WN
2 WN
3 WN
15
蝶形运算量比较
N点DFT的运算量 DFT的运算量
复数乘法次数: N2 复数加法次数: N(N-1)
rk N 2
∑ x1 (r )W
=
N 4 −1 l =0
∑ x1 (2l )W
N 4 −1 l =0 k N 2 4
2 lk N 2
+
N 4 −1 l =0
( l x1 (2l + 1)WN22+1) k ∑
=
N 4 −1 l =0
∑ x (l )W
3
lk N 4
+W
∑ x (l )W
lk N 4
k = X 3 ( k ) + WN / 2 X 4 ( k )
mnk WmN = WNnk
/ WNnk = WNnk mm /
( k WN k + N / 2 ) = −WN
WNN / 2 = −1
8
5.3 按时间抽取的基2-FFT算法 按时间抽取的基2 FFT算法
算法原理 按时间抽取基-2FFT算法与直接计算 按时间抽取基-2FFT算法与直接计算 DFT运算量的比较 DFT运算量的比较 按时间抽取的FFT算法的特点 按时间抽取的FFT算法的特点 按时间抽取FFT算法的其它形式流程图 按时间抽取FFT算法的其它形式流程图
9
5.3.1 算法原理
设N=2L,将x(n)按 n 的奇偶分为两组: = 按 的奇偶分为两组:
x(2r ) = x1 (r )
x(2r + 1) = x2 (r )
r =0,1,…, − 1 , , ,
N 2
则
nk X (k) = DFT[x(n)] = ∑x(n)WN n=0
N −1 N −1
N−1
复数加法:N ⋅ L = N log2 N 直接DFT算法运算量 算法运算量 直接 复数乘法: N2 复数加法: N(N-1) 直接计算DFT与FFT算法的计算量之比为 与 算法的计算量之比为M 直接计算 算法的计算量之比为 N2 2N M= = N log 2 N log 2 N 2
23
FFT算法与直接DFT算法运算量的比较 FFT算法与直接DFT算法运算量的比较
N log 2 N 2
计算量 之比M 36.6 64.0 113.8 204.8 372.4
1 4 12 32 80 192
448 1 024 2 304 5 120 11 264
24
5.3.3 按时间抽取的FFT算法的特点 按时间抽取的FFT算法的特点
序列的逆序排列 同址运算(原位运算) 蝶形运算两节点间的距离
N 2 −1 r =0
∑ x (r )W
1
r ( N 2+ k ) N 2
rk = ∑ x1 (r )WN 2 = X 1 (k ) r =0
N 2 −1
同理可得
X2(
N + k ) = X 2 (k ) 2
12
考虑到 及前半部分X(k) 及前半部分
( WN N 2 + k ) = WNN 2 ⋅ WNk = −WNk
16
进一步按奇偶分解
由于N=2L,因而N/2仍是偶数 ,可以进一步把每个N/2点 子序列再按其奇偶部分分解为两个N/4点的子序列。 以N/2点序列x1(r)为例 则有
X 1 (k ) =
N 2 −1 r =0
x1 (2l ) = x3 (l ) N l = 0,1,…, − 1 x1 (2l + 1) = x4 (l ) 4
N 2 4 8 16 32 64 N2 4 16 64 256 1028 4049
N log 2 N 2
计算量 之比M 4.0 4.0 5.4 8.0 12.8 21.4
N 128 256 512 1024 2048
N2 16 384 65 536 262 144 1 048 576 4 194 304
k X (k) = X1(k) +WN X2 (k)
因此可得后半部分X(k) 因此可得后半部分
X (k +
k=0,1, …,N/2-1 , , , -
N N N k ) = X 1 (k + ) + WN + N 2 X 2 (k + ) 2 2 2
k = X 1 ( k ) − WN X 2 ( k )
分解一次后所需的运算量= N/2的DFT+ 分解一次后所需的运算量=2个N/2的DFT+ N/2蝶形 N/2蝶形: 蝶形:
复数乘法次数: 2*(N/2)2+N/2=N2/2+N/2 复数加法次数: 2*(N/2)(N/2-1)+2*N/2=N2/2
因此通过一次分解后,运算工作量减少了差 因此通过一次分解后, 不多一半。 不多一半。
n =0
N −1 n =0
N −1
nk N
= ∑ [Re x( n) + j Im x( n)][Re WNnk + j Im WNnk ]