Top Banner
1 高高高高高高高高 (fast Fourier transfor m)
32

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

Jan 13, 2016

Download

Documents

egan

高速フーリエ変換 (fast Fourier transform). 高速フーリエ変換とは? 簡単に言うとフーリエ変換を効率よく計算する方法 アルゴリズムの設計技法は分割統治法に基づいている 今回の目的は? 多項式の積を求める問題を取り上げ、高速フーリエ変換のアルゴリズムを用いた解法を導いて、計算時間を驚くほど短縮できることを示す. 多項式の積の計算の例1. 以下のような 2 次多項式のp(x)とq(x)をかける   この場合2次式のため簡単に出来たが、一般的に N-1 次多項式の時は、このような方法では大変時間      がかかる . どうすればよいのか?. - PowerPoint PPT Presentation
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: 高速フーリエ変換 (fast Fourier transform)

1

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

Page 2: 高速フーリエ変換 (fast Fourier transform)

2

• 高速フーリエ変換とは?– 簡単に言うとフーリエ変換を効率よく計算

する方法– アルゴリズムの設計技法は分割統治法に基

づいている

• 今回の目的は?– 多項式の積を求める問題を取り上げ、高速

フーリエ変換のアルゴリズムを用いた解法を導いて、計算時間を驚くほど短縮できることを示す

Page 3: 高速フーリエ変換 (fast Fourier transform)

3

多項式の積の計算の例1

• 以下のような 2 次多項式のp(x)とq(x)をかける

  この場合2次式のため簡単に出来たが、一般的に N-1 次多項式の時は、このような方法では大変時間      がかかる . どうすればよいのか?

回の乗算2N

42

432322

22

2

2

xx2x2

xxx2xxx2xx2

)xx2)(xx1()x(q)x(p

xx2)x(q

xx1)x(p

Page 4: 高速フーリエ変換 (fast Fourier transform)

4

多項式の積の計算を高速化するには?

• N-1 次の多項式は N 個の異なる点における関数値で完全に決まるという事実を利用する( N-1 次式の項の数は定数も含むから N 個)⇒ 2つの N-1 次多項式同士の積は2 N-1 個

の点でその多項式の値が分かっていれば、その積を完全に決定できる

Page 5: 高速フーリエ変換 (fast Fourier transform)

5

2つの N-1 次多項式の積を求める

             基本的な手順

• 評価:入力された多項式の値を2 N-1個の    異なる点で計算する

• 乗算:各点でえられた値を掛ける• 補間:上で求めた2 N-1 個の値を補間

する– 補間とは、多項式の N 個の異なる点にお

ける値が与えられた時、その多項式の係数を求めること

Page 6: 高速フーリエ変換 (fast Fourier transform)

6

2N-1 次の多項式R(x)=P(x)Q(x)

2つの N-1 次多項式P(x)     Q(x)

乗算の計算時間2N

評価

乗算

補間

フーリエ変換逆フーリエ変換分割統治法を用いて

効率よくしたのが高速フーリエ変換

1N21

1N21

aq,),a(q

ap,),a(p

)a(r,),a(r

)x(q)x(p)x(r

1N21

Page 7: 高速フーリエ変換 (fast Fourier transform)

7

• 例2)

28,6,2,4,24)2(r),1(r),0(r),1(r),2(r

)x(r

4,2,2,4,8)2(q),1(q),0(q),1(q),2(q

7,3,1,1,3)2(p),1(p),0(p),1(p),2(p

xq,xp2,1,0,1,2x

)x(q)x(pxr

xx2)x(q

xx1)x(p2

2

はとなる.すると

を計算するとにおいてを求めたい

Page 8: 高速フーリエ変換 (fast Fourier transform)

8となる.

用いるとラグランジュの公式を

42 xx2x2

12

1x

02

0x

12

1x

22

2x28

21

2x

01

1x

11

1x

21

2x6

20

2x

10

1x

10

1x

20

2x2

21

2x

11

1x

01

0x

21

2x4

22

2x

12

1x

02

0x

12

1x24)x(r

Page 9: 高速フーリエ変換 (fast Fourier transform)

9

ラグランジュの公式

jiNi1 ij

i

Nj1j

NN2211

N21

N21

xx

xxy)x(P

1N

y)x(P,,y)x(P,y)x(P

y,,y,y

x,,x,xNP(x)1N

公式)(ラグランジュの補間

式を用いることラグランジュの補間公この時の古典的な解は

(補間する)次多項式を求めたい.を満たす唯一の

が与えられた時、そこでの値

と個の点の次多項式

Page 10: 高速フーリエ変換 (fast Fourier transform)

10

• 例2の場合、評価と補間それぞれで  の計算時間がかかってしまう

• しかし、多項式の値を計算する2 N-1個の点はどこの点を選んでもよいことに注目すると、多項式の積の計算を簡単にする点集合を選べば、効率のよく計算時間を短縮できるのでは?

2N

Page 11: 高速フーリエ変換 (fast Fourier transform)

11

1の複素累乗根• 多項式の積の計算をする点として、1

の複素累乗根を用いると計算を高速化できる

をえる.

で割ると上の式を

ともある.や虚数部が0になるこに乗算の結果、実数部となる.次の例のよう

2つの複素数の積は

12

i

2

1

216

16)i1(

i2)i1)(i1(

i)bcad()bdac()dic)(bia(

8

8

8

Page 12: 高速フーリエ変換 (fast Fourier transform)

12

となる.であるから、はが偶数の時は

 が原始8乗根であるで、

例)1の8乗根乗してえられる.をに対して、全ての根は

と表わすと、それを乗根」とよばれ、1の原始これらの中の1つは「

個ある.がとなる複素数に対して、実際、自然数

.1の累乗根とよばれるたくさんあり、して1となる複素数は一般に、その数を累乗

1W1WN

.W1W

W,W,W,W,W,W,W,W

kW1N,,2,1,0k

W

N

NZ1ZN

48N

18

08

78

68

58

48

38

28

18

08

N

N

N

2N

Page 13: 高速フーリエ変換 (fast Fourier transform)

13

  N-1 次多項式の値を        1の N 乗根において計算する• 1 の N 乗根における値をそのまま計算し

たのではあまり意味がない• 分割統治法を用いる

– 低次の項から順に交互にとって2つに分ける

– N- 1次多項式の値を N 個の点で計算するために、まず N/2 個の係数の2つの多項式に分割する。そしてそれぞれの多項式の値をN/2 個の点で計算して全体の N 点における値を求めればよい

Page 14: 高速フーリエ変換 (fast Fourier transform)

14

• なぜ分割統治法がいいのか?– 根を2乗すると別の根が得られる– 特に N が偶数の時は、  1の N 乗根を2乗すると、1の N/2 乗根

が得られる例)

