高速フーリエ変換yama/DSP/dsp_04.pdf1 0 N 2 n nT N k T j x n e π N k T π ω 2 =...

35
高速フーリエ変換

Transcript of 高速フーリエ変換yama/DSP/dsp_04.pdf1 0 N 2 n nT N k T j x n e π N k T π ω 2 =...

Page 1: 高速フーリエ変換yama/DSP/dsp_04.pdf1 0 N 2 n nT N k T j x n e π N k T π ω 2 = 基本角周波数の整数倍の角周波数は (k =1, 2, 3, , N −1)

高速フーリエ変換

Page 2: 高速フーリエ変換yama/DSP/dsp_04.pdf1 0 N 2 n nT N k T j x n e π N k T π ω 2 = 基本角周波数の整数倍の角周波数は (k =1, 2, 3, , N −1)

高速フーリエ変換(FFT)

DFT・FFTと窓関数

Page 3: 高速フーリエ変換yama/DSP/dsp_04.pdf1 0 N 2 n nT N k T j x n e π N k T π ω 2 = 基本角周波数の整数倍の角周波数は (k =1, 2, 3, , N −1)

サンプル値信号のフーリエ変換

( ) ( )[ ] ( ) ( )∫ ∑∞

∞−

=

−−==0n

tjss dtenTtnxtxX ωδω     F

( ) ( )∑ ∫∞

=

∞−

−−=0n

tj dtenTtnx ωδ 

( )∑∞

=

−=0n

nTjenx ω  t

(最も多くのN 個の点を使う繰り返し)

一周期

TNπω 2

0  =

基本角周波数

Page 4: 高速フーリエ変換yama/DSP/dsp_04.pdf1 0 N 2 n nT N k T j x n e π N k T π ω 2 = 基本角周波数の整数倍の角周波数は (k =1, 2, 3, , N −1)

( )∑−

=

−=

1

0

2N

n

nTNk

Tj

enxπ

Nk

Tπω 2

 =

基本角周波数の整数倍の角周波数は

( )1,,3,2,1 −= Nk     

であるから

( )∑−

=

−=

1

0

2N

n

knN

jenx

π

( ) ( )[ ] ( )∑−

=

−==1

0

N

n

nTjss enxtxX ωω      F

離散フーリエ変換N

jeW

π2−

=一般に とおいて

Page 5: 高速フーリエ変換yama/DSP/dsp_04.pdf1 0 N 2 n nT N k T j x n e π N k T π ω 2 = 基本角周波数の整数倍の角周波数は (k =1, 2, 3, , N −1)

また

( ) ( )[ ] ( )kXtxX ss        ≡=Fω

逆離散フーリエ変換

( )∑−

=

=1

0

N

n

knWnx    

離散フーリエ変換

DFT (discrete Fourier transform )

( ) ( )[ ]     ωs- Xnx 1F=

( )∑−

=

−=1

0 1 N

k

knWkXN

   

: 周波数の関数

: 時間の関数

kn

Page 6: 高速フーリエ変換yama/DSP/dsp_04.pdf1 0 N 2 n nT N k T j x n e π N k T π ω 2 = 基本角周波数の整数倍の角周波数は (k =1, 2, 3, , N −1)

DFTの演算量

( ) ( ) ( )

== ∑∑

=

−−

=

1

0

21

0

N

n

knN

jN

n

kns enxWnxX

π

ω        

0 1

2 3 4 5

6 7

8  =N (DFTへの入力が8点)の場合

Page 7: 高速フーリエ変換yama/DSP/dsp_04.pdf1 0 N 2 n nT N k T j x n e π N k T π ω 2 = 基本角周波数の整数倍の角周波数は (k =1, 2, 3, , N −1)

DFTの演算量

( ) ( ) ( )

== ∑∑

=

−−

=

1

0

21

0

N

n

knN

jN

n

kns enxWnxX

π

ω        

( ) ( ) ( ) ( ) ( )72100 xxxxX ++++=  

( ) ( ) ( ) ( ) ( ) 7210 72101 WxWxWxWxX ++++=  

( ) ( ) ( ) ( ) ( ) 14420 72102 WxWxWxWxX ++++=  

( ) ( ) ( ) ( ) ( ) 491470 72107 WxWxWxWxX ++++=  

・・・

(直流成分)

(基本周波数成分)

(基本周波数の2倍の成分)

