第四章 快速傅里叶变换 ( FFT )
-
Upload
naomi-dunlap -
Category
Documents
-
view
247 -
download
0
description
Transcript of 第四章 快速傅里叶变换 ( FFT )
第四章快速傅里叶变换( FFT)
主要内容 DIT-FFT 算法 DIF-FFT 算法 IFFT 算法 Chirp-FFT 算法 线性卷积的 FFT 算法
§4.1 引言 FFT: Fast Fourier Transform 1965 年, Cooley-Turky 发表文章《机器计算傅
里叶级数的一种算法》,提出 FFT 算法,解决 DFT 运算量太大,在实际使用中受限制的问题。
FFT 的应用。频谱分析、滤波器实现、实时信号处理等。
DSP 芯片实现。 TI 公司的 TMS 320c30 , 10MHz 时钟,基 2-FFT1024 点 FFT 时间 15ms 。
典型应用:信号频谱计算、系统分析等
)()( kXnx DFT
)()()( nynhnx
FFTnh
nyIFFT
FFTnx
)(
)(
)(
系统分析
频谱分析与功率谱计算
§4.2 直接计算 DFT 的问题及改进途径
1
0
)()(N
n
knNWnxkX
1
0
)(1
)(N
k
knNWkX
Nnx
1 、 DFT 与 IDFT
( )N x n点有限长序列
2 、 DFT 与 IDFT 运算特点复数乘法 复数加法
一个 X(k) N N – 1
N 个 X(k)(N 点 DFT)
N 2 N (N – 1)
1
0
( )N
nkN
n
x n W
a jb c jd ac bd j ad cb
同理: IDFT 运算量与 DFT 相同。
实数乘法 实数加法一次复乘 4 2
一次复加 2
一个 X (k) 4N 2N+2 (N – 1)=2 (2N – 1)
N 个 X (k)(N 点DFT)
4N 2 2N (2N – 1)
3 、降低 DFT 运算量的考虑nk
NW 的特性* ( ) ( ) ( )nk nk N n k n N k
N N N NW W W W 对称性
( ) ( ) nk N n k n N kN N NW W W 周期性
nk mnkN mNW W可约性 /
/nk nk m
N N mW W
0 / 2 ( / 2) 1 1N k N kN N N NW W W W 特殊点:
2j nk
nk NNW e
Nk nkN NW W
nN nk
N NW W
2j mnkmNe
2
2 1N
j jNe e
FFT 算法分类 :
时间抽选法DIT: Decimation-In-Time
频率抽选法DIF: Decimation-In-Frequency
FFT
DFT DFT
DFT DFT
算法的基本思想: 利用 系数的特性,合并 运算中的某些项, 把长序列 短序列 ,从而减少其运算量。
§4.3 按时间抽取( DIT )的 FFT 算法
12/...210)12()(
)2()(
2
1
Nrrxrx
rxrx,,,,
( Decimation In Time )
1 、算法原理设序列点数 N = 2L , L 为整数。
若不满足,则补零
将序列 x(n) 按 n 的奇偶分成两组:
N 为 2 的整数幂的 FFT 算法称基 -2FFT 算法。
将 N 点 DFT 定义式分解为两个长度为 N/2 的 DFT
1
0)()()(
N
n
knNWnxnxDFTkX
krN
n
N
r
rkN
n
N
rWrxWrx )12(12/
0
212/
0)12()2(
为奇为偶
)(
12/
02/2
)(
2/
12/
01
21
)()(
kX
N
r
rkN
kN
kX
rkN
N
r
WrxWWrx
)()()( 21 kXWkXkX kN记: ………( 1 )
rkN
rkN WW 2/2 (这一步利用: ) , 0,1,... / 2 1r k N
再利用周期性求 X(k) 的后半部分
/ 22
Nk N k k
N N N NW W W W
又
)(2
)()()(2
22
1
12/
02/1
12/
0
)2/(2/11
kXkN
X
kXWrxWrxkN
XN
r
rkN
N
r
kNrN
rkN
kNrN WW 2/
)2/(2/
)2()
2()
2()
2(
12/,...2,1,0)()()(
2)2/(
1
21
k
NXWk
NXk
NX
NkkXWkXkXkN
N
kN ,
12/,...2,1,0)()( 21 NkkXWkX kN ,
将上式表达的运算用一个专用“蝶形”信流图表示。
)(1 kX
)(2 kX
)()( 21 kXWkX kN
)()( 21 kXWkX kNk
NW
1 2
1 2
( ) ( ) ( )
( ) ( ) ( )2
kN
kN
X k X k W X k
NX k X k W X k
0,1,..., / 2 1k N
注: a. 上支路为加法,下支路为减法;
b. 乘法运算的支路标箭头和系数。
用“蝶形结”表示上面运算的分解: 328 N
)0(x
)1(x
)2(x
)3(x
)4(x
)5(x
)6(x
)7(x
)0(X
)1(X
)2(X
)3(X
)4(X
)5(X
)6(X
)7(X
1NW
0NW
2NW
3NW
)0(1X
)1(1X
)2(1X
)3(1X
)0(2X
)1(2X
(3)2X
)2(2X
DFT
N
点2
DFT
N
点2
分解后的运算量:
复数乘法 复数加法
一个 N/2 点 DFT (N/2)2 N/2 (N/2 –1)
两个 N/2 点 DFT N2/2 N (N/2 –1)
一个蝶形 1 2
N/2 个蝶形 N/2 N
总计 2
2
/ 2 / 2
/ 2
N N
N
2
/ 2 1
/ 2
N N N
N
运算量减少了近一半
进一步分解
MN 2 122
MN2N
4
N由于 , 仍为偶数,因此,两个 点
DFT 又可同样进一步分解为 4 个 点的 DFT 。
1 3
1 4
(2 ) ( )
(2 1) ( )
x l x l
x l x l
0,1,..., / 4 1l N
1 3 / 2 4
1 3 / 2 4
( ) ( ) ( )
( ) ( ) ( )4
kN
kN
X k X k W X k
NX k X k W X k
0,1,..., 14
Nk
02/NW
12/NW
)(3 lx
)(4 lx
)2(x
)4(x
)6(x
)0(x)0(1X
)1(1X
)2(1X
)3(1X
)0(3X
)1(3X
)0(4X
)1(4X
DFT
N点4
DFT
N点4
“ 蝶形”信流图表示
N 点 DFT 分解为四个 N/4 点的 DFT
DFT
N点4
DFT
N点4
DFT
N点4
DFT
N点4
)2(x
)4(x
)6(x
)0(x
)1(x
)3(x
)5(x
)7(x
0NW
2NW
0NW
2NW
1NW
0NW
2NW
3NW
)0(X
)1(X
)2(X
)3(X
)4(X
)5(X
)6(X
)7(X
)(
....kX
)(
.....nx
类似的分解一直继续下去,直到分解为最后的两类蝶形运算为止 (2 点 DFT).
如上述 N=8=23 , N/4=2 点中:
类似进一步分解
1 点 DFTx(0)
1 点 DFTx(4)
X3(0)
X3(1)0
2W
进一步简化为蝶形流图:
0NW
X3(0)
X3(1)
x(0)
x(4)
)4()0()4()0()0( 004/3 xWxxWxX NN
)4()0()4()0()1( 014/3 xWxxWxX NN
因此 8 点 FFT 时间抽取方法的信流图如下——
)2(x
)4(x
)6(x
)0(x
)1(x
)3(x
)5(x
)7(x
0NW
0NW
0NW
0NW
第一级
......
0NW
2NW
0NW
2NW
第二级
..............
)(0 kX 1m )(1 kX )(2 kX )(3 kX2m 3m
1NW
0NW
2NW
3NW
)0(X
)1(X
)2(X
)3(X
)4(X
)5(X
)6(X
)7(X 第三级
......................
FFT 运算量与运算特点 1 . N=2L 时,共有 L=log2N 级运算;每一级有 N/2
个蝶形结。2 .每一级有 N 个数据中间数据),且每级只用到本
级的转入中间数据,适合于迭代运算。3 .计算量: 每级 N/2 次复乘法, N 次复加。(每蝶形只乘一
次,加减各一次)。共有 L*N/2=N/2log2N 次复乘法;复加法 L*N=Nlog2N 次。与直接 DFT 定义式运算量相比 ( 倍数 ) N2/(Nlog2N) 。当 N 大时,此倍数很大。
2
22
( ) 2
( ) loglog2
F
F
m DFT N NNm FFT NN
比较 DFT
参考 P150 表 4-1 图 4-6
可以直观看出,当点数 N越大时, FFT 的优点更突出。
按时间抽取 FFT 蝶形运算特点 1 、关于 FFT 运算的混序与顺序处理(位倒序处理) 由于输入序列按时间序位的奇偶抽取,故输入序列是混序的,为此需要先进行混序处理。
混序规律: x(n) 按 n位置进行码位(二进制)倒置规律输入,而非自然排序,即得到混序排列。所以称为位倒序处理。
位倒序实现:( 1 ) DSP实现采用位倒序寻址( 2 )通用计算机实现可以有两个方法:一是严格按照位倒序含义进行;二是倒进位的加 N/2 。
倒位序 自然序
000 0 0 000
100 4 1 001
010 2 2 010
110 6 3 011
001 1 4 100
101 5 5 101
011 3 6 110
111 7 7 111
2 1 0 2( ) ( )x n n n n n倒位序
例 计算 , 。计算 点 FFT 。用时间抽取输入倒序算法,问倒序前寄存器的数 和倒序后 的数据值?
2)( nnx 31....2,1,0n32N
)13(x )13(x
16913)13( 2 x5232 N210 )01101()13(
102 )22()10110(
48422)13( 2 x
解:倒序前
倒序
倒序为
倒序后
DIT FFT 中最主要的蝶形运算实现( 1 )参与蝶形运算的两类结点(信号)间“距离”(码地址)与其所处的第几级蝶形有关;第m 级的“结距离”为
(即原位计算迭代)
( 2 )每级迭形结构为
,12 m )2(,...2,1 LNLm
rN
mmm
mm
rN
mmmm
WkXkXkX
WkXkXkX
)2()()2(
)2()()(1
111
111
蝶形运算两节点的第一个节点为 k值,表示成 L位二进制数,左移 L – m位,把右边空出的位置补零,结果为 r 的二进制数。
2( ) 2L mr k
( 3 ) 的确定:
第m 级的 r 取值:
rNW
kNW
DIT 算法的其他形式流图 输入倒位序输出自然序 输入自然序输出倒位序 输入输出均自然序 相同几何形状
输入倒位序输出自然序 输入自然序输出倒位序
参考 P154-155
时间抽取、 输入自然顺序、 输出倒位序的 FFT 流图
0NW
0NW
0NW
2NW
£ 1
£ 1
£ 1
0NW
£ 1
0NW 2
NW£ 1
£ 1 £ 1
£ 1
X (0)x (0)
X (4)x (1)
X (2)x (2)
X (6)x (3)
X (1)x (4)
X (5)x (5)
X (3)x (6)
X (7)x (7)
£ 1
£ 1
0NW
0NW 2
NW
1NW
3NW
£ 1
£ 1
例 用 FFT 算法处理一幅 N×N 点的二维图像,如用每秒可
做 10万次复数乘法的计算机,当 N=1024 时,问需要多少时间
(不考虑加法运算时间)?
解 当 N=1024 点时, FFT 算法处理一幅二维图像所需复数
乘法约为 次,仅为直接计算 DFT所需时间的 10
万分之一。 即原需要 3000小时,现在只需要 2 分钟。
722
2
10log2
NN
§4.4 按频率抽取( DIF )的 FFT 算法
与 DIT-FFT 算法类似分解,但是抽取的是 X(k) 。即分解 X(k) 成奇数与偶数序号的两个序列。
设: N = 2L , L 为整数。将 X(k) 按 k 的奇偶分组前,先将输入 x(n) 按 n 的顺序分成前后两半:
( Decimation In Frequency)
一、算法原理
1
2/
12/
0
)()()(N
Nn
nkN
N
n
nkN WnxWnxkX
12/
0
)(2
12/
0
2)()(N
n
knN
NN
n
nkN
N
WnxWnx
12/
02
2/ )()(N
n
nkN
NkNN WnxWnx
kNkNW )1(2/
/ 2 1
0
( ) ( 1)2
Nk nk
Nn
Nx n x n W
0,1,..., 1k N
下面讨论 :的 )(12,2 kXrrk
12/
02/2
12/
0
22
)1()()(
)()()2(N
n
nrN
N
N
n
rnN
N
Wnxnx
WnxnxrX
12/
02/2
12/
0
)12(2
)2()()(
)()()12(N
n
nrN
nN
N
N
n
nrN
N
WWnxnx
WnxnxrX
按 k 的奇偶将 X(k) 分成两部分:
显然: 。点的对应两个 DFTNrXrX 2/)12(),2(
nN
N
N
Wnxnxnx
nxnxnx
)]()([)(
)()()(
22
21
)(
)(
2Nnx
nx
nN
N
N
Wnxnx
nxnx
)]()([
)()(
2
2
nNW
令:
用蝶型结构图表示为:
x1(0)
x1(1)
-1
x1(2)
x1(3)
-1
x2(0)
x2(1)
-1x2(2)
x2(3)-1
N/2 点DFT
N/2 点DFT
x(0)
x(7)
x(1)
x(2)
x(3)
x(4)
x(5)
x(6)
X1(0)=X(0)
X2(0)=X(1)
X1(1)=X(2)
X1(2)=X(4)
X1(3)=X(6)
X2(1)=X(3)
X2(2)=X(5)
X2(3)=X(7)
1NW
0NW
2NW
3NW
3 1 1
4 1 1 / 2
( ) ( ) ( / 4)
( ) [ ( ) ( / 4)] nN
x n x n x n N
x n x n x n N W
0,1,..., 14
Nn
3 1 3
4 1 4
( ) (2 ) [ ( )]
( ) (2 1) [ ( )]
X k X k DFT x n
X k X k DFT x n
0,1,..., 14
Nk
N/2 仍为偶数,进一步分解: N/2 → N/4
x3(0)
x3(1)
-1
-1
x4(0)
x4(1)
N/4 点DFT
N/4 点DFT
x1(0)
x1(1)
x1(2)
x1(3)
X3(0)=X1(0)=X(0)
X4(0)=X1(1)=X(2)
X3(1)=X1(2)=X(4)
X4(1)=X1(3)=X(6)
0/ 2NW
1/ 2NW
按照以上思路继续分解,即一个 N/2 的 DFT 分解成两个 N/
4 点 DFT ,直到只计算 2 点的 DFT ,这就是 DIF-FFT 算法。
2 个 1 点的 DFT 蝶形流图
进一步简化为蝶形流图:
1 点 DFTx3(0)
1 点 DFTx3(1)
X(0)
X(4)
02W
02W
X(0)
X(4)
x3(0)
x3(1)
)2(x
)4(x
)6(x
)0(x
)1(x
)3(x
)5(x
)7(x
)0(X
)1(X
)2(X
)3(X
)4(X
)5(X
)6(X
)7(X
0NW
0NW
1NW
2NW
3NW
0NW
0NW
0NW
2NW
0NW
2NW
0NW
1m第一级:
2m第二级:
3m第三级:
二、按频率抽取 FFT 蝶形运算特点1 )原位计算
1 1
1 1
( ) ( ) ( )
( ) [ ( ) ( )]m m m
rm m m N
X k X k X j
X j X k X j W
rNW
1( )mX k
1( )mX j
( )mX k
( )mX j-1
L 级蝶形运算,每级 N/2 个蝶形,每个蝶形结构:
m 表示第m 级迭代, k , j表示数据所在的行数
2 )蝶形运算
对 N=2L 点 FFT ,输入自然序,输出倒位序,两节点距离: 2L-m=N / 2m
1 1
1 1
( ) ( )2
( )2 2
m m m m
rm m m Nm m
NX k X k X k
N NX k X k X k W
第m 级运算:
蝶形运算两节点的第一个节点为 k值,表示成 L位二进制数,左移m-1位,把右边空出的位置补零,结果为 r 的二进制数。
rNW 的确定
12( ) 2mr k
存储单元输入序列 x(n) : N 个存储单元
rNW系数 : N / 2 个存储单元
三、 DIT 与 DIF 的异同 基本蝶形不同
2log2F
Nm N 2logFa N N
DIT: 先复乘后加减 DIF: 先减后复乘
运算量相同
都可原位运算
DIT 和 DIF 的基本蝶形互为转置
§4.5 IDFT 的 FFT 算法( FFT 应用一)
一、从定义比较分析kn
N
N
k
WkXN
kXIDFTnx
1
0
)(1
)]([)(
1
0
)()]([)(N
n
knNWnxnxDFTkX
与 DFT 的比较:
1 )、旋转因子WN-kn 的不同;
2 )、结果还要乘 1/N 。
)]([
1
0
*1
0
***
*
)(1
)(1
)]([)(
kXDFT
knN
N
k
knN
N
k
WkXN
WkXN
kXIDFTnx
二、实现算法——直接使用 FFT程序的算法
** )]([1
)( kXDFTN
nx
共轭 FFT 共轭 乘 1/ N( )X k *( )X k ( )x n
直接调用 FFT子程序计算 IFFT 的方法:
§4.6 线性调频 Z变换( Chirp-Z变换)算法
( FFT 应用二)
单位圆与非单位圆采样( a ) 沿单位圆采样 ; (b) 沿 AB弧采样
o o
o o A B
X (e j)
Re [z ] Re [z ]
jIm [z ]jIm [z ]
A
B
(a ) (b )
X (e j )
螺线采样
0
jIm[ z ]
Re[ z ]o
0
A 0
1.0
z M £ 1 00
£ 1
z 0
(M £ I )0
zk=AW-k k=0, 1, …, M-1
0
0
0
0
j
j
eWW
eAA
Chirp-Z变换的线性系统表示
x (n )
2/ 2 )( nWnh
2/ 2nnWA
g (n )h (n )
£ £½£ 1 / h (n )
X (zn
)
由于系统的单位脉冲响应 可以想象为频率随时间(n)呈线性增长的复指数序列。在雷达系统中 ,这种信号称为线性调频信号( Chirp Signal ),因此,这里的变换称为线性调频 Z变换。
2
2
)(n
Wnh
一、基本算法思路
1
0
)()()()()(M
m
mnxmhnhnxny
LMM d
)1()( nMhnh 2/LMmd
§4.7 线性卷积的 FFT 算法( FFT 应用三)
若 L 点 x(n) ,M点 h(n) ,则直接计算其线性卷积 y(n)
需运算量:若系统满足线性相位,即:
则需运算量:
FFT 法:以圆周卷积代替线性卷积2 1mN M L 令
( ) 0 1( )
0 1
x n n Lx n
L n N
( ) 0 1( )
0 1
h n n Mh n
M n N
N( ) ( )* ( ) ( ) ( )y n x n h n x n h n 则
NN
2log2
NN
2log2
NN
2log2
)]([)()1 nhFFTkH
)]([)()2 nxFFTkX
)()()()3 kXkHkY
)]([)()4 kYIFFTny
N
总运算量: 次乘法 NNN
mF 2log2
3
比较直接计算和 FFT 法计算的运算量
22 (1 3/ 2*log )d
mF
m MLK
m N N
2
2 24 [1 3/ 2*(1 log )] 10 6logm
M MK
M M M
22 3logm
MK
L
讨论:M L 1 2N M L M 则1 )当
1N M L L 则2 )当
mL K 需采用分段卷积
重叠相加法重叠保留法
ML
x(n) 长度很长时,将 x(n) 分为 L 长的若干小的片段, L 与M可比拟。
n
LiniLnxnxi ,其它
,0
1)1()()(
ii nxnx )()(
)()()( nhnxny
ii nhnx )()(
1 、重叠相加法
ii ny )(
则:
输出:
)()()( nhnxny ii
1 MLN
其中:
可以用圆周卷积计算:
MN 2 选 ,上面圆周卷积可用 FFT 计算。
)()()( nhnxny ii N
由于 yi(n) 长度为 N ,而 xi(n) 长度 L ,必有 M-
1
点重叠, yi(n) 应相加才能构成最后 y(n) 的。
ii nyny )()(
h (n )
0 N £ 1M £ 1
x (n )
0
L
2 L 3 L
n
n
n
n
n
L £ 1
0
x 0 (n )
N £ 1
0
x 1 (n ) L
2 L £ 1
L £«N £ 1
3 L £ 10
x2
(n )
2 L
2 L £«N £ 1
重叠相加法图形
n
n
n
N £ 1
0
y 0 (n )£½x 0 (n ) h (n )N
2 L 2 L £«N £ 1
0
0
L £«N £ 1
L
y 1 (n )£½x 1 (n ) h (n )N
y2
(n )£½x2
(n ) h (n )N
和上面的讨论一样, 用 FFT 法实现重叠相加法的步骤如下 :
① 计算 N点 FFT , H(k)=DFT[ h(n)];
② 计算 N点 FFT , Xi(k)=DFT[ xi(n)];
③ 相乘, Yi(k)=Xi(k)H(k) ;
④ 计算 N点 IFFT , yi(n)=IDFT[ Yi(k)];
⑤ 将各段 yi(n) (包括重叠部分)相加, 。
重叠相加的名称是由于各输出段的重叠部分相加而得名的。
)()(0
nynyi
i
例 已知序列 x[n]=n+2,0n12, h[n]={1,2,1} 试利用重叠相加法计算线性卷积 , 取 L=5 。
y[n]={2, 7, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 41, 14}
解 : 重叠相加法x1[n]={2, 3, 4, 5, 6}
x2[n]={7, 8, 9, 10, 11}
x3[n]={12,13, 14}
y1[n]={2, 7, 12, 16, 20, 17, 6}
y2[n]={ 7, 22, 32, 36, 40, 32, 11}
y3[n]={12, 37, 52, 41, 14}
2 、重叠保存法
此方法与上述方法稍有不同。 先将 x(n) 分段,每段 L=N-M+1 个点,这是相同的。 不同之处是,序列中补零处不补零,而在每一段的前边补上前一段保留下来的(M-1 )个输入序列值, 组成 L+M-1 点序列 xi(n) 。
如果 L+M-1<2m, 则可在每段序列末端补零值点,补到长度为 2m,这时如果用 DFT 实现 h(n) 和 xi
(n)圆周卷积,则其每段圆周卷积结果的前(M-
1 )个点的值不等于线性卷积值,必须舍去。
n
N £ 1
M £ 2
N £ 1
L
M £ 2L
0
x 0 (n )
x 1 (n )
0 n
x 2 (n )
N £ 1 nLM £ 2
0
(a )
重叠保留法示意图
y 0 (n )
0
M £ 2
M £ 1
N £ 1 n
y1
(n )
0M £ 1
M £ 2
N £ 1
y2
(n ) M £ 2
M £ 1
N £ 1
n
n
(b )
重叠保留法示意图
y[k]={2, 7, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 41, 14}
x1[k]={0, 0, 2, 3, 4} x2[k]={3, 4, 5, 6 ,7} x3[k]={6 ,7 , 8, 9, 10}
y1[k]= x1[k]h[k]= {11, 4, 2, 7, 12}
x4[k]={9, 10 , 11, 12,13}
y2[k]= x2[k]h[k]= {23, 17, 16, 20, 24}
y3[k]= x3[k]h[k]= {35, 29, 28, 32, 36}
y4[k]= x4[k]h[k]= {47, 41, 40, 44, 48}
x5[k]={12,13, 14, 0, 0}
y5[k]= x5[k]h[k]= {12, 37, 52, 41, 14}
解 : 重叠保留法
例 已知序列 x[n]=n+2,0n12, h[n]={1,2,1} 试利用重叠保留法计算线性卷积 , 取 L=5 。
£ 200
0
200
0 2000 4000 6000 8000t
(a )
10
00
5
1000 2000 3000 4000
10008006004002000
0
1
2
£ 200
0
200
0 2000 4000 6000 8000t
(b )
(c )
(d )
f
f
¡Á10 5
¡Á10 5
语音信号消噪过程(a) 信号淹没在啸叫噪声中; (b) 信号与噪声的功率谱;
(c) 去噪后的功率谱; (d) 重构原语音信号
FFT 应用举例