FFT快速傅里叶变换(蝶形算法)详解

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

11
k X ( k ) X ( k ) W 因此, 1 N X 2 (k ) 只能计算出X(k)的前一半值。
后一半X(k) 值, N/2 , N/2 +1, …,N ?
利用
可得到
rk r ( N 2k ) WN W 2 N 2
N X1 ( k ) 2
X2(
N 21

r 0
第五章 快速傅里叶变换
本章目录

直接计算DFT的问题及改进的途径 按时间抽取的基2-FFT算法 按频率抽取的基2-FFT算法 快速傅里叶逆变换(IFFT)算法 Matlab实现
2
5.1 引言

DFT在实际应用中很重要: 可以计算信号的频
谱、功率谱和线性卷积等。

直接按DFT变换进行计算,当序列长度N很
结论:当N很大时,其运算量很大,对实时性很强的信号 处理来说,要求计算速度快,因此需要改进DFT的计算 方法,以大大减少运算次数。
7
5.2.2 减少运算工作量的途径
nk 主要原理是利用系数 WN 的以下特性对DFT进行分解:
(1)对称性
k ( N n ) nk nk (WN ) WN WN
nk N

n 0 n为奇数
nk x ( n ) W N
N 1
10

2 rk ( 2 r 1) k x(2r )WN x(2r 1)WN 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
16 384
65 536 262 144 1 048 576 4 194 304
448
1 024 2 304 5 120 11 264
36.6
64.0 113.8 204.8 372.4
24
5.3.3 按时间抽取的FFT算法的特点

序列的逆序排列 同址运算(原位运算) 蝶形运算两节点间的距离

因此通过一次分解后,运算工作量减少了差 不多一半。
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
(2)周期性 (3)可约性 另外,
( n N ) k n( k N ) nk WN WN WN
mnk nk WmN WN
nk nk / m WN WN /m
( k N / 2) k WN WN
N /2 WN 1
8
5.3 按时间抽取的基2-FFT算法

算法原理 按时间抽取基-2FFT算法与直接计算 DFT运算量的比较 按时间抽取的FFT算法的特点 按时间抽取FFT算法的其它形式流程图
18
以8点为例第二次按奇偶分解
19
算法原理
对此例N=8,最后剩下的是4个N/4= 2点的DFT,2点
DFT也可以由蝶形运算来完成。以X3(k)为例。
X 3 (k )

N / 4 1

l 0
x3 (l )W
lk N /4

lk x ( l ) W 3 N /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)
WN0
1 WN
WN2
3 WN
15
蝶形运算量比较

N点DFT的运算量
复数乘法次数: N2 复数加法次数: N(N-1)

分解一次后所需的运算量=2个N/2的DFT+ N/2蝶形:
复数乘法次数: 2*(N/2)2+N/2=N2/2+N/2 复数加法次数: 2*(N/2)(N/2-1)+2*N/2=N2/2
所以 整个N点DFT运算共需要:
实数乘法次数: 4 N2
实数加法次数: N×2(2N-1)= 2N(2N-1)
6
DFT运算量的结论
N点DFT的复数乘法次数举例 N 2 4 8 16 32 N2 4 16 64 256 1028 N 64 128 256 512 1024 N2 4049 16384 65 536 262 144 1 048 576
由按时间抽取法FFT的信号流图可知,当N=2L时,共有 L 级 蝶形运算;每级都由 N/2 个蝶形运算组成,而每个蝶形有 1 次复乘、 2 次复加,因此每级运算都需 N/2 次复乘和 N 次复加。
22
这样 L 级运算总共需要: 复数乘法:
N N L log 2 N 2 2
复数加法:N L N log2 N 直接DFT算法运算量 复数乘法: N2 复数加法: N(N-1) 直接计算DFT与FFT算法的计算量之比为M N2 2N M N log2 N log2 N 2
N 2M , 第L级:
r WN W2jL , j 0,1,2,,2 L1 1
2 பைடு நூலகம் 2 M 2 LM N 2 LM
W W
r N j N 2 L M
e
j
2 N 2 L M
j
e
j
2 j 2 M L N
W
j 2 M L N
x1 (r )W
r ( N 2 k ) N 2
rk x1 (r )WN 2 X 1 (k ) r 0
N 2 1
同理可得
N k ) X 2 (k ) 2
12
考虑到 及前半部分X(k)
( N 2 k ) N 2 k k WN WN WN WN
k X (k ) X 1 (k ) WN X 2 (k )
23
FFT算法与直接DFT算法运算量的比较
N N2
N log 2 N 2
计算量 之比M
N
N2
N log 2 N 2
计算量 之比M
2
4 8 16 32 64
4
16 64 256 1028 4049
1
4 12 32 80 192
4.0
4.0 5.4 8.0 12.8 21.4
128
256 512 1024 2048
k X 3 (k ) WN / 2 X 4 (k )
k=0,1,…,
N 1 4
17

N k X1 k X 3 (k ) WN / 2 X 4 (k ) 4
k=0,1,…,
N 1 4
由此可见,一个N/2点DFT可分解成两个N/4点DFT。 同理,也可对x2(n)进行同样的分解,求出X2(k)。

9
5.3.1 算法原理
设N=2L,将x(n)按 n 的奇偶分为两组:
x(2r ) x1 (r )
x(2r 1) x2 (r )
r
N =0,1,…, 1 2