Page 8: 高速フーリエ変換yama/DSP/dsp_04.pdf1 0 N 2 n nT N k T j x n e π N k T π ω 2 = 基本角周波数の整数倍の角周波数は (k =1, 2, 3, , N −1)

DFTの演算量

64回の複素乗算

56回の複素加算

回の複素乗算

回の複素加算

一般には

2N( )1−NN

⇒ N の増加に伴って演算量が膨大になる

Page 9: 高速フーリエ変換yama/DSP/dsp_04.pdf1 0 N 2 n nT N k T j x n e π N k T π ω 2 = 基本角周波数の整数倍の角周波数は (k =1, 2, 3, , N −1)

の周期性と対称性

Re

Im

Re

Im

1

j

-j

-1

1

j

-j

-1

W0

W2

W4

W6

W1

W3

W5W7

W0

W2

W4

W6

W0

W18

W12

W9

W3

W21W15W6

W0

W4

W12

W16

W8

W12W1

6

W20W24

W28

W10

W14

W0

W10

W20

W25

W35

W5W15W30

W0

W12

W6

W0

W28

W14

W49

W35

W21W7

W18 W42

W24

W36

W30

W42

X(0) X(1) X(2) X(3)

X(4) X(5) X(6) X(7)

knW

Page 10: 高速フーリエ変換yama/DSP/dsp_04.pdf1 0 N 2 n nT N k T j x n e π N k T π ω 2 = 基本角周波数の整数倍の角周波数は (k =1, 2, 3, , N −1)

の周期性と対称性knW484032241680 WWWWWWW ======494133251791 WWWWWWW ======

42342618102 WWWWWW =====43352719113 WWWWWW =====44362820124 WWWWWW =====45372921135 WWWWWW =====46383022146 WWWWWW =====47393123157 WWWWWW =====

Page 11: 高速フーリエ変換yama/DSP/dsp_04.pdf1 0 N 2 n nT N k T j x n e π N k T π ω 2 = 基本角周波数の整数倍の角周波数は (k =1, 2, 3, , N −1)

の周期性と対称性knW

mNkN

kN WW ±=

lkN

lN

kN WWW −= ・

( ) ( ) ( )

= ∑∑

=

−−

=

1

0

21

0

N

n

knN

jN

n

kns enxWnxX

π

ω       

統合・分解をうまく

組み合わせることで

演算量の軽減が可能

⇒ 高速フーリエ変換 (FFT:fast Fourier transform)

J.W.Cooly & J.W.Tukey (1965)

Page 12: 高速フーリエ変換yama/DSP/dsp_04.pdf1 0 N 2 n nT N k T j x n e π N k T π ω 2 = 基本角周波数の整数倍の角周波数は (k =1, 2, 3, , N −1)

2を基底とするFFTmN 2=

・ 偶数番目

・ 奇数番目に分けて

( ) ( )nxny 2=

( ) ( )12 += nxnz

−= 1

2,,2,1,0 Nn     

の時系列データ を( )nx

( ) ( ) ( ) ( )∑∑−

=

+

=

++=1

2

0

121

2

0

2 122

N

n

knN

N

n

nkN WnxWnxkX   

とおくとNj

N eWπ2

−= 

Page 13: 高速フーリエ変換yama/DSP/dsp_04.pdf1 0 N 2 n nT N k T j x n e π N k T π ω 2 = 基本角周波数の整数倍の角周波数は (k =1, 2, 3, , N −1)

823 ==N の場合

Page 14: 高速フーリエ変換yama/DSP/dsp_04.pdf1 0 N 2 n nT N k T j x n e π N k T π ω 2 = 基本角周波数の整数倍の角周波数は (k =1, 2, 3, , N −1)

( ) ( ) ( ) ( )∑∑=

+

=

+=3

0

128

3

0

28

n

nk

n

nk WnzWnykX  

( ) ( )∑∑==

+=3

048

3

04

n

knk

n

kn WnzWWny 

Nj

N eWπ2

−=  knknjknjkn WeeW 4

422

82

28 ===

−− ππ

 ∵ より

( )nx

0 1 2 3 4 5 6 7 n

( )ny

n0 1 2 3

( )nz

n0 1 2 3

第一段目の時間分割

Page 15: 高速フーリエ変換yama/DSP/dsp_04.pdf1 0 N 2 n nT N k T j x n e π N k T π ω 2 = 基本角周波数の整数倍の角周波数は (k =1, 2, 3, , N −1)

( ) ( ) ( )∑∑==

+=3

048

3

04

n

knk

n

kn WnzWWnykX  

