第 4 章 快速傅里叶变换

87
第 4 第 第第第第第第第 1 /86 第 4 第 第第第第第第第

description

第 4 章 快速傅里叶变换. 4.1 DFT 的运算量分析. 4.1.1 直接计算 DFT 的运算量. 运算量. 从上面的分析看到,在 DFT 计算中,不论是乘法和加法,运算量均与 N 2 成正比。因此, N 较大时,运算量十分可观。例,计算 N=10 点的 DFT ,需要 100 次复数相乘,而 N=1024 点时,需要 1048576 (一百多万)次复数乘法,如果要求实时处理,则要求有很高的计算速度才能完成上述计算量。 反变换 IDFT 与 DFT 的运算结构相同,只是多乘一个常数 1/N ,所以二者的计算量相同。. 4.1.2 改善 DFT 运算效率的基本途径. - PowerPoint PPT Presentation

Transcript of 第 4 章 快速傅里叶变换

Page 1: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 1/86

第 4 章 快速傅里叶变换

Page 2: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 2/86

4.1 DFT 的运算量分析

1

0

:

( ) [ ( )] ( ) ( )N

nkN N

n

DFT

X k DFT x n x n W R k

1

0

:

1 ( ) [ ( )] ( ) ( )

Nnk

N Nk

IDFT

x n IDFT X k X k W R nN

( )N x n点有限长序列

4.1.1 直接计算 DFT 的运算量

Page 3: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 3/86

实数乘法 实数加法一次复乘 4 2

一次复加 2

一个 X (k) 4N 2N+2 (N – 1)=2 (2N – 1)

N 个 X (k)

(N点 DFT)

4N 2 2N (2N – 1)

运算量运算量 复数乘法 复数加法一个 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

Page 4: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 4/86

从上面的分析看到,在 DFT计算中,不论是乘法和加法,运算量均与 N2 成正比。因此, N 较大时,运算量十分可观。例,计算 N=10点的 DFT,需要 100次复数相乘,而 N=1024点时,需要1048576(一百多万)次复数乘法,如果要求实时处理,则要求有很高的计算速度才能完成上述计算量。

反变换 IDFT与 DFT的运算结构相同,只是多乘一个常数 1/N,所以二者的计算量相同。

Page 5: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 5/86

4.1.2 改善 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 周期性

0 / 2 ( / 2) 1 1N k N kN N N NW W W W 特殊点:

2j nknk N

NW e

Nk nkN NW W nN nk

N NW W

2j mnkmNe

2

2 1N

j jNe e

nk mnkN mNW W可约性 /

/nk nk m

N N mW W

Page 6: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 6/86

时域抽取与频域抽取:

),简称(算法按频域抽取

),简称(算法按时域抽取

FFT-DIFFreqency-In-Decimation

FFT-DIFTime -In - Decimation

FFT

FFT

FFT

DFT DFT

DFT DFT

算法的基本思想: 利用 系数的特性,合并 运算中的某些项, 把长序列 短序列 ,从而减少其运算量。

Page 7: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 7/86

4.2.1. 算法的的基本原理 按 n 的奇偶把时间序列 x(n) 分解为两个长为 N/2点的序列,即

因此

)2()(1 rxrx

)12()(2 rxrx

12

,...,1,0 N

r

12

,...,1,0 N

r

knN

N

n

WnxkX )()(1

0

/ 2 1 / 2 12 (2 1)

0 0

/ 2 1 / 2 12 2

1 20 0

(2 ) (2 1)

( ) ( )

N Nkr k r

N Nr r

N Nkr kr k

N N Nr r

x r W x r W

x r W x r W W

4.2 时间抽取的基 -2FFT 算法

Page 8: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 8/86

由于

所以

即其中 分别为 的 N/2点 DFT

这是 前 N/2点 DFT

X k x r W W x r W

X k W X k k N

r

N

Nkr

Nk

r

N

Nkr

Nk

( ) ( ) ( )

( ) ( ) , ,..., /

/

/

/

/

0

2 1

1 20

2 1

2 2

1 2 0 1 2 1X k X k1 2( ) ( )和 x n x n1 2( ) ( )和

2 222 / 2

/ 2

j kr j krkr krN NN NW e e W

knN

N

n

WnxkX 2/1

12/

01 )()(

12

,...,1,0 N

k

knN

N

nWnxkX 2/2

12/

02 )()(

1

2,...,1,0

Nk

)12

