離散 Fourier 変換 桂田 祐史 2014 年 11 月 14 日, 2014 年 11 月 21 日 応用上重要な離散 Fourier 変換の定義と簡単な性質を紹介する。用いる数学は複素数と線形 代数である (有限個のデータの話で、収束の話 (解析学) は必要ない)。むしろ Fourier 変換よ りも簡単と言える。 離散 Fourier 変換には、高速なアルゴリズムである高速 Fourier 変換 (Fast Fourier Transform, FFT) があるが、詳細は省略する。 概要 離散 Fourier 変換は、Fourier 係数、Fourier 級数展開の離散化と言える。 周期 2π の周期関数 f があるとき、測定して得られるような離散的な標本データを用 いて、近似的に Fourier 級数展開をすることを考える。適当な自然数 N を用いて、周期区 ∫ π 1 間を N 等分し、N 等分点上の関数値 {fj } から Fourier 係数 cn = f (x)e−inx dx 2π −π の近似値 Cn を求めることになるが、それには積分を台形則で近似するのが良い。そうし て得られた {Cn } は周期 N の周期数列である。写像 f0 C0 f1 C1 N C ∋ . 7→ . ∈ CN .. .. fN −1 CN −1 1 ( −(n−1)(j−1) ) ω (ただし ω = e2πi/N ) は、離散 Fourier 変換と呼ばれるが、それは W := N) √ ( を表現行列とする線型写像で、W −1 = ω (j−1)(n−1) である。 N W は unitary 行列に なっている (すなわち離散 Fourier 変換は実質的に unitary 変換である)。 1 離散 Fourier 係数 — なぜそのように定義するか (以下、周期を 2π として説明するが、π を L, nx を nπx/L と書き換えることで、周期 2L の場合の式が得られる。) f : R → C が周期 2π で、ほどほどに良い関数とする (この文書の中で収束の問題は考えな いことにする)。 ∫ 2π 1 (1) cn := f (x)e−inx dx (n ∈ Z) 2π 0 1 とおくとき (これまで [−π, π] で積分したが、[0, 2π] で積分しても同じ値が得られる)、 ∑ (2) f (x) = cn einx . n∈Z 1 周期区間 [0, 2π] を N 等分して、等分点 xj = jh (j = 0, 1, · · · , N ), (3) h := 2π N での値 fj := f (xj ) (j = 0, 1, · · · , N ) を用いて 1 、{cn } の近似 {Cn } を求めよう。 周期関数の周期区間上の積分の数値計算には、台形公式を用いるのが良いとされる (やって みると分かるが、しばしば驚異的な高精度が得られる)。 一般に定積分 ∫ b I= F (t) dt a に対する台形公式とは、{tj }N j=0 を [a, b] の N 等分点として、I を TN := N ∑ F (tj−1 ) + F (tj ) j=1 2 ( ′ ′ h =h F (t0 ) F (tN ) + F (t1 ) + · · · + F (tN −1 ) + 2 2 ) , h′ := b−a N で近似するものであるが、F が周期 b − a であれば、F (t0 ) = F (a) = F (b) = F (tN ) であるか ら、次のような簡潔な式に帰着される: ′ TN = h N −1 ∑ F (tj ) (周期関数に対する台形則). j=0 (1) を台形則で近似したものを Cn とおこう。 1 ∑ h f (xj )e−inxj . 2π j=0 N −1 Cn := (4) ω := e2πi/N = eih とおくと、 e−inxj = e−injh = ω −nj であるから、 N −1 1 2π ∑ Cn = fj ω −nj . · 2π N j=0 j ∈ Z に対して xj , fj を考えることも出来るが、その場合、f が周期 2π であるので、{fj }n∈Z は fj+N = fj (j ∈ Z) を満たす、すなわち周期 N の周期数列である。従って、{fj }j∈Z を扱う際は、連続した N 項、例えば −1 {fj }N j=0 だけを知れば十分である。つまり、j の範囲を広げることにあまり意味はない。 1 2 すなわち N −1 1 ∑ Cn = fj ω −nj . N j=0 (5) これを f の離散 Fourier 係数と呼ぶ。 補題 1.1 (1 の N 乗根の性質) N ∈ N に対して ω = e2πi/N とおくとき、次の (1), (2) が成り立つ。 (1) ω は 1 の原始 N 乗根、すなわち (i) 1 ≤ m ≤ N − 1 ⇒ ω m ̸= 1 (ii) ω N = 1 を満たす。 (2) ∀m ∈ Z に対して、次式が成り立つ。 { N −1 ∑ N (m ≡ 0 (mod N )) mj ω = 0 (それ以外). j=0 証明 (1) k ∈ Z に対して 2π ω k = ei N k であるから、k ≡ 0 (mod N ) のとき、そのときのみ ω k = 1 が成り立つ。特に 1 ≤ k ≤ N −1 を満たす任意の k に対して、ω k ̸= 1, ω N = 1 であることに注意する。 (2) m ≡ 0 (mod N ) のとき、ω m = 1 であるから、任意の j に対して ω mj = 1. ゆえに N −1 N −1 ∑ ∑ mj ω = 1 = N . そうでないとき、ω m ̸= 1 であるから、等比数列の和の公式より j=0 j=0 N −1 ∑ j=0 ω mj = N −1 ∑ j=0 ( )m 1 − ωN 1 − (ω m )N (ω ) = = = 0. 1 − ωm 1 − ωm m j 以下、この節では、2 数 ℓ, m がともに整数であり、ℓ ≡ m (mod N ) であることを単に ℓ ≡ m と書くと約束する。 3 命題 1.2 (離散 Fourier 係数の性質) 周期 2π の周期関数 f : R → C と N ∈ N に対して、 h := 2π , N xj := jh, ω := e2πi/N = eih , (j ∈ Z), fj := f (xj ) N =1 1 ∑ Cn := fj ω −nj N j=0 (n ∈ Z) で離散 Fourier 係数 {Cn }n∈Z を定めるとき、以下の (1), (2) が成り立つ。 (1) {Cn }n∈Z は周期 N の周期数列である: Cn+N = Cn (n ∈ Z). (2) 任意の n ∈ Z に対して、 (6) ∑ Cn = cm . m≡n ただし ∑ は、m ≡ n (mod N ) を満たすすべての m に対して和を取ることを意味 m≡n する。 証明 (1) ω −(n+N )j = ω −nj ω −N j = ω −nj であるから、 Cn+N N −1 N −1 1 ∑ 1 ∑ −(n+N )j = fj ω = fj ω −nj = cn . N j=0 N j=0 (2) fj = ∑ cn einxj = ∑ n∈Z n∈Z cn einjh = ∑ cn ω nj n∈Z であるから、 N −1 N −1 N −1 1 ∑ 1 ∑ 1 ∑ −nj −nj ω = fj ω = Cn = N j=0 N j=0 N j=0 = 1 ∑ cm N m∈Z N −1 ∑ ω (m−n)j = j=0 ( ∑ ) cm ω mj ω −nj m∈Z ∑ 1 ∑ cm N = cm . N m≡n m≡n −1 この命題の (1) から、{Cn }n∈Z を求めよ、と要求されたとき、連続した N 項、例えば {Cn }N n=0 を計算出来れば十分である (それ以上やることはない) ことが分かる。 4 C0 = ∑ cm = c0 + cN + c−N + c2N + c−2N + · · · , m≡0 C1 = ∑ cm = c1 + c1−N + c1+N + c1−2N + c1+2N + · · · , m≡1 C−1 = ∑ cm = c−1 + c−1+N + c−1−N + c−1+2N + c−1−2N + · · · , m≡−1 C2 = ∑ cm = c2 + c2−N + c2+N + c2−2N + c2+2N + · · · , m≡2 C−2 = ∑ cm = c−2 + c−2+N + c−2−N + c−2+2N + c−2−2N + · · · m≡−2 次の問を考えよう。 Q Cn は cn の良い近似になっているか? (もともと cn の近似値を求めようとして、その定義式の積分を、台形則という数値積分公式で 近似したものが Cn であるわけだが、本当に Cn が cn に近いかは、確かめる必要がある。) A ある意味で Yes である。正確には、 任意の n ∈ Z を固定するとき、 lim Cn = cn . N →∞ 注意: h, xj , fj , ω, Cn は、N に依存していることに注意せよ。本来は、それぞれ hN , xj,N , fj,N , ωN , Cn,N と書くべきものかもしれない。だから上の式は lim Cn,N = cn である。すな N →∞ わち、ε-N で表せば (∀n ∈ N)(∀ε > 0)(∃n′ ∈ N)(∀N ∈ N : N ≥ n′ ) |Cn,N − cn | < ε. 次に考えてもらいたいのは、 Q C−1,N = CN −1,N = c−1 + c−1+N + c−1−N + c−1+2N + c−1−2N + · · · であるわけだが、これ は c−1 , cN −1 , いずれの近似か? A c−1 の近似になっているが、cN −1 の近似ではない。 lim (c−1+N + c−1−N + c−1+2N + c−1−2N + · · · ) = 0 N →∞ であるから、確かに lim C−1,N = c−1 . N →∞ 結局、Cn (|n| < N/2) は cn の近似である、とまとめられるであろう。|n| ≒ N/2 のときは、 精度はかなり悪くなる。 2 離散 Fourier 変換 ここからは N 次元ベクトルの変換の話で、無限和は登場せず、線形代数の話になる。 5 f = C= f0 f1 .. . N −1 1 ∑ −nj N ω fj で定義される ∈ C に対して、離散 Fourier 係数の式 Cn = N j=0 fN −1 C0 C1 ∈ CN を、f の離散 Fourier 変換と呼ぶ。また写像 CN ∋ f 7→ C ∈ CN も離 .. . CN −1 散 Fourier 変換と呼ぶ。これは線型写像であり、ある行列をかけることで表現できる。その 行列の性質を述べよう。 命題 2.1 (離散 Fourier 変換の表現行列とその逆行列) N ∈ N に対して ω := e2πi/N , ω0 ω0 ω0 ··· ω0 0 ω −1 ω −2 ··· ω −(N −1) ω 1 1 ( −(n−1)(j−1) ) −2 −4 −2(N −1) ω 0 ω ω · · · ω = ω W := , N N .. .. .. .. ... . . . . ω 0 ω −(N −1) ω −(N −1)2 · · · とおくとき、 f = f0 f1 .. . C= , ω −(N −1)(N −1) C0 C1 .. . CN −1 fN −1 に対して (7) Cn = N −1 1 ∑ fj ω −nj N j=0 (n = 0, 1, · · · , N − 1) ⇔ C = Wf. W は正則で、W −1 の (j, n) 成分は ω (j−1)(n−1) である。言い換えると、 ω0 ω0 ω0 ··· ω0 0 ω1 ω2 ··· ω N −1 ω 0 2 4 2(N −1) ω ω ω · · · ω W −1 = . .. .. .. .. ... . . . . 0 N −1 (N −1)2 (N −1)(N −1) ω ω ω ··· ω すなわち Cn = N −1 1 ∑ fj ω −nj N j=0 (n = 0, 1, · · · , N − 1) ⇔ fj = N −1 ∑ ω jn Cn (j = 0, . . . , N − 1). n=0 6 証明 前半の (7) は行列の積の定義からすぐ分かる。 以下、この証明の最後まで、行列の添字は 0 から始める (N − 1 までということになる) と いうルールで記述する。 1 W の (n, j) 成分は ω −nj である。 N この W に、(j, k) 成分が ω jk である行列 (ω jk ) を右からかけた行列の (n, k) 成分は { { N −1 N −1 ∑ 1 ∑ (k−n)j 1 −nj jk 1 N (k − n ≡ 0) 1 (k = n) = = δkn . ω ω = ω = N N k=0 N 0 (それ以外) 0 (それ以外) k=0 ( ) これは積が単位行列であることを示す。すなわち W −1 = ω jk . 余談 2.1 既に fj = N −1 ∑ cn ω nj であることは示してあるので、絶対収束を仮定すれば、和の順 n=0 序を交換して fj = N −1 ∑ ∑ cm ω mj = n=0 m≡n N −1 ∑ ∑ cm ω nj n=0 m≡n = N −1 ∑ ω nj n=0 ∑ cm = m≡n N −1 ∑ ω nj Cn n=0 と出来て、これから W −1 の成分 ω jn であると分かるが、W の性質は関数 f とは関係ないの で、上の証明の方が良いであろう。 注意 2.2 (ちょっと修正すると unitary 行列になる) U := (8) 1 ( −(n−1)(j−1) ) , U=√ ω N √ N W とおくと、 1 1 ( (j−1)(n−1) ) U −1 = √ W −1 = √ ω N N となる。ω = ω −1 に注意すると、U の Hermite 共役 U ∗ は 1 ( (j−1)(n−1) ) 1 ( −(j−1)(n−1) ) ∗ = U −1 . ω =√ ω U =√ N N すなわち U は unitary 行列である。 通常は Fourier 級数展開は ∫ 2π 1 cn = f (x)e−inx dx, 2π 0 f (x) = ∑ cn einx n∈Z と定義されるが、 1 cn = √ 2π ∫ f (x)e−inx dx, 0 { と定義して (これは正規直交系 2π √1 einx N 1 ∑ f (x) = √ cn einx 2π n∈Z } で展開したことになる)、それに基づいて離散 Fourier 係数を定めると、変換の行列として U が導かれる。 以上のように定義し直したい誘惑があるけれど、混乱する人が出て来ると思うのでやめてお く。次のように命題としてまとめておくことにする。 7 系 2.3 命題 2.1 の行列を W とするとき、U := √ N W は対称な unitary 行列である。 余談 2.2 (離散 Fourier 変換の応用上の強力さを別にしても、個人的に面白いと感じるところ) Fourier 級数展開 ∫ π ∑ 1 f (x)e−inx , f (x) = cn = cn einx 2π −π n∈Z と、Fourier 変換と反転公式 (Fourier 変換を逆 Fourier 変換すると元に戻る) ∫ ∞ ∫ ∞ 1 1 −ixξ b f (x)e dx, f (x) = f (ξ) = √ fb(ξ)eixξ dξ 2π −∞ 2π −∞ の対応について既に話してあるが、離散 Fourier 変換とその反転公式 (離散 Fourier 変換を逆 離散 Fourier 変換すると元に戻る) N −1 1 ∑ fj ω −nj , Cn = N j=0 fj = N −1 ∑ Cn ω nj n=0 も良く対応している。むしろ、Fourier 級数よりもバランスの良い変換になっていて (f は周 期関数で {cn } は無限数列であるが、{fj } と {Cn } は周期数列になる)、むしろ Fourier 変換 に似ているとも言える。 実は Fourier 変換、逆 Fourier 変換は、L2 (R) における unitary 変換というものになってい る (ますます似ていると感じる)。 ω n·0 ω n·1 ω n·2 .. . φn := n·(N −1) ω とおくと、 f= N −1 ∑ cn φ n n=0 これは C A N の直交系 {φn } による f の展開になっている。 Mathematica で離散 Fourier 変換 Mathematica の関数 Fourier[f ] は、f = (f0 , f1 , . . . , fN −1 ) に対して N −1 1 ∑ √ fn ω nj N n=0 (j = 0, 1, · · · , N − 1) 8 を計算する (これが Mathematica の離散 Fourier 変換の定義)。逆変換は InverseFourier[C ] で行なう。 可能な場合は高速 Fourier 変換を使って計算されるので、効率が良くなる (効率をあげたい ときは N の値に注意すべきである)。 この講義の離散 Fourier 変換の定義に一致する結果を得るには、次のようなオプションを指 定する。 Fourier[f,FourierParameters->{-1,-1}] B 離散 Fourier 変換の流儀 伊理 [1], [2] 大浦 [3] 参考文献 い り まさお [1] 伊理正夫:一般線形代数, 岩波書店 (2003), 伊理正夫, 線形代数 I, II, 岩波講座応用数学, 岩 波書店 (1993, 1994) の単行本化. い り まさお [2] 伊理正夫:線形代数汎論, 朝倉書店 (2009), 「一般線形代数」のリニューアル. [3] 大浦:FFT (高速フーリエ・コサイン・サイン変換) の概略と設計法, http://www.kurims. kyoto-u.ac.jp/~ooura/fftman/ (1997∼). 9
© Copyright 2024 ExpyDoc