FFT快速傅里叶变换(蝶形算法)详解资料讲解
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
FFT并不是一种与DFT不同的变换,而是 DFT的一种快速计算的算法。
3
5.2 直接计算DFT的问题及改进的途径
DFT的运算量
设复序列x(n) 长度为N点,其DFT为
N1
X(k) x(n)WNnk n0
k=0,,…,N-1
(1)计算一个X(k) 值的运算量
复数乘法次数: N
复数加法次数: N-1
7
5.2.2 减少运算工作量的途径
主要原理是利用系数
W
nk N
的以下特性对DFT进行分解:
(1)对称性
(W
nk N
)
W nk N
W k(N n) N
(2)周期性
W N (nN)kW N n(kN)W N nk
(3)可约性
Wmnk mN
WNnk
WNnk WNnk/m/m
另外,
WNN/2 1
W(kN/2) N
r0
l0
l0
N41
N41
x3(l)W N lk4W N k2 x4(l)W N lk4
l0
l0
X3(k)W N k/2X4(k)
k=0,1,…,
N 4
1
17
且
X1N 4kX3(k)W N k/2X4(k)
k=0,1,…,
N 4
1
由此可见,一个N/2点DFT可分解成两个N/4点DFT。
同理,也可对x2(n)进行同样的分解,求出X2(k)。
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
因此通过一次分解后,运算工作量减少了差 不多一半。
蝶形运算信 号流图符号
因此,只要求出2个N/2点的DFT,即X1(k)和X2(k),再 经过蝶形运算就可求出全部X(k)的值,运算量大大减少。
14
以8点为例第一次按奇偶分解
以N=8为例,
分解为2个4点
的DFT,然后
做8/2=4次蝶形
运算即可求出
W
0 N
所有8点X(k)的
值。
W
1 N
W
2 N
W
3 N
第五章 快速傅里叶变换
本章目录
直接计算DFT的问题及改进的途径 按时间抽取的基2-FFT算法 按频率抽取的基2-FFT算法 快速傅里叶逆变换(IFFT)算法 Matlab实现
2
5.1 引言
DFT在实际应用中很重要: 可以计算信号的频 谱、功率谱和线性卷积等。
直接按DFT变换进行计算,当序列长度N很 大时,计算量非常大,所需时间会很长。
WNk
8
5.3 按时间抽取的基2-FFT算法
算法原理 按时间抽取基-2FFT算法与直接计算
DFT运算量的比较 按时间抽取的FFT算法的特点 按时间抽取FFT算法的其它形式流程图
9
5.3.1 算法原理
设N=2L,将x(n)按 n 的奇偶分为两组:
x(2r)x1(r) x(2r1)x2(r)
因此可得后半部分X(k)
k=0,1, …,N/2-1
X (k N 2) X 1 (k N 2) W N k N 2 X 2 (k N 2)
X1(k)W N kX2(k)
k=0,1, …,N/2-1
13
蝶形运算
X(k)X 1(k)W N kX 2(k) X(k)X 1(k)W N kX 2(k)
蝶形运算式
r0
r0
N1
N1
2
2
x1(r)WN rkWNk x2(r)WN rk
r0
2
r0
2
X1(k)W N kX2(k)
式中,X1(k)和X2(k)分别是x1(n)和x2(n)的N/2的DFT。 另外,式中k的取值范围是:0,1, …,N/2-1 。
11
因此,X(k)X 1(k)W N kX 2(k) 只能计算出X(k)的前一半值。 后一半X(k) 值, N/2 , N/2 +1, …,N ?
r =0,1,…,N 1
2
则
N1
X(k)D FT[x(n)] x(n)W N nk
n0
N1
N1
x(n)WNnk x(n)WNnk
n0 n为偶数
n0 n为奇数
10
N1
N1
x(n)WNnk x(n)WNnk
n0 n为偶数
n0 n为奇数
N1
N1
2
2
x(2r)W N 2rk x(2r1)W N (2r1)k
利用 可得到
W W r(N 2k ) N2
rk N2
N
X1( 2
k)
N 21
x1(r)WNr(2N 2k)
r0
N 21
x1(r)WNrk2
r0
X1(k)
Fra Baidu bibliotek
同理可得
X2(N2 k)X2(k)
12
考虑到
W N (N2k)W N N2W N k W N k
及前半部分X(k)
X(k)X 1(k)W N kX 2(k)
实数乘法次数: 4 N2
实数加法次数: N×2(2N-1)= 2N(2N-1)
6
DFT运算量的结论
N点DFT的复数乘法次数举例
N
N2
N
N2
2
4
64
4049
4
16
128
16384
8
64
256
65 536
16
256
512
262 144
32
1028
1024
1 048 576
结论:当N很大时,其运算量很大,对实时性很强的信号 处理来说,要求计算速度快,因此需要改进DFT的计算 方法,以大大减少运算次数。
16
进一步按奇偶分解
由于N=2L,因而N/2仍是偶数 ,可以进一步把每个N/2点 子序列再按其奇偶部分分解为两个N/4点的子序列。
以N/2点序列x1(r)为例
x1x(12(l2 l)1 )x3x(4l()l)
l0,1, ,N1 4
则有
N 21
N4 1
N4 1
X1(k) x1(r)WNrk2 x1(2l)W N 2l2k x1(2l1)W N (22 l 1)k
n 0
n 0
N 1
{[R ex(n)R eW N nkIm x(n)Im W N nk] n 0
j[ R e x ( n )I m W N n k I m x ( n )R e W N n k ] }
5
一次复数乘法:4次实数乘法 + 2次实数加法 一个X(k) : 4N次实数乘法 +
2N+2(N-1)= 2(2N-1)次实数加法 所以 整个N点DFT运算共需要:
4
5.2.1 DFT的运算量
(2)计算全部N个X(k) 值的运算量
复数乘法次数: N2
复数加法次数: N(N-1)
(3)对应的实数运算量
N 1
N 1
X ( k )x ( n ) W N n k[ R e x ( n ) jI m x ( n ) ] [ R e W N n k jI m W N n k ]
3
5.2 直接计算DFT的问题及改进的途径
DFT的运算量
设复序列x(n) 长度为N点,其DFT为
N1
X(k) x(n)WNnk n0
k=0,,…,N-1
(1)计算一个X(k) 值的运算量
复数乘法次数: N
复数加法次数: N-1
7
5.2.2 减少运算工作量的途径
主要原理是利用系数
W
nk N
的以下特性对DFT进行分解:
(1)对称性
(W
nk N
)
W nk N
W k(N n) N
(2)周期性
W N (nN)kW N n(kN)W N nk
(3)可约性
Wmnk mN
WNnk
WNnk WNnk/m/m
另外,
WNN/2 1
W(kN/2) N
r0
l0
l0
N41
N41
x3(l)W N lk4W N k2 x4(l)W N lk4
l0
l0
X3(k)W N k/2X4(k)
k=0,1,…,
N 4
1
17
且
X1N 4kX3(k)W N k/2X4(k)
k=0,1,…,
N 4
1
由此可见,一个N/2点DFT可分解成两个N/4点DFT。
同理,也可对x2(n)进行同样的分解,求出X2(k)。
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
因此通过一次分解后,运算工作量减少了差 不多一半。
蝶形运算信 号流图符号
因此,只要求出2个N/2点的DFT,即X1(k)和X2(k),再 经过蝶形运算就可求出全部X(k)的值,运算量大大减少。
14
以8点为例第一次按奇偶分解
以N=8为例,
分解为2个4点
的DFT,然后
做8/2=4次蝶形
运算即可求出
W
0 N
所有8点X(k)的
值。
W
1 N
W
2 N
W
3 N
第五章 快速傅里叶变换
本章目录
直接计算DFT的问题及改进的途径 按时间抽取的基2-FFT算法 按频率抽取的基2-FFT算法 快速傅里叶逆变换(IFFT)算法 Matlab实现
2
5.1 引言
DFT在实际应用中很重要: 可以计算信号的频 谱、功率谱和线性卷积等。
直接按DFT变换进行计算,当序列长度N很 大时,计算量非常大,所需时间会很长。
WNk
8
5.3 按时间抽取的基2-FFT算法
算法原理 按时间抽取基-2FFT算法与直接计算
DFT运算量的比较 按时间抽取的FFT算法的特点 按时间抽取FFT算法的其它形式流程图
9
5.3.1 算法原理
设N=2L,将x(n)按 n 的奇偶分为两组:
x(2r)x1(r) x(2r1)x2(r)
因此可得后半部分X(k)
k=0,1, …,N/2-1
X (k N 2) X 1 (k N 2) W N k N 2 X 2 (k N 2)
X1(k)W N kX2(k)
k=0,1, …,N/2-1
13
蝶形运算
X(k)X 1(k)W N kX 2(k) X(k)X 1(k)W N kX 2(k)
蝶形运算式
r0
r0
N1
N1
2
2
x1(r)WN rkWNk x2(r)WN rk
r0
2
r0
2
X1(k)W N kX2(k)
式中,X1(k)和X2(k)分别是x1(n)和x2(n)的N/2的DFT。 另外,式中k的取值范围是:0,1, …,N/2-1 。
11
因此,X(k)X 1(k)W N kX 2(k) 只能计算出X(k)的前一半值。 后一半X(k) 值, N/2 , N/2 +1, …,N ?
r =0,1,…,N 1
2
则
N1
X(k)D FT[x(n)] x(n)W N nk
n0
N1
N1
x(n)WNnk x(n)WNnk
n0 n为偶数
n0 n为奇数
10
N1
N1
x(n)WNnk x(n)WNnk
n0 n为偶数
n0 n为奇数
N1
N1
2
2
x(2r)W N 2rk x(2r1)W N (2r1)k
利用 可得到
W W r(N 2k ) N2
rk N2
N
X1( 2
k)
N 21
x1(r)WNr(2N 2k)
r0
N 21
x1(r)WNrk2
r0
X1(k)
Fra Baidu bibliotek
同理可得
X2(N2 k)X2(k)
12
考虑到
W N (N2k)W N N2W N k W N k
及前半部分X(k)
X(k)X 1(k)W N kX 2(k)
实数乘法次数: 4 N2
实数加法次数: N×2(2N-1)= 2N(2N-1)
6
DFT运算量的结论
N点DFT的复数乘法次数举例
N
N2
N
N2
2
4
64
4049
4
16
128
16384
8
64
256
65 536
16
256
512
262 144
32
1028
1024
1 048 576
结论:当N很大时,其运算量很大,对实时性很强的信号 处理来说,要求计算速度快,因此需要改进DFT的计算 方法,以大大减少运算次数。
16
进一步按奇偶分解
由于N=2L,因而N/2仍是偶数 ,可以进一步把每个N/2点 子序列再按其奇偶部分分解为两个N/4点的子序列。
以N/2点序列x1(r)为例
x1x(12(l2 l)1 )x3x(4l()l)
l0,1, ,N1 4
则有
N 21
N4 1
N4 1
X1(k) x1(r)WNrk2 x1(2l)W N 2l2k x1(2l1)W N (22 l 1)k
n 0
n 0
N 1
{[R ex(n)R eW N nkIm x(n)Im W N nk] n 0
j[ R e x ( n )I m W N n k I m x ( n )R e W N n k ] }
5
一次复数乘法:4次实数乘法 + 2次实数加法 一个X(k) : 4N次实数乘法 +
2N+2(N-1)= 2(2N-1)次实数加法 所以 整个N点DFT运算共需要:
4
5.2.1 DFT的运算量
(2)计算全部N个X(k) 值的运算量
复数乘法次数: N2
复数加法次数: N(N-1)
(3)对应的实数运算量
N 1
N 1
X ( k )x ( n ) W N n k[ R e x ( n ) jI m x ( n ) ] [ R e W N n k jI m W N n k ]