,...1,0)(( N

kkX

Page 9: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 9/86

对于 后 N/2的 DFT :由于 (周期性)因此

可用蝶式运算图来表示上述前 N/2和后 N/2两式 ,如下图所示

)(kXk

NNk

N WW 2/

X kN

X k W X kNk( ) ( ) ( )

2 1 2 12

,...,1,0 N

k

Page 10: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 10/86

例如 :N=8 时的 DFT, 可以分解为两个 N/2=4 点 DFT

如图 4.2.2 所示 :

图 4.2.2 8点 DFT 分解成两个 4 点的 DFT

Page 11: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 11/86

分解后的运算量:

复数乘法 复数加法一个 N / 2 点DFT

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

两个 N / 2 点DFT

N 2 / 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

运算量减少了近一半

Page 12: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 12/86

由于 , 因而N/2仍是偶数,可以进一步把每个N/2点的序列再按其奇偶部分分解为两个N/4的子序列

从而 可表示为

MN 2

3 1 4 12 2 1( ) ( ) ( ) ( )x l x l x l x l )14

(,.......,1,0 N

l

)(1 kX

)12(2/1

14/

0

22/1

14/

01 )12()2()(

lkN

N

l

klN

N

l

WlxWlxkX

klN

N

l

kN

klN

N

l

WlxWWlx 4/4

14/

02/4/3

14/

0

)()(

)()( 42/3 kXWkX kN 1

4,........1,0

Nk

Page 13: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 13/86

因而有

其中

对 也可进行同样的分解:

k=0,1,...,N/4-1

1 3 / 2 4( ) ( ) ( )4

kN

NX k X k W X k

X k DFT x l x l W

X k DFT x l x l W

l

N

Nkl

l

N

Nkl

3 30

4 1

3 4

4 40

4 1

4 4

( ) ( ) ( )

( ) ( ) ( )

/

/

/

/

X k2 ( )

)()()( 62/52 kXWkXkX kN

)()()4

( 62/52 kXWkXN

kX kN

Page 14: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 14/86

其中

这样又一次的分解得到 4 个 N/4 点 DFT

klN

N

l

WlxlxDFTkX 4/5

14/

055 )()()(

klN

N

l

WlxlxDFTkX 4/6

14/

066 )()()(

)2()( 25 lxlx

)14

(,...,1,0)12()( 26 N

llxlx

2/ 2

k kN NW W统一系数:

Page 15: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 15/86

如下图所示:

那么依次类推,经过 M-1 次分解后,将 N 点 DFT分解成 N/2 个两点 DFT

Page 16: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 16/86

下图为 N=8 时的一个完整基 -2DIT-FFT 运算流图

Page 17: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 17/86

当 时,总共有 M 级分解,每级有 N/2 个蝶式运算。每个蝶式运算需一次复乘两次复加,这样 M 级总共需要的运算量为

复乘次数

复加次数

2MN

NM

NN

2 2 2 log

N M N N log2

4.2.2 运算量

Page 18: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 18/86

FFT 算法与直接计算 DFT 所需乘法次数的比较曲线

Page 19: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 19/86

4.2.3.FFT 算法的特点

1 )原位计算(同址运算)

Page 20: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 20/86

m 表示第 m 级迭代, i , j 表示数据所在的行数

1 1

1 1

( ) ( ) ( )

( ) ( ) ( )

rm m m N

rm m m N

A i A i A j W

A j A i A j W

Page 21: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 21/86

每一级的蝶形运算的输入和输出在运算前后可以存储在同一地址的存储单元中,这种存储策略称为同址计算。显然,同址计算可以节省存储单元,从而降低算法对计算机存储容量的要求,降低了硬件实现的成本。

Page 22: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 22/86

2 )输入序列的序号及整序规律

