Transcript
Page 1: 第十章   快速离散傅立叶变换

第十章 快速离散傅立叶变换

本章的教学内容

• 改进 DFT 计算的方法

• 按时间抽取的 FFT 算法( DIT FFT)

• 按频率抽取的 FFT 算法( DIF FFT)

Page 2: 第十章   快速离散傅立叶变换

第十章 快速离散傅立叶变换 ( 1 ) FFT:Fast Fourier Transform( 2 )傅立叶级数和傅立叶变换理论在 19 世纪就已经提出 , 时域离散傅立叶变换理论也在 20 世纪初发展完善 . 但由于其手工计算的复杂性 , 在工程实践中并没有得到广泛应用 . 相反 , 在应用中使用广泛的是其它一些手工计算相对简单的数学分析手段 , 如沃尔什变换 . 直到 1965 年 , 库利 - 图基提出了针对 N 时复合数情况的快速离散傅立叶变换算法 , 与传统算法相比降低了 1 ~2个数量级 , 由此引发了研究快速算法的热潮 . 这些算法统称为FFT. FFT 算法的广泛应用,不仅奠定了离散傅立叶变换在数字信号处理中的经典地位 , 也极大推动了数字信号处理应用与发展 .

Page 3: 第十章   快速离散傅立叶变换

第一节 改进 DFT 计算的方法

衡量算法的复杂性 : 乘 . 加法运算次数 , 不考虑控制调度等操作 ; 只考虑 DFT 的正变换 , 因为 :

1

0

( ) ( )N

knN

n

X k x n W

K=0,1, …,N-1 DFT 正变换

1 1

0 0

1 1( ) ( ) ( )

N Nkn kn

N Nk k

x n X k W X k WN N

DFT 反变换

反变换相对正变换 : 输入取共扼 ; 输出取共轭并加权 .

Page 4: 第十章   快速离散傅立叶变换

直接计算 DFT 的运算量( )x n n=0,1, …,N-1

1

0

( ) ( )N

knN

n

X k x n W

k=0,…,N-1

复数运算 对每一个 k 值 : 复乘 : N 复加 : N-1

第一节 改进 DFT 计算的方法

Page 5: 第十章   快速离散傅立叶变换

对所有 k: 复乘 : 复加 : N(N-1)即复数运算量与 近似成正比( 不考虑 情况 )

2N

2N

0 1NW

1.实数运算

1

0

( ) Re ( ) Im ( ) Re ImN

kn knN N

n

X k x n j x n W j W

1 1

0 0

Re ( ) Re Im ( ) ImN N

kn knN N

n n

x n W x n W

1 1

0 0

Re ( ) Im Im ( ) ReN N

kn knN N

n n

j x n W x n W

k=0,…,N-1

第一节 改进 DFT 计算的方法

Page 6: 第十章   快速离散傅立叶变换

对每一个固定 k :

实乘 : 4N

实加 : 2( 1) 1 2 4 2N N

对所有 k :

实乘 : 4N2 实加 : 2N(2N-1)= 4N2 -2N

实数运算量与 2N 近似成正比

结论 : 直接计算 DFT 的乘 . 加运算量近似与 成正比 .

第一节 改进 DFT 计算的方法

2N

Page 7: 第十章   快速离散傅立叶变换

改善运算效率的途径( 1 )利用 的对称性和周期性等特性合并运算项

复共轭对称性 :

对 n 和 k 的周期性 :

可约性

特殊值

knNW

( )k N n kn knN N NW W W

( ) ( )kn k n N k N nN N NW W W

第一节 改进 DFT 计算的方法

1 1/

rN N r MW W W

/ 2

0 / 2 / 4

1 1

k N kN N

N NN N N

W W

W W W j

N rM

Page 8: 第十章   快速离散傅立叶变换

式中其它各对称项也可以找到类似归并办法 . 这样乘法次数大约可减少一半 .

(2) 大点数 DFT 逐次分解成小点数 DFT) 分解

正是 FFT 算法的基本原理

Re ( ) Re ( ) Re knNx n x N n W

Im Im ( ) Im ( )knNW x n x N n