偶数番データのDFT 奇数番データのDFT

( ) ( )nxny 2=

( ) ( )12 += nxnzのDFTを

( )kY( )kZ

とおくと

( ) ( ) ( )kZWkYkX k8+= ( )3,2,1,0    =k

データ数8の半分を計算(4点DFT)

Page 16: 高速フーリエ変換yama/DSP/dsp_04.pdf1 0 N 2 n nT N k T j x n e π N k T π ω 2 = 基本角周波数の整数倍の角周波数は (k =1, 2, 3, , N −1)

( ) ( ) ( ) ( ) ( ) ( )∑∑=

++

=

+ +=+3

0

44

48

3

0

444

n

nkk

n

nk WnzWWnykX  

偶数番データのDFT 奇数番データのDFT

( ) ( )kZWkY k8−=

がとる値の後半を考えると

( ) ( )∑∑==

−=3

048

3

04

n

knk

n

kn WnzWWny 

( ) knnjknnjknnknnk WeWeWWWW 42

4

44

2

44

444

4 =⋅=⋅=⋅= −−+ ππ

 ∵

( ) kjkjkkk WeWeWWWW 88

48

2

84

884

8 −=⋅=⋅=⋅= −−+ ππ

 

k

( )3,2,1,0    =k

Page 17: 高速フーリエ変換yama/DSP/dsp_04.pdf1 0 N 2 n nT N k T j x n e π N k T π ω 2 = 基本角周波数の整数倍の角周波数は (k =1, 2, 3, , N −1)

( ) ( ) ( )kZWkYkX k ⋅−=+ 84  

したがって8点DFTの演算は

( )3,2,1,0    =k

( ) ( ) ( )kZWkYkX k ⋅+= 8  ( )3,2,1,0    =k

という2つの4点DFTで実現される

例) 0=k では

( ) ( ) ( )004 08 ZWYX ⋅−=  

( ) ( ) ( )000 08 ZWYX ⋅+=  

Page 18: 高速フーリエ変換yama/DSP/dsp_04.pdf1 0 N 2 n nT N k T j x n e π N k T π ω 2 = 基本角周波数の整数倍の角周波数は (k =1, 2, 3, , N −1)

4点DFTで置き換えられた8点DFT

( )( )( )( )( )( )( )( )76543210

xxxxxxxx ( )

( )( )( )( )( )( )( )76543210

XXXXXXXX( )0Y

( )1Y

( )2Y

( )3Y

( )0Z

( )1Z

( )2Z

( )3Z

DFT

( )4=N

( )4=N

DFT

08W

( ) ( ) ( )004 08 ZWYX ⋅−=  

( ) ( ) ( )000 08 ZWYX ⋅+=   0

8W−

28W

18W

38W

18W−

28W−

38W−

Page 19: 高速フーリエ変換yama/DSP/dsp_04.pdf1 0 N 2 n nT N k T j x n e π N k T π ω 2 = 基本角周波数の整数倍の角周波数は (k =1, 2, 3, , N −1)

第二段目の時間分解( )0Y

( )1Y

( )2Y

( )3Y

偶数番のDFT

( )4=N

( ) ( )00 yx →

( ) ( )12 yx →

( ) ( )24 yx →

( ) ( )36 yx →

( ) ( )nyna 2=

( ) ( )12 += nynb( )1,0  =n

( )ny

0 1 2 3n

( )na

n0 1

( )nb

n0 1

Page 20: 高速フーリエ変換yama/DSP/dsp_04.pdf1 0 N 2 n nT N k T j x n e π N k T π ω 2 = 基本角周波数の整数倍の角周波数は (k =1, 2, 3, , N −1)

( ) ( )∑=

=3

04

n

knWnykY   

( ) ( )∑∑==

+=1

02

28

1

02

n

knk

n

kn WnbWWna 

( ) ( ) ( )∑∑=

+

=

+=1

0

124

1

0

24

n

nk

n

nk WnbWna 

8点DFTの場合と同様に

( ) ( )kBWkA k28+= ( )1,0  =k

knknjnkjnk WeeW 22

224

22

4 ===−−

ππ

 ∵

( ) kjnkjknknk eeWWW 422

42

42

412

4

ππ−−+ ⋅=⋅= 

kknkjknjWWee 2

82

28

22

2

⋅=⋅=−−

ππ

Page 21: 高速フーリエ変換yama/DSP/dsp_04.pdf1 0 N 2 n nT N k T j x n e π N k T π ω 2 = 基本角周波数の整数倍の角周波数は (k =1, 2, 3, , N −1)