DIT―FFT 算法的输入序列的排序看起来似乎很乱,但仔细分析就会发现这种倒序是很有规律的。由于N=2M ,所以顺序数可用 M 位二进制数(nM-1nM-2…n1n0) 表示。

0

1

01

0

1

0

1

0

1

0

1

0

1

(n2

n1

n0

)2

000 0

4

26

1

5

3

7

100

010110

001

101

011

111

Page 23: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 23/86

在实际计算中,输入的混序是通过输入正序序列按码位倒置实现的。存储单元、正序和反序之间的关系如下表

存储单元 自然序列 二进制表示自然序列序号 序号码位倒置 码位倒置后的序列

(0)A

(1)A

(2)A

(3)A

(4)A

(5)A

(6)A

(7)A

)0(x

)1(x

)2(x

)3(x

)4(x

)5(x

)6(x

)7(x

)000(x

)010(x

)100(x

)110(x

)100(x

)101(x

)110(x

)111(x )111(x

)110(x

)101(x

)010(x

)110(x

)100(x

)100(x

)000(x )0(x

)4(x

)2(x

)6(x

)1(x

)5(x

)3(x

)7(x

Page 24: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 24/86

从上表可以看出,表的第一列即是 FFT输出序列的顺序,第四列即是 FFT输入序列,因此输出序列的顺序与输入序列的顺序成反序关系,这里称为倒位序。下图示出了 N=8时按自然顺序存储的数据,调换成FFT原位运算所要求的倒位序存储的变址情况。

Page 25: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 25/86

x (0) x (1) x (2) x (3) x (4) x (5) x (6) x (7)

A (0) A (1) A (2) A (3) A (4) A (5) A (6) A (7)

A (0) A (1) A (2) A (3) A (4) A (5) A (6) A (7)

x (0) x (4) x (2) x (6) x (1) x (5) x (3) x (7)

输入数据的变址处理

Page 26: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 26/86

3 )各类蝶形运算两节点的“距离”及 的变化规律

rNW

对 N = 2M 点 FFT ,输入倒位序,输出自然序,第 m 级运算每个蝶形的两节点距离为 2m–1 第 m 级运算:

11 1

1 11 1

( ) ( ) ( 2 )

( 2 ) ( ) ( 2 )

m rm m m N

m m rm m m N

A i A i X i W

A i A i X i W

Page 27: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 27/86

蝶形运算两节点的第一个节点为 i 值,表示成 M位二进制数,左移 M – m 位,把右边空出的位置补零,结果为 r 的二进制数。

rNW 的确定

2( ) 2M mr i

( 1 )直接计算法

Page 28: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 28/86

Page 29: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 29/86

级数 的取值范围 重复组数

第一级 第二级 第三级

第m 级

第M 级 1

kNW

0NW 2/N0

NW 4/NNW 4/N

0NW

0NW

0NW

8/NNW 8/2N

NW 8/3NNW

mNNW 2/

mNNW 2/

mN

NW 2/2

mN

NW 2/2