実際に N=8 で考えてみる

12

214

14

218

W)W(

W)W(

Page 15: 高速フーリエ変換 (fast Fourier transform)

15

になる.

乗するととなる.次に各項を2

だからまず、

るを1の8乗根で計算す項式する.ここで、7次多上のように2つに分割

の時例3)

34

24

14

04

34

24

14

04

28

38

28

18

08

38

28

18

088

48

78

68

58

48

38

28

18

088

2o

2e

67

45

231

66

44

220

77

66

55

44

33

2210

w,w,w,w,w,w,w,w:W

w,w,w,w,w,w,w,w:W

1w

w,w,w,w,w,w,w,w:W

)x(p

)x(xp)x(p

)xpxpxpxp(x)xpxpxpp(

xpxpxpxpxpxpxpp)x(p

8N

Page 16: 高速フーリエ変換 (fast Fourier transform)

16

),w(pw)w(p)w(p

),w(pw)w(p)w(p

),w(pw)w(p)w(p

),w(pw)w(p)w(p

),w(pw)w(p)w(p

),w(pw)w(p)w(p

),w(pw)w(p)w(p

),w(pw)w(p)w(p

)x(xp)x(p)x(p

34o

38

34e

78

24o

28

24e

68

14o

18

14e

58

04o

08

04e

48

34o

38

34e

38

24o

28

24e

28

14o

18

14e

18

04o

08

04e

08

2o

2e

うな次式が導かれる.に注目すると以下のよ

Page 17: 高速フーリエ変換 (fast Fourier transform)

17

)}pp(i)pp{(i)pp(i)pp(

i)i()w(w

,i)1()w(w

)}pp(w)pp{(w)pp(w)pp(

1w

)}wpp(w)wpp{(w)wpp(w)wpp(

)}wpp(w)wpp{(w)wpp(w)wpp(

)wpwpwpp(w)wpwpwpp(

)w(pw)w(p)w(p

)w(pw)w(p)w(p

73516240

21

211

418

21

211

214

731451

1862

1440

12

1273

14

1251

18

1262

14

1240

2473

14

2451

18

2462

14

2440

347

245

1431

18

346

244

1420

14o

18

14e

18

14o

18

14e

18

 

だから

また

だからここで、

を計算してみる.実際に、

Page 18: 高速フーリエ変換 (fast Fourier transform)

18

を求める.し、全体のつずつ上にあげて計算あとは

を得る.かはのどちらかだからはこのとき

の時に打ち切る.のように再帰は

する.)のベキ乗であると仮定はとなるので、算で(ただし、再帰的な計

回繰り返す.このような乗算を計算する.乗根において再帰的にのとをと

の計算をする乗根における一般的に、1の

)x(p1

ppppxpp

1)w(,1wx

2Nw

2N

,4/N,2/N

N

2/N1xpxp

)x(pN

101010

212

12

x2

oe

Page 19: 高速フーリエ変換 (fast Fourier transform)

19NlgN2n)2(M)N(M

)Nlgn2N(

n

1112

)2(M

112

)2(M

12

)2(M

2

)2(M

2)2(M2)2(M

2N

N)2/N(M2)N(M

)N(M

N1NNlgN

nn

n

3n

3n

2n

2n

1n

1n

n

n

n1nn

n

よりよって

とおく

これを解くと、

再帰式はとする.分割統治法の乗算の回数をを参照証明)第6章漸化式4

る乗根において計算でき次多項式の値を1の回の乗算によって、約性質41.1

Page 20: 高速フーリエ変換 (fast Fourier transform)

20

1の累乗根の関数値の補間• 1の累乗根を用いて高速で多項式の値が得られ

た⇒ その値を高速で補間すれば、高速で多項式の積

が求まったことになる.

補間する点集合が1の累乗根ならば、関数値を計算する手順で補間多項式も求まる!

フーリエ変換とその逆変換を使っているから!!

なぜなら

Page 21: 高速フーリエ変換 (fast Fourier transform)

21使える.そのまま補間の計算に関数値の計算の手順が点を並び替えるだけでつまり値の計算すべき

の逆順にしただけは1の8乗根をここで、数列

)だからが求まる.(

の係数において計算すると、

数の値を1の累乗根の逆とする.多項式

とする多項式を各点における値を係数

を求めることである.数次の値をとるように係が1の8乗根において

式の例で、補間は、多項前と同じ

.w,w,w,w,w,w,w,w:W

WW

r8)w(ss)w(r

.r,r,r,r,r,r,r,r

)x(r

.w,w,w,w,w,w,w,w:W

)x(s

xsxsxsxsxsxsxss)x(s

.s)w(rs)w(rs)w(rs)w(r

s)w(rs)w(rs)w(rs)w(r

)8i0(r

xrxrxrxrxrxrxrr)x(r

8N

18

28

38

48

58

68

78

08

18

81

8

11

8118

76543210

78

68

58

48

38

28

18

08

18

77

66

55

44

33

2210

778,6

68,5

58,4

48

,338,2

28,1

18,0

08

i

77

66

55

44

33

2210

Page 22: 高速フーリエ変換 (fast Fourier transform)

22

01w

1wwti

Nw,rrti

Nrwr

wr

)w()w(r

)w)(w(r

)w(s)w(s

)x(stN1

tiN

NtiN

Nj0

tijN

Nj0

tijNt

Ni0i

tNj0

tijN

Ni0i

tijN

Ni0i

Nj0

jtN

ijN

Ni0i

Nj0

jtN

jN

Nj0

jtN

Nj0j

tN

の時、

の時、

となる.

の値を計算すると、る番目の値の逆数におけ乗根のの

Page 23: 高速フーリエ変換 (fast Fourier transform)

23

1

8i0

1ij8

8j0i

1ij8

8i0i

8j0

718

7787

7810

18

7187

1810

7087

0810

j18

ij8

8i0i

8j0

778

78

228

28

18

18

08

j18

j8

8j0

7187

2182

1810

j18

8j0j

18

r8wr

wr

)w()w(rwrr

w)w(rwrr)w(rwrr

)w()w(r

wwrwwrwwrwr

)w)(w(r

)w(s)w(swss

)w(s)w(s

)x(s181

の値を計算すると、る番目の値の逆数におけ乗根のの

Page 24: 高速フーリエ変換 (fast Fourier transform)

24

• 性質41.21の N 乗根における値が与えられた N-1 次多項式の係数を、約 NlgN 回の乗算で求めることが出来る.

  これは補間の計算は多項式の値の計算の逆であるから性質41.1より乗算は約 NlgN 回となる.

 多項式の値の計算と補間の計算の乗算の回数は  NlgN 回であるが、あくまで1の N 乗根に対してだ

け あてはまる

Page 25: 高速フーリエ変換 (fast Fourier transform)

25

eval(p, outN, 0);eval(q, outN, 0);for (i = 0; i <= outN; i++) r[i] = p[i]*q[i];eval(r, outN, 0);for (i = 1; i <= N; i++) { t = r[i]; r[i] = r[outN+1-i]; r[outN+1-i] = t; }for (i = 0; i <= outN; i++) r[i] = r[i]/(outN+1);

・大域変数 outN に2 N-1 が与えられている.・ p,q,r は添字の範囲が0から2 N-1 の複素数の配列 と仮定されている.・多項式 p,q は N-1 次であり、 N 次より上位の係数

は0に 初期化されている.

Page 26: 高速フーリエ変換 (fast Fourier transform)

26

手続き eval

• 1番目の引き数– 多項式の係数を、1の累乗根における多項

式の値に書き換える• 2番目の引き数

– 多項式の次数(係数の数、1の根の数より1少ない)

手続き eval の目的N+1 個の係数が連続して入っている配列を入力

として、同じ配列に N+1 個の関数値を入れて返す

こと

Page 27: 高速フーリエ変換 (fast Fourier transform)

27

• しかし、再帰呼出しでは連続していない偶数番目と奇数番目の係数の配列を入れかえなければならない.⇒ここで用いられるのが、完全シャッフル

• 完全シャッフルをすることにより配列の前半に連続して偶数番目の係数を入れ、後半に奇数番目の係数を入れることが出来る.

Page 28: 高速フーリエ変換 (fast Fourier transform)

28

完全シャッフル

P[0] P[1] P[2] P[3] P[4] P[5] P[6] P[7]

P[0] P[2] P[4] P[6] P[1] P[3] P[5] P[7]

Page 29: 高速フーリエ変換 (fast Fourier transform)

29

高速フーリエ変換のプログラム

• 実際計算する時の 1 の N 乗根の値は、

• 配列 w に 1 の (outN+1) 乗根が入っている

  上のことも考慮すると次のような高速フーリエ変換のプログラムとなる.

1N

j2sini

1N

j2cosw j

N

Page 30: 高速フーリエ変換 (fast Fourier transform)

30

eval(struct complex p[], int N, int k)

{ int i, j; if (N == 1) { p0 = p[k]; p1 = p[k+1]; p[k] = p0+p1; p[k+1] = p0-p

1; } else { for (i = 0; i <= N/2; i++){     j = k+2*i; t[i] = p[j]; t[i+1+N/2] = p[j

+1]; }

for (i = 0; i <= N; i++) p[k+i] = t[i];

eval(p, N/2, k); eval(q, N/2, (k+1+N)/2); j = (outN+1)/(N+1); for (i = 0; i <= N/2; i++) { p0 =        

  w[i*j]*p[k+(N/2)+1+i]; t[i] = p[k+i]+p0; t[i+(N/2)+1] = p[k+i]-p

0; } for (i = 0; i <= N; i++) p[k

+i] = t[i]; } }

Page 31: 高速フーリエ変換 (fast Fourier transform)

31

• 性質41.32 つの N-1 次多項式の積は 2NlgN+O(N)回の複素数の計算によって求められる.

 性質41.1と性質41.2より、 N-1 次多項式を 1 の N 乗根の値への変換と補間の乗算の回数はそれぞれ NlgN回である.また 1 の N 乗根に変換した値を掛け合わせるのに O(N) の乗算が必要だから、積の回数は 2NlgN+O(N) 回となる.

Page 32: 高速フーリエ変換 (fast Fourier transform)

32

により補間する③ ①: と同じ計算手順

合わせる.②:変換した値を掛け

乗根を使う)の(このときる.個の異なる点で計算す次多項式をつの①:

手順◎高速フーリエ変換の

回うと、高速フーリエ変換を使回の回数は普通に掛けると、乗算

時、次多項式の積を求めるつの◎

まとめ

N1

1N21N2

NONlgN2

N

1N22