1

2 2 21 2 2N N N N N N

第一节 改进 DFT 计算的方法

例 : 利用对称性 , 可以合并对称项 :

( )Re ( ) Re Re ( ) Re Rekn k N n knN N Nx n W x N n W W

( )Im ( ) Im Im ( ) Imkn k N nN Nx n W x N n W

Page 9: 第十章   快速离散傅立叶变换

FFT 的基本原理: 为了提高 DFT 的运算效率 , 把大点数 DFT 按倒位序逐次分解为更小点数 DFT 的合成 . 在分解过程中 , 要利用系数 的对称性和周期性 . 如果算法是逐次分解时间序列得到的 , 那么这种分解算法称为按时间抽取算法 . 阐述按时间抽取原理最方便的方法是研究 这种特殊情况 . 由于 N 为 2 的整数幂 , 可以不断将 x(n) 一分为二 . 这就是最常用的基 -2FFT 算法 . 如果序列不满足这个条件 , 可以人为地加上若干零点得到 .

knNW

2mN

第一节 改进 DFT 计算的方法

Page 10: 第十章   快速离散傅立叶变换

第二节 按时间抽取 FFT 算法

算法原理:假设序列 x(n) 长为 (n=0,…,N-1), 由于 N 为

偶数 , 可以将 x(n) 按 n 为奇数和偶数分解为两个 N/2 的长序列 , 并依此逐级分解来计算 x(k).

2mN

Page 11: 第十章   快速离散傅立叶变换

1

2

0,1, 1(2 ) ( ) 2

(2 1) ( )0,1, 1

2

Nrx r x r

x r x r Nr

是 x(n) 按 n 为奇、偶数分为 2 个子序列,得 :

第二节 按时间抽取 FFT 算法

第一级分解定义偶序列与奇序列 :

Page 12: 第十章   快速离散傅立叶变换

( ) ( ) ( )kn knN N

n n

X k x n W x n W 为偶数 为奇数

1 12 2

2 (2 1)

0 0

(2 ) (2 1)

N N

kn k rN N

r r

x r W x r W

1 1

2 22 2

1 20 0

( ) ( )

N N

kr krk

NN Nr r

x r W x rW W

2

22

22 1/ 2

Njj

NN N

W e e W

上式可写为 :

第二节 按时间抽取 FFT 算法

Page 13: 第十章   快速离散傅立叶变换

2 2

1 12 2

1 20 0

( ) ( ) ( )N N

N Nkr kr

kN

r r

X k x r W x rW W

1 2( ) ( )kNX k W X k

其中 :

2 2

1 12 2

1 10 0

( ) ( ) (2 )N N

N Nkr kr

r r

X k x r x rW W

k=0,…N/2-1

第二节 按时间抽取 FFT 算法

Page 14: 第十章   快速离散傅立叶变换

上式表明一个 N 点的 DFT 可以分解成两个 点的

DFT. 这两个 点的 DFT 又可按式合成一个 N 点

DFT

一个问题 :

和 的长度为 , 它们的 DFT 和

的点数也为 , 而 x(k) 却有 N 个点。 利用 的周

期性解决这一问题,即:

/ 2N

1( )x r2 ( )x r 1( )X k 2 ( )X k

kNW

/ 2 / 2k N N k kN N N NW W W W

第二节 按时间抽取 FFT 算法

/ 2N

/ 2N

/ 2N

Page 15: 第十章   快速离散傅立叶变换

/ 2 / 2

/ 2 1 / 2 1/ 2

1 1 1 10 0

( / 2) ( ) ( ) ( )N N

N Nk N r kr

r r

X k N x r W x r W X k

2 2( ) ( )2

NX k X k

表达为前后两个部分 :( )X k

前半部分 0 1 2( ) ( ) ( )kNX k X k W X k

后半部分 1 2( / 2) ( ) ( )kNX k N X k W X k

k=0,…

k=0,…

/ 2 1N

1( )X k 和 2 ( )X k 的周期为 / 2N

同样可得

即:

/ 2 1N

第二节 按时间抽取 FFT 算法