( ) ( ) ( )kBWkAkY k282 −=+  

がとる値の後半も同様に考えてk

したがって8点DFTを分割した偶数番データに

ついての4点DFTの演算は

という2つの2点DFTで実現される

( ) ( ) ( )kBWkAkY k ⋅+= 28  ( )1,0  =k

( ) ( ) ( )kBWkAkY k ⋅−=+ 282   ( )1,0  =k

Page 22: 高速フーリエ変換yama/DSP/dsp_04.pdf1 0 N 2 n nT N k T j x n e π N k T π ω 2 = 基本角周波数の整数倍の角周波数は (k =1, 2, 3, , N −1)

第二段目の時間分解2( )0Z

( )1Z

( )2Z

( )3Z

奇数番のDFT

( )4=N

( ) ( )01 zx →

( ) ( )13 zx →

( ) ( )25 zx →

( ) ( )37 zx →

( ) ( )nznc 2=

( ) ( )12 += nznd( )1,0  =n

( )nz

0 1 2 3n

( )nc

n0 1

( )nd

n0 1

Page 23: 高速フーリエ変換yama/DSP/dsp_04.pdf1 0 N 2 n nT N k T j x n e π N k T π ω 2 = 基本角周波数の整数倍の角周波数は (k =1, 2, 3, , N −1)

( ) ( )∑=

=3

04

n

knWnzkZ   

( ) ( )∑∑==

+=1

02

28

1

02

n

knk

n

kn WndWWnc 

偶数の場合と同様に

( ) ( )kDWkC k28+= ( )1,0  =k

( ) ( ) ( )kDWkCkZ k282 −=+

k がとる値の後半も同様にを考えて

Page 24: 高速フーリエ変換yama/DSP/dsp_04.pdf1 0 N 2 n nT N k T j x n e π N k T π ω 2 = 基本角周波数の整数倍の角周波数は (k =1, 2, 3, , N −1)

したがって8点DFTを分割した奇数番データに

ついての4点DFTの演算は

という2つの2点DFTで実現される

( ) ( ) ( )kDWkCkZ k ⋅+= 28  ( )1,0  =k

( ) ( ) ( )kDWkCkZ k ⋅−=+ 282   ( )1,0  =k

Page 25: 高速フーリエ変換yama/DSP/dsp_04.pdf1 0 N 2 n nT N k T j x n e π N k T π ω 2 = 基本角周波数の整数倍の角周波数は (k =1, 2, 3, , N −1)

2点DFTで置き換えられた4点DFT

( )( )( )( )( )( )( )( )76543210

xxxxxxxx ( )

( )( )( )( )( )( )( )32103210

ZZZZYYYY( )0A

( )1A

( )0B

( )1B

( )0C

( )1C

( )0D

( )1D

DFT( )2=N

08W

DFT( )2=N

DFT( )2=N

DFT( )2=N

08W−

28W

28W−

08W

28W

08W−2

8W−

( ) ( ) ( )000 08 BWAY +=

( ) ( ) ( )002 28 BWAY −=

Page 26: 高速フーリエ変換yama/DSP/dsp_04.pdf1 0 N 2 n nT N k T j x n e π N k T π ω 2 = 基本角周波数の整数倍の角周波数は (k =1, 2, 3, , N −1)

第三段目の時間分解( )0A

( )1A

偶数番のDFTのさらに

偶数番のDFT

( )2=N

( ) ( )00 ax →

( ) ( )14 ax →

( ) ( ) ( ) ( ) kkn

nWaWaWnakA 2

022

1

010 +==∑

=

0=k

( ) ( )00 xa = ( ) ( )41 xa = 102 =W, ,

1=k=kW2

1

1−N

j

N eWπ2

−= 

Page 27: 高速フーリエ変換yama/DSP/dsp_04.pdf1 0 N 2 n nT N k T j x n e π N k T π ω 2 = 基本角周波数の整数倍の角周波数は (k =1, 2, 3, , N −1)

したがって8点DFTを分割した4点DFTを

分割した2点DFTの演算(例)は

と求めることができる

この演算をバタフライ演算という

( ) ( ) ( )400 xxA +=  

( ) ( ) ( )401 xxA −=  

同様に,他の7つの2点DFTも求めることができる