mm NNW 2/)12( 1

12/ NNW

8/N

mN 2/

( 2 )逆推法

Page 30: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 30/86

4.2.4 、 DIT算法的其他形式流图

输入自然序输出倒位序 输入输出均自然序 相同几何形状

输入自然序输出倒位序

Page 31: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 31/86

Page 32: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 32/86

Page 33: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 33/86

Page 34: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 34/864.2.5 DIT 基 -2FFT的软件编程思想

由 DIT 基 -2FFT 算法原理及特点,不难看出,FFT 计算程序主要包括变址和 M 级递推计算两大部分。

Page 35: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 35/86

1.变址(倒序)运算

在实际运算中,一般总是按自然顺序将输入序列存入存储单元,故为实现 DIT 基 -2FFT 首先必须将输入序列 x(n) 按二进制倒序数重排。倒序重排一般采用反向进位加法来实现,图4.2.12 是反向进位加法实现变址运算的计算流程。

Page 36: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 36/86

Page 37: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 37/86

2 . M 级递推计算

根据 DIT 基 -2 FFT 的特点,可以得出图4.2.13 的 M轮递推计算的流程图。整个 M轮递推过程由三个嵌套循环构成。外层循环控制M轮的顺序运算,内层的两个循环控制同一轮的各个蝶形运算,其中最内一层循环控制同类(指有相同的旋转因子)蝶形的运算,而中间一层循环则针对不同类的蝶形运算。 I 和 IP 代表的是一个蝶形运算的两个节点。

Page 38: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 38/86

Page 39: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 39/86

4.3.1 算法的基本原理 设序列 x(n) 长度为 N=2M,首先将 x(n) 前后对半分开,得到两个子序列,其 DFT 可表示为如下形式:

X k DFT x n x n W

x n W x n W

x n W x n N W

x n W x n N W

n

N

Nnk

n

N

Nnk

n N

N

Nnk

n

N

Nnk

n

N

Nn N k

n

N

NNk

Nnk

( ) ( ) ( )

( ) ( )

( ) ( / )

( ) ( / )

/

/

/ /( / )

//

0

1

0

2 1

2

1

0

2 1

0

2 12

0

2 12

2

2

4.3 频域抽取基 -2 FFT 算法

Page 40: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 40/86

由于

N 点 DFT 按 k 的奇偶分组可分为两个 N/2 的 DFT

k取偶数时( k=2r , r=0,1,...,N/2-1 )

Wk

kNkN k/ ( )2 1

1

1

为偶数为奇数

X r x n x n N W

x n x n N W

n

N

Nrn

n

N

Nrn

( ) [ ( ) ( / )]

( ) ( / )

/

/

/

2 2

2

0

2 12

0

2 1

2

Page 41: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 41/86

2

2

2

12 1

0

1

0

2 12

2

( )( ) ( ) ( )

( ) ( )

N

N

N

n rN

n

n nrN

n

NX r x n x n W

Nx n x n W W

1

2

20 1 1

22

( ) ( ) ( )

, , ,( ) ( ) ( ) n

N

Nx n x n x n

Nn

Nx n x n x n W

Page 42: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 42/86

将 x1(n) 和 x2(n) 分别代入 和 式,可得

/ 2 1

1 / 20

/ 2 1

2 / 20

(2 ) ( )

(2 1) ( )

Nrn

Nn

Nrn

Nn

X r x n W

X r x n W

(2 )X r (2 1)X r

则 X(2r) 和 X(2r+1) 分别是 x1(n) 和 x2(n) 的 N / 2 点DFT ,记为 X1(k) 和 X2(k)

Page 43: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 43/86

如图 3.4.1 DIF-FFT 的一次分解运算流图( N=8 ):

Page 44: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 44/86

由于 N/2 仍然为 2 的整数幂,继续将 N/2 点DFT 分成偶数组和奇数组,这样每个 N/2 点DFT 又可分解成两个 N/4 点 DFT ,其输入序列分别是按上下对半分图开后通过蝶式运算构成的4 个子序列 , 如下图

Page 45: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 45/86

Page 46: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 46/86

按照以上方法继续分解下去,经过 M-1 次分解,

最后分解为 N/2 个两点 DFT ,这 N/2 个 2点 DFT 的输出就是 N 点 DFT 的结果 X(k) ,如下图

Page 47: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 47/86

Page 48: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 48/86

上图给出了 N=8 时完整的 DIF-FFT 的运算流图。由于这种方法是 按X ( K ) 在频域进行奇偶分解,因此称之为频域抽取FFT运算.

比较DIF-FFT与DIT-FFT:相同点:运算次数与存储量相同不同点:1 .DIF-FFT输入序列为自       然序列而输出为码位倒置序列    2 . 蝶式运算过程不同 :

 DIT-FFT是序列先乘旋转因子后相加减 DIF-FFT是序列先相加减后乘旋转因子

Page 49: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 49/86

蝶形运算两节点的第一个节点为值 k ,表示成M 位二进制数,左移 m-1 位,把右边空出的位置补零,结果为 r 的二进制数。

rNW 的确定

12( ) 2 mr k

Page 50: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 50/86

以上所讨论的 FFT 的运算方法同样可用于 IDFT 的运算,简称为 IFFT 。即快速付里叶反变换。从 IDFT 的定义出发,可以导出下列二种利用 FFT 来计算 FFT 的方法。

4.4 快速傅里叶反变换

Page 51: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 51/86

4.1.1. 稍微变动 FFT 程序和参数可实现 IFFT

1

0

1

0

1

( ) ( ) ( )

( ) ( ) ( )

Nnk

Nn

Nnk

Nk

X k DFT x n x n W

x n IDFT X k X k WN

Page 52: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 52/86

比较两式可知 , 只要 DFT 的每个系数 换成 ,最后再乘以常数 1/N 就可以得到 IDFT 的快速算法 --IFFT 。

另外 , 可以将常数 1/N 分配到每级运算中 ,

∵ , 也就是每级蝶形运算均乘以 1/2 。

1 1

2NM( )

nkNW nk

NW

Page 53: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 53/86

Page 54: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 54/86

4.4.2 不改变 FFT 的程序直接实现 IFFT

因为

所以

x nN

X k W n NNnk

k

N

( ) ( ) , , ....,

10 1

0

1

x nN

X k WNnk

k

N

( ) ( )1

0

1

Page 55: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 55/86

两边取共轭有:

此方法只需要一个 FFT程序即可进行正逆变换的快速计算。

x nN

X k W n NNnk

k

N

( ) ( ) ,....,

10 1

0

1

1

NDFT X k{ [ ( )]}

Page 56: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 56/86

4.5 实序列的 FFT 算法 在前面的讨论中,认为所考虑的有限长度序列为任意的复数序列,但在实际应用中,通常处理的是实信号。当然,实信号可以看成是虚部是零的复信号,因此也可以利用 FFT 算法计算出实信号的 FFT 。但是用这种方法来处理实信号,显然浪费了一半的存储空间和约一半的运算量。

根据序列 DFT 的共轭对称性知道,任意复数序列的实部的 DFT 对应于其 DFT 共轭对称分量,而其虚部的 DFT 对应于其 DFT 共轭反对称分量,故可用一次 N 点 DFT 计算两个 N 点实序列的 DFT 。

Page 57: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 57/86

设 和 为两个长度为 N 的实序列,按如下方式构造新序列 :

1( )x n 2 ( )x n

( )y n

1 2( ) ( ) ( )y n x n jx n

N 点 DFT 为( ) DFT[ ( )] ( ) ( )ep opY k y n Y k Y k

根据共轭对称性,则*

1

*2

1( ) DFT[ ( )] [ ( ) (( )) ( )]

21

( ) DFT[ ( )] [ ( ) (( )) ( )]2

ep N N

op N N

Y k x n Y k Y N k R n

Y k jx n Y k Y N k R n

4.5.1 利用频谱对称性求实信号的 FFT

Page 58: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 58/86

所以

*1 1

*2 2

1( ) DFT[ ( )] ( ) [ ( ) (( )) ( )]

2

( ) DFT[ ( )] ( ) [ ( ) (( )) ( )]2

ep N N

op N N

X k x n Y k Y k Y N k R n

jX k x n jY k Y k Y N k R n

设一个 2N 点的序列 ,现按偶、奇进行分解得:

( )x n

1

2

( ) (2 )0 1

( ) (2 1)

x n x nn N

x n x n

Page 59: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 59/86

1 2 2

1 2 2

( ) ( ) ( )0 1

( ) ( ) ( )

kN

kN

X k X k W X kk N

X k N X k W X k

这相当于一个 N 点 DFT 运算加上 DIT-FFT 蝶形运算,当 N 较大时,可节省近一半的计算量。

再构造复数序列 y(n) 。然后先求出 x1(n) 和 x2(n)的 N 点 DFTX1(k) 和 X2(k) ,因为 x1(n) 和 x2(n) 分别是原序列 x(n) 的偶、奇序列,这与按时间抽取的 FFT 算法的分解思路完全相同,故根据 DIT-FFT 蝶形运算式,可得

Page 60: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 60/86

4.5.2 离散哈特曼变换

1 、离散哈特曼变换的定义

设 x(n) 为一 N 点的实序列,则其离散哈特曼变换( DHT)为

1

H0

2( ) DHT[ ( )] ( )cas( ) 0 1

N

n

nkX k x n x n k N

N

逆变换为

1

H H0

1 2( ) IDHT[ ( )] ( )cas( ) 0 1

N

k

nkx n X k X k n N

N N

式中

2 2 2cas( ) cos( ) sin( )

nk nk nk

N N N

Page 61: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 61/86

2. DHT 与 DFT 的关系

DFT 和 IDFT 用欧拉公式展开可表示成1

2 /

0

1

0

( ) DFT[ ( )] ( )

2 2( )[cos( ) sin( )] 0 1

Nj nk N

n

N

n

X k x n x n e

nk nkx n j k N

N N

12 /

0

1

0

( ) IDFT[ ( )] ( )

2 2( )[cos( ) sin( )] 0 1

Nj nk N

k

N

k

x n X k X k e

nk nkX k j n N

N N

Page 62: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 62/86

可以看出, DHT 的核函数

是 DFT核函数

的实部和虚部之和。

将 分解为奇对称分量和偶对称分量之和

2 2 2cas( ) cos( ) sin( )

nk nk nk

N N N

2 / 2 2cos( ) sin( )j nk N nk nk

e jN N

H ( )X k

H H H( ) ( ) ( )e oX k X k X k

Page 63: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 63/86

其中

由 DHT 的定义可得

H H H

H H H

1( ) [ ( ) ( )]

21

( ) [ ( ) ( )]2

e

o

X k X k X N k

X k X k X N k

1

H0

1

H0

2( ) ( ) cos( )

2( ) ( )sin( )

N

en

N

on

nkX k x n

N

nkX k x n

N

Page 64: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 64/86

所以

因此

如果不考虑因子 1/2 ,只要增加 2N 次实数加法运算就能由 DHT 求出 DFT 。

H H

H

( ) ( ) ( )

( ) Re[ ( )] Im[ ( )]e oX k X k jX k

X k X k X k

H H H H

1( ) ( ) ( ) ( ) ( )

2 2

jX k X k X N k X k X N k

Page 65: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 65/86

3. DHT 的快速算法( FHT )

仿照快速 DFT 的分解方法,可通过时域的抽取或频域抽取方式实现快速 DHT 。将 N=2M点的实序列 进行奇偶抽取

1

2

( ) (2 )0,1, / 2 1

( ) (2 1)

x r x rr N

x r x r

/ 2 1 / 2 1

H0 0

2 2( ) DHT[ ( )] (2 )cas( 2 ) (2 1)cas( (2 1) )

N N

r r

X k x n x r rk x r r kN N

Page 66: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 66/86

根据三角公式

令 , ,根据 DHT 的周期性,在 时

cas( ) cas cos cas( )sin

/ 2 1

H 10

/ 2 1 / 2 1

2 20 0

2( ) ( )cas( )

/ 2

2 2 2 2cos( ) ( )cas( ) sin( ) ( )cas( )

/ 2 / 2

N

r

N N

r r

X k x r rkN

k x r rk k x r rkN N N N

1H 1( ) DHT[ ( )]X k x n 2H 2( ) DHT[ ( )]X k x n

0k

H 1H 2 2

2 2( ) ( ) cos( ) ( ) sin( ) ( )

2H H

NX k X k k X k k X k

N N

Page 67: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 67/86

类似于 DIT 基 -2FFT 分解的同址运算思想,可用 、 、 和 四个点同址运算得出 、 、

和 。这种运算构成了一个运算蝶形,称为“哈特曼蝶形”。设

将上式中 k 分别取 k 、 N/2+k 、 N/2-k 和 N-k 四个值,并考虑 和 以 N/2 为周期,当

时,得到

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

H ( )X k H ( / 2 )X N k H ( / 2 )X N k

H ( )X N k

2cos( )kc k

N

2sin( )ks k

N

1H ( )X k 2H ( )X k 8N

Page 68: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 68/86

H 1H 2 2

H 1H 2 2

H 1H 2 2

H 1H 2 2

( ) ( ) ( ) ( / 2 )

( / 2 ) ( ) ( ) ( / 2 )0

4( / 2 ) ( / 2 ) ( ) ( / 2 )

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

k H k H

k H k H

k H k H

k H k H

X k X k c X k s X N k

X N k X k c X k s X N k Nk

X N k X N k s X k c X N k

X N k X N k s X k c X N k

H 1H 2

H 1H 2

(0) (0) (0)0

( / 2) (0) (0)H

H

X X Xk

X N X X

H 1H 2

H 1H 2

( / 4) ( / 4) ( / 4)

(3 / 4) ( / 4) ( / 4) 4H

H

X N X N X N Nk

X N X N X N

Page 69: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 69/86

上述的运算可用哈德曼蝶形表示如图 4.5.1 所示

Page 70: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 70/86

四点的 FHT 的蝶形图如图 4.5.2 所示。

Page 71: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 71/86

图 4.5.3 显示了 8 点的 DIT 基 -2FHT 流图。

Page 72: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 72/86

运算量

乘法次数

加法次数

21

1

( 2 ) 3 4M

LH

L

m N NM N

3 32

2 2Ha NM N

2MN

Page 73: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 73/864.6 线性卷积和线性相关的 FFT 算法

4.6.1 线性卷积的 FFT 算法设 y(n) 是 x(n) ( n=0~L-1)和 h(n) ( n=0~M-1)的线性卷积:

由于每一个 x(n)的输入值都必须和全部的 h(n)相乘一次,因而总共需要LM次乘法。

用 FFT算法也就是用圆周卷积来代替线性卷积时,为了不产生混叠,其必要条件是使 x(n) , h(n)都补零值,补到至少N=M+L-1,即

1

0

( ) ( )* ( ) ( ) ( )M

m

y n x n h n h m x n m

:( )y n L的长度为 M+ -1

Page 74: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 74/86

( ) 0 1( )

0 1

h n n Mh n

M n N

( ) 0 1( )

0 1

x n n Lx n

L n N

然后计算圆周卷积

( ) ( ) ( )y n x n h n

这时, y(n) 就能代表线性卷积的结果。

Page 75: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 75/86

利用 FFT 进行线性卷积的步骤如下:1. 将序列 x(n) 和 h(n) 补零延长,使其长度 若采用基 -2FFT ,还应使 N等于 2 的最小整数次幂。

2. 做 x(n) 和 h(n) 的长为 N 点的 FFT 得到 X(k) 和 Y(k) ,求它们的积 Y(k)=X(k)H(k)

3. 求 Y ( k )的 IFFT并取前 N 点获得线性卷积的结果为

N≥L+M-1

0 1( ) [ ( )]y n IDFT Y k n N

Page 76: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 76/86

整个过程中,共需要进行三次 FFT 运算,共需 次相乘,还有步骤( 2 )的 N 次相乘,因此共需相乘次数为

可以用线性相位 FIR滤波器来比较直接计算线性卷积和 FFT 法计算线性卷积这两种方法的乘法次数。 代表直接线性卷积所用的乘法次数,则比值为

2

3log

2N N

2 2

3 3log (1 log )

2 2Fm N N N N N

2 2

3 32 (1 log ) 2( 1)[1 log ( 1)]

2 2

dm

F

m ML MLK

m N N M L M L

dm

Page 77: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 77/86

( 1 ) x(n) 与 h(n) 点数差不多

例如,设M=L ,则 ,则

当 M = 8 , 16 , 32 时,圆周卷积的运算量大于线性卷积;当M=64 时,二者相当(圆周卷积稍好);当 M=512 时,圆周卷积运算速度可快 8倍;当M=4096 时,圆周卷积约可快 50倍。可以看出,当M=L 且 M超过 64 以后, M越长圆周卷积的好处越明显。因而将圆周卷积称为快速卷积。

2 -1 2N M M

22

5 3 10 6log4( log )2 2

m

M MK

MM

Page 78: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 78/86

( 2 )当 x(n) 的点数很多时

1.重叠相加法 h(n) 长度为 M , x(n) 长度为 L0,且 L0 》 M ,

x(n) 与 y(n) 的卷积为

1

0

( ) ( )P

ii

x n x n

( ) ( ) ( )i Lx n x n R n iL

1

0

( ) ( )* ( ) ( )* ( )P

ii

y n x n h n h n x n

1 1

0 0

[ ( )* ( )] ( )P P

i ii i

x n h n y n

Page 79: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 79/86

Page 80: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 80/86

Page 81: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 81/86

重叠相加法的步骤如下:

3. 计算 ,并求长为 L 的反变换,即

4. 将 的重叠部分相加,最后得到结果为

1. 将 补零延长到 L =M+ N -1 ,并计算长为L 的 FFT , 得到

)(nh)(kH

2. 分别将 补零延长到 L =M+ N -1 ,并计算长为 L 的 FFT ,得到

( )ix n( )iX k

( ) ( ) ( )i iY k X k H k

( ) [ ( )]i iy n IFFT Y k

)(nyk

)()( nyny kk

Page 82: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 82/86

(补充)重叠保留法

序列分段的方法:

0

0, 0,1, , 2( )

( 1), 1, 1

n Nx n

x n N n N L

( 1),0 1( )

0,k

x n kL N n Lx n

n

为其他值

Page 83: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 83/86

重重叠叠保保留留法法分分段段方方法法示示意意图图

Page 84: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 84/86

输入的每段序列重叠 N-1 点,而每段的循环卷积的输出去掉前面 N-1 点只保留后面 M 点,

)()(0

kNnyny kk

1,,1,)1('2,,0,0

)(LNnMny

Nnny

kk

Page 85: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 85/86

Page 86: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 86/86

4.6.2 线性相关的 FFT 算法

设 x(n) 为 L 点, y(n) 为 M 点,则线性相关

利用 FFT 法求线性相关是用圆周相关代替线性相关,选择 ,且 ( r 为整数),令

1

0

*( ) ( ) ( )M

xym

r n x n m y m

1 N L M 2 rN

( ) 0 1( )

0 1

x n n Lx n

L n N

( ) 0 1( )

0 1

y n n My n

M n N

Page 87: 第 4 章 快速傅里叶变换

第 4 章 快速傅里叶变换 87/86

其计算步骤如下:( 1 )用 FFT 算法求 , N 点;

( 2 )用 FFT 算法求 , N 点;

( 3 )求乘积( 4 )用 IFFT 算法求

( ) DFT[ ( )]Y k y n( ) DFT[ ( )]X k x n

*( ) ( ) ( )xyR k X k Y K

( ) IDFT[ ( )]xy xyr n R k