Page 16: 第十章   快速离散傅立叶变换

这样只要求出 0 ~ -1 区间所有 和 , 就可以求出 0~N-1 区间内全部 X(k) 的值 . 这就是 FFT

运算的关键所在。用以下信号流图表示为:

1( )X k 2 ( )X k/ 2N

根据流图的形状,上述运算称为碟形运算。

第二节 按时间抽取 FFT 算法

Page 17: 第十章   快速离散傅立叶变换

复乘 : 1 复加 : 2一次蝶形运算 :

运算分析 :

当 32 8N 一次分解后 DFT 运算的信号流图为:

第二节 按时间抽取 FFT 算法

Page 18: 第十章   快速离散傅立叶变换

仍为偶数 , 可以

2N N N N2 ( 1) 2

2 2 2 2

直接计算 N 点 DFT 所需复乘 , 复加 N(N-1), 可见当2N

N 较大时 , 一次分解后运算量减少近一半 .

由于 N= 2M(M>1), 经一次分解后 N

2N

2 点 DFT再分别分解为两个

点 DFT 的组合 .

进一步把每个 N

2

复乘 : 2

N N N(N 1)2 1

2 2 2

一次分解 : 2 个 N2

点 DFT+ 个蝶形运算N

2

复加 :

第二节 按时间抽取 FFT 算法

Page 19: 第十章   快速离散傅立叶变换

第二级分解

1( )x r

1 3

1 4

(2 ) ( )

0, 14

(2 1) ( )

x l x l

Nl

x l x l

可得 :

2 2

1 12 (2 1)4 4

1 1 10 0

( ) (2 ) (2 1)N N

N Nkr k l

l l

X k x l x lW W

第二节 按时间抽取 FFT 算法

Page 20: 第十章   快速离散傅立叶变换

与第一级分解一样 ,利用 和 隐含的周期性 , 为 改写为前,后两部分 :

2

3 4( ) ( )N

k

X k X kW 0, 12

Nk

其中 :

4

14

3 30

( ) ( ) N

Nkl

l

X k x l W

0, 14

Nk

4

14

4 40

( ) ( ) N

Nkl

l

X k x l W

0, 14

Nk

3(k)X4 (k)X

1( )X k

第二节 按时间抽取 FFT 算法

Page 21: 第十章   快速离散傅立叶变换

2

1 3 4( ) ( ) ( )N

k

X k X k W kW 0, 14

Nk

N

2

k

1 3 4( ) (k) ( )4

NX k X X kW 0, 1

4

Nk

由此一个 N

4点 DFT 分解成两个

N

2 点的 DFT.

其流图为 :

第二节 按时间抽取 FFT 算法

Page 22: 第十章   快速离散傅立叶变换

2 ( )X k 也可以进行同样分解 :2 5

2 6

(2 ) ( )

0, 14

(2 1) ( )

x l x l

Nl

x l x l

第二节 按时间抽取 FFT 算法

奇序列中的偶序列 , 奇序列中的奇序列

Page 23: 第十章   快速离散傅立叶变换

2 2

1 12 (2 1)4 4

2 2 20 0

( ) (2 ) (2 1)N N

N Nkr k l

l l

X k x l x lW W

4 2 4

1 14 4

5 60 0

( ) ( )N N N

N Nkr k kl

l l

x l x lW W W

2

5 6( ) ( )N

k

X k X kW 0, 1

2

Nk

第二节 按时间抽取 FFT 算法

Page 24: 第十章   快速离散傅立叶变换

4

14

5 50

( ) ( ) N

N

kl

l

X k x l W

0, 14

Nk

4

14

6 60

( ) ( ) N

N

kl

l

X k x l W

0, 14

Nk

为 2 ( )X k改写为前 , 后两部分 :

N

22 5 6( ) (k) (k)kX k X W X 0, 1

4

Nk

22 5 6( ) ( ) ( )

4N

kNX k X k W X k 0, 1

4

Nk

第二节 按时间抽取 FFT 算法

其中 :

Page 25: 第十章   快速离散傅立叶变换