Page 28: 高速フーリエ変換yama/DSP/dsp_04.pdf1 0 N 2 n nT N k T j x n e π N k T π ω 2 = 基本角周波数の整数倍の角周波数は (k =1, 2, 3, , N −1)

バタフライ演算

( )

( )4

0

x

x ( )

( )1

0

A

A108 =W

108 −=−W

( ) ( ) ( )400 xxA +=  

( ) ( ) ( )401 xxA −=  

Page 29: 高速フーリエ変換yama/DSP/dsp_04.pdf1 0 N 2 n nT N k T j x n e π N k T π ω 2 = 基本角周波数の整数倍の角周波数は (k =1, 2, 3, , N −1)

8点FFTのフローグラフ

( )( )( )( )( )( )( )( )73516240

xxxxxxxx ( )

( )( )( )( )( )( )( )76543210

XXXXXXXX( )0Y

( )1Y

( )2Y

( )3Y

( )0Z

( )1Z

( )2Z

( )3Z

0W0W−

0W

0W−

0W−

0W

0W−

0W

( )0A

( )1A

( )0B

( )1B

( )0C

( )1C

( )0D

( )1D

0W

0W−

2W

2W−

0W

0W−

2W

2W−

0W

2W3W

0W−

2W−

3W−

1W

1W−

Page 30: 高速フーリエ変換yama/DSP/dsp_04.pdf1 0 N 2 n nT N k T j x n e π N k T π ω 2 = 基本角周波数の整数倍の角周波数は (k =1, 2, 3, , N −1)

FFTの演算量DFT FFT

複素乗算回数 N×N N log2N複素加算回数 N×(N-1) N log2N合計計算回数 ≒ 2×N×N 2N log2N

データ数 DFT FFT 比率

26 64 4,096 384 10.67

27 128 16,384 896 18.29

28 256 65,536 2,048 32.00

29 512 262,144 4,608 56.89

210 1024 1,048,576 10,240 102.40

211 2048 4,194,304 22,528 186.18

212 4096 16,777,216 49,152 341.33

複素乗算回数を

比較すると,

データ数の増加

に伴ってFFTの

有効性が顕著に

なることが分かる

Page 31: 高速フーリエ変換yama/DSP/dsp_04.pdf1 0 N 2 n nT N k T j x n e π N k T π ω 2 = 基本角周波数の整数倍の角周波数は (k =1, 2, 3, , N −1)

窓関数

Page 32: 高速フーリエ変換yama/DSP/dsp_04.pdf1 0 N 2 n nT N k T j x n e π N k T π ω 2 = 基本角周波数の整数倍の角周波数は (k =1, 2, 3, , N −1)

入力信号と演算の周期

0 1 2 3 4 5 6 7 208 9 10 15 25 30 32

1周期

)(nx

n

0 1 2 3 4 5 6 7 208 9 10 15 25 30 32k

( )kX 入力信号が1周期の整数倍の場合

Page 33: 高速フーリエ変換yama/DSP/dsp_04.pdf1 0 N 2 n nT N k T j x n e π N k T π ω 2 = 基本角周波数の整数倍の角周波数は (k =1, 2, 3, , N −1)

入力信号と演算の周期

0 1 2 3 4 5 6 7 208 9 10 15 25 30

1周期

)(nx

n

0 1 2 3 4 5 6 7 208 9 10 15 25 30

k

( )kX

35 37

1周期 1周期 1周期1周期

35 37

入力信号が1周期の整数倍ではない場合

Page 34: 高速フーリエ変換yama/DSP/dsp_04.pdf1 0 N 2 n nT N k T j x n e π N k T π ω 2 = 基本角周波数の整数倍の角周波数は (k =1, 2, 3, , N −1)

0 20 40 600

0.2

0.4

0.6

0.8

1

窓関数

矩形窓ハミング窓

ブラックマン窓

n64=n の例

( )ntw

処理のために

切り出した区間

の両端付近で

信号が急激に

変化することを

避ける

両端付近の信号

が0に近づくような

関数を時間軸上で

かける

Page 35: 高速フーリエ変換yama/DSP/dsp_04.pdf1 0 N 2 n nT N k T j x n e π N k T π ω 2 = 基本角周波数の整数倍の角周波数は (k =1, 2, 3, , N −1)

窓関数をかけた場合 (hamming)

0 1 2 3 4 5 6 7 208 9 10 15 25 30

)(nx

n

0 1 2 3 4 5 6 7 208 9 10 15 25 30

k

( )kX

35 37

35 37

入力信号が1周期の整数倍ではない場合