X (k ) DFT [ x(n)] x(n)WNnk
n 0
N 1

n 0 n为偶数
x(n)W
N 1
rk N 2
x (r )W
1

N 4 1 l 0
x (2l )W
1
N 4 1 l 0 k N 2
2lk N 2

N 4 1 l 0
x (2l 1)W
1
( 2l 1) k N 2

N 4 1 l 0
x3 (l )W
lk N 4
W
lk x ( l ) W 4 N4
r WN
的确定
25
序列的逆序排列

序列的逆序排列
由于 x(n) 被反复地按奇、偶分组,所以流图输入端的 排列不再是顺序的,但仍有规律可循: 因为 N=2M , 对于任意 n(0≤n ≤N-1),可以用M个 二进制码表示为:
n( DEC) (nM 1nM 2 n2 n1n0 ) ( BIN )
0 nM 1 , nM 2 ,, n2 , n1 , n0 1
n 反复按奇、偶分解时,即按二进制码的“0” “1” 分解。
26
倒位序的树状图(N=8)
27
码位的倒位序(N=8)
自然顺序 n 0 1 2 3 二进制数 000 001 010 011 倒位序二进制数 000 100 010 110
ˆ 倒位序顺序数 n
0 4 2 6
4
5 6
100
101 110
001
101 011
1
5 3
7
111
111
7
28
倒位序的变址处理(N=8)
29
同址运算(原位运算)

同址运算(原位运算)
某一列任何两个节点k 和j 的节点变量进行蝶形运算 后,得到结果为下一列k、j两节点的节点变量,而和其他 节点变量无关。这种原位运算结构可以节省存储单元, 降低设备成本。 例
nk x ( n ) W N
N 1
rk k rk x1 (r )W N WN x ( r ) W 2 N 2 2
k X 1 (k ) WN X 2 (k )
式中,X1(k)和X2(k)分别是x1(n)和x2(n)的N/2的DFT。
另外,式中k的取值范围是:0,1, …,N/2-1 。
大时,计算量非常大,所需时间会很长。 FFT并不是一种与DFT不同的变换,而是 DFT的一种快速计算的算法。

3
5.2 直接计算DFT的问题及改进的途径

DFT的运算量
设复序列x(n) 长度为N点,其DFT为
nk X (k ) x(n)WN n 0 N 1
k=0,,…,N-1
(1)计算一个X(k) 值的运算量
运算前
A(k ) X 1 (k ) X (k )
运算后
A(k )
A(k
N ) X 2 (k ) 2
k WN
N A(k N ) X (k ) 2 2
30
观察原位运算规律
31
蝶形运算两节点间的距离

蝶形运算两节点间的距离
以N=8为例: 第一级蝶形,距离为: 第二级蝶形,距离为: 第三级蝶形,距离为: 1 2 4
33
5.4 按频率抽取的基2-FFT算法

算法原理
先把输入按n的顺序分成前后两半 再把输出X(k)按k的奇偶分组 设序列长度为N=2L,L为整数 前半子序列x(n) 后半子序列 x(n
复数乘法次数: N 复数加法次数: N-1
4
5.2.1 DFT的运算量
(2)计算全部N个X(k) 值的运算量
复数乘法次数: N2 复数加法次数: N(N-1)
(3)对应的实数运算量
X (k ) x(n)W
n 0
N 1 n 0
N 1
nk N
nk nk [Re x(n) j Im x(n)][Re WN j Im WN ] n 0
因此可得后半部分X(k)
X (k
k=0,1, …,N/2-1
N N N kN 2 ) X 1 (k ) WN X 2 (k ) 2 2 2
k X1 (k ) WN X 2 (k )
k=0,1, …,N/2-1
13
蝶形运算
k X (k ) X 1 (k ) WN X 2 (k )
规律:对于共L级的蝶形而言,其m级蝶形运算的节
点间的距离为 2 m1
32
r WN
的确定

W 的确定
r N
以N=8为例:
r m 1时,WN WNj / 4 W2jm W20 , j 0
r m 2时,WN WNj / 2 W2jm W4j , j 0,1
r m 3时,WN WNj W2jm W8j , j 0,1,2,3
k X (k ) X1 (k ) WN X 2 (k )
蝶形运算式
蝶形运算信 号流图符号
因此,只要求出2个N/2点的DFT,即X1(k)和X2(k),再 经过蝶形运算就可求出全部X(k)的值,运算量大大减少。
14
以8点为例第一次按奇偶分解
以N=8为例, 分解为2个4点 的DFT,然后 做8/2=4次蝶形 运算即可求出 所有8点X(k)的 值。
0 X 3 (1) x3 (0) W21x3 (1) x(0) W21 x(4) x(0) WN x(4)
这说明,N=2M的DFT可全部由蝶形运算来完成。
20
以8点为例第三次按奇偶分解
N=8按时间抽取法FFT信号流图
21
5.3.2 按时间抽取基2-FFT算法与直接计算DFT运算量的比较
N 1
nk nk {[Re x(n) ReWN Im x(n) ImWN ]
nk nk j[Re x(n) ImWN Im x(n) ReWN ]}
5
一次复数乘法: 4次实数乘法 一个X(k) :
+ 2次实数加法
4N次实数乘法 + 2N+2(N-1)= 2(2N-1)次实数加法
相关文档
最新文档