系数统一为 ( 今后都使用统一的系数 ),这样 ,N

2

2k kNW W

一个 N点 DFT就分解成 4个 N/4点的 DFT,其信号流图为 :

第二节 按时间抽取 FFT 算法

Page 26: 第十章   快速离散傅立叶变换

根据前面的分析 ,第二级分解组合比第一级分解后的运算量又降低了一半 .

对于 N=8 点的 DFT, 经过两次分解后 , 最后剩下四

个 N/4=2 的 DFT, 即 3 4 5 6( ) ( ), ( ) ( )X k X k X k X k和

(k =0,1).尽管 2 点长的 DFT 只有加减法 , 仍然可用蝶式运算单元来统一表示 .

第二节 按时间抽取 FFT 算法

Page 27: 第十章   快速离散傅立叶变换

例如 组成的 2 点 DFT

可用公式计算 :

类似 , 其它 3 个 2 点长 DFT都可以用一个蝶式运算单元求得 ,综合这三级分解过程 , 可得到一个完整的8 点 DFT 信号流图 .

4 ( )X k

4

1 04 4 4(0) (0) (1) (2) (6) (2) (6)N NX x W x x x x W x

4

1 04 4 4(1) (0) (1) (2) (6) (2) (6)N NX x W x x x x W x

(2), (6)x x

第二节 按时间抽取 FFT 算法

Page 28: 第十章   快速离散傅立叶变换

第二节 按时间抽取 FFT 算法

这种方法每次分解都是按输入序列在时域上的次序是偶数还是奇数来抽取的,故称之为按时间抽取法 .

Page 29: 第十章   快速离散傅立叶变换

运算量分析由 DIT FFT 信号流图可见 , 对于任何一个 点 DFT 运算 ,都可以通过 M 次分解 , 最后分解成 2 点 DFT 运算的组合 . 这样的 M 级分解 ,就构成了 M 级运算过程 .每级 N/2 个蝶形运算 .

每一级 :

复乘 : 复加 :

2MN

12 2

N N 2

2

NN

第二节 按时间抽取 FFT 算法

Page 30: 第十章   快速离散傅立叶变换

结论 : DIF FFT 运算量与 近似成正比 .

全部 M 级 :复乘 复加

2

N Nlog

2 2pm M N 2logpa N M N N

第二节 按时间抽取 FFT 算法

2logN N

Page 31: 第十章   快速离散傅立叶变换

第二节 按时间抽取 FFT 算法

三 . 按时间抽取的 FFT 算法特点 .

1. 蝶式运算 系统由大量蝶式运算单元组成 ,每个蝶式运算的迭代任务是 :

Page 32: 第十章   快速离散傅立叶变换

1 1( ) ( ) ( )rm m N mX p X p W X q

1 1( ) ( ) ( ))rm m N mX q X p W X q

1 m M

为节点, m :表示第 m 列叠代。 p,q :为数据所在行数,对应信号流图下图所示:

0 1p q N

( ) ( )m mX p X q

第二节 按时间抽取 FFT 算法

0 0( ), ( )X p X q 是输入数据注:

Page 33: 第十章   快速离散傅立叶变换

第二节 按时间抽取 FFT 算法

( 1 )蝶式运算的节点距离 (p,q 间的距离 )以 N=8 为例

m 1 2 3q-p 1 2 4

推广 : 基 -2 DIF FFT 中 , 第 m 级蝶式运算节点间距离为12m

蝶式运算可写成 :

11 1( ) ( ) ( 2 )r m

m m N mX p X p W X p

1 11 1( 2 ) ( ) ( 2 )m r m

m m N mX p X p W X p

Page 34: 第十章   快速离散傅立叶变换

( 2 ) 的确定每一级的旋转因子都不相同,但排列很有规

律,下表所示。

第二节 按时间抽取 FFT 算法r

NW

Page 35: 第十章   快速离散傅立叶变换

2. 原址运算

第二节 按时间抽取 FFT 算法

多级蝶式运算结构会产生大量中间结果 . 如果运算式要保存这些中间结果 ,则需要耗费大量资源 (存贮器 )观察 FFT 信号流图 , 可以发现任何两个节点(p 与 q) 经过蝶式运算后 , 其结果即为下一列 p,q 两节点的变量 .而每一级蝶式运算的输出 , 在该级运算结束之后无需保存 . 因此 ,任何一个蝶行运算的两个输出结果仍然可以存放两个输入值所在的存储单元中 . 这样 , 整个运算只需要 N 个寄存器 ,他们保存输入数据 , 并不断对每一级运算结果刷新 , 直到最后输出。其优点在于节省存储资源 .

Page 36: 第十章   快速离散傅立叶变换

第二节 按时间抽取 FFT 算法

3. 倒位序 观察同址运算结构 , 可以发现 FFT 输出端 X

(k) 正好按 0~7自然顺序排列的,而输出序列 x

(n) 不是按 0~7自然顺序排列。 x(n)排列表面上混乱无序,而隐含着有规律的排列,即”倒位序”存贮 , 以 N=8 点 FFT结构来说明。

Page 37: 第十章   快速离散傅立叶变换

存储器号 数据

2 2

2 2

2 2

2 2

2 2

2 2

2 2

2 2

0 (000) (000) (0)

1 (001) (100) (4)

2 (010) (010) (2)

3 (011) (110) (6)

4 (100) (001) (1)

5 (101) (101) (5)

6 (110) (011) (3)

7 (111) (111) (7)

x x

x x

x x

x x

x x

x x

x x

x x

结论 : 2 1 0 2 0 1 2 2( ) ( )n n n x n n n

第二节 按时间抽取 FFT 算法

Page 38: 第十章   快速离散傅立叶变换

倒位序排列是由于不断将 DFT 运算分解为较小点数 DFT 计算造成的。序列 x(n)首先分成偶数标号和奇数标号两个子序列:偶数序列出现在流图上半部 , 奇数序列出现在流图下半部。从形式上说 ,这样的划分可通过分析标号 n 的二进制表示 的最低位 来实现。标号为偶数,则 =0 ,标号为奇数,则 =1 。这样 =0 的标号出现在流图上半部

2 1 0 2 0 1 2 2x( ) ( ) ( )n x n n n n n n ��������������存储

2 1 0 2( )n n n

0n

从中我们可以发现 : 若 2 1 0 2( )n n n n , 则 :

0n 0n

0n

第二节 按时间抽取 FFT 算法

Page 39: 第十章   快速离散傅立叶变换

=1 的标号出现在下半部。下一次奇偶序列的分解又分别根据标号二进制表示的倒数第二位 开始 ,根据 分别将第一次分解生成的两个子序列再一次按奇偶性分开。持续该过程 , 直得到 N 个长度为 1的子序列。最后的排列顺序呈”倒位序”

0n

1n

1n

第二节 按时间抽取 FFT 算法

Page 40: 第十章   快速离散傅立叶变换

所以要实现 FFT 算法,首先必须把按自然顺序存放的数据变换成按倒序存放。这一过程称为整序, N=8 时的整序过程下图所示。

第二节 按时间抽取 FFT 算法

Page 41: 第十章   快速离散傅立叶变换

小结 :1. 算法原理2. 计算量 :

复乘 : 复加 :

3. 运算特点 : 蝶式运算 . 同址运算 . 倒位序

2log2

NN

2logN N

第二节 按时间抽取 FFT 算法

Page 42: 第十章   快速离散傅立叶变换

第三节 按频率抽取 FFT 算法

DIT: 将输入序列 x(n) 按其标号 n 为奇数或偶数分解成短序列

DIF: 将输出序列 X(k) 按其 k 值为奇数或偶数分解成短序列

算法原理仍讨论基 -2FFT, 即 频域抽取法是将

X(k) 按标号 k 的自然顺序分成前后两半 (注意 : 不再是奇偶顺序 )

2MN

Page 43: 第十章   快速离散傅立叶变换

1 / 2 1 1

0 0 / 2

( ) ( ) ( ) ( )N N N

kn kn knN N N

n n n N

X k x n W x n W x n W

/ 2 1 / 2 1

( / 2)

0 0

( ) ( / 2)N N

kn k n NN N

n n

x n W x n N W

/ 2 1

/ 2

0

/ 2 1

0

( ) ( / 2)

( ) ( 1) ( / 2)

NkN kn

N Nn

Nk kn

Nn

x n W x n N W

x n x n N W

第三节 按频率抽取 FFT 算法

Page 44: 第十章   快速离散傅立叶变换

/ 2 1

2

0

( ) (2 ) ( ) ( / 2)N

rnN

n

X k X r x n x n N W

/ 2 1

/ 20

( ) ( / 2)N

rnN

n

x n x n N W

/ 2 1

(2 1)

0

( ) (2 1) ( ) ( / 2)N

r nN

n

X k X r x n x n N W

按 k 为偶数或是奇数将 x(k) 分解成两部分

2 , 0,1,..., / 2 1k r r N

2 1, 0,1,..., / 2 1k r r N

/ 2 1

/ 20

( ) ( / 2)N

n rnN N

n

x n x n N W W

第三节 按频率抽取 FFT 算法

Page 45: 第十章   快速离散傅立叶变换

输入序列前一半与后一半之差再与 乘积nNW

1( ) ( ) ( )2

Nx n x n x n

2 ( ) ( ) ( )2

nN

Nx n x n x n W

输入序列前一半与后一半之和

0, 12

Nn

0, 12

Nn

第三节 按频率抽取 FFT 算法

Page 46: 第十章   快速离散傅立叶变换

12

10 2

12

20 2

(2 ) ( )

0, 1 2

(2 1) ( )

N

rnN

n

N

nrN

n

X r x n W

Nr

x r x n W

1( )x n 2 ( )x n与 可通过一蝶式运算 ( 结构 )单元得到 :

第三节 按频率抽取 FFT 算法

Page 47: 第十章   快速离散傅立叶变换

这样一个 N 点 DFT 就分解为两个 N/2 点 DFT 。以 N=8 为例,上述分解过程如图所示 :

第三节 按频率抽取 FFT 算法

Page 48: 第十章   快速离散傅立叶变换

一次分解的运算过程分为两步 :( 1 )前后两半序列合成 与 ( 2 )分别求 与 N/2 点 DFT ,结果为 x(k) 偶奇部分

特点:输入进行分解合成,输出不用合成,但顺序有变。

和 DIT-FFT 一样, N 一次分解后, N/2 仍是偶数,因此可进一步按上述方式分解,直至最后 N/2 个 2 点 DFT 的全部 N 个输出就是 x(n) 的 N 点 DFT 。

1( )x n 2 ( )x n

第三节 按频率抽取 FFT 算法

1( )x n 2 ( )x n

Page 49: 第十章   快速离散傅立叶变换

下图是 N=8 时完整的按频率抽取的 FFT结构

第三节 按频率抽取 FFT 算法

Page 50: 第十章   快速离散傅立叶变换

运算特点 和 DIT-FFT 基本相同,都是通过蝶形运算完成,也是原位运算,但其输入是正常位序,输出为倒位序。按流图转置定理,即将流图的所有支路方向取反,交换输入输出,系数保持不变,可得到流图的转置形式。比较 DIT-FFT 流图可知它们互为转置。根据转置定理,两个流图的输入输出特性相同。因此频率抽取法和时间抽取法是两种等价的 FFT 运算。

从上图可以看出 , 按频率抽取算法共有 M 级,每一级都有 N/2 个蝶形运算。因此 N 点 FFT 有 NM/2 个蝶形运算,每个蝶形运算需要一次复数乘法和二次复数加数,因此运算量与时域抽取相等。

复乘: 复加:2log

2

NN

2logN N

第三节 按频率抽取 FFT 算法

Page 51: 第十章   快速离散傅立叶变换

DIF FFT 与 DIF FFT 的比较

区别 : ①倒位序方式不同

②蝶形运算的结构不同相似 :

①运算结构类似运算量相同②同位运算 ③互为转置 等价

第三节 按频率抽取 FFT 算法


Recommended