高速フーリエ変換を自前で作りたい (2) - フーリエ変換

投稿日: 2021年 7月 27日

木瓜丸です。前回フーリエ級数展開について触れましたので、今回はフーリエ変換に触れたいと思います。

複素数型のフーリエ級数展開

前回導出したフーリエ級数展開の式を見てみます。

f(x)=a02+n=1(ancos(nx)+bnsin(nx))an=1πππf(x)cos(nx)dxbn=1πππf(x)sin(nx)dxf(x) = \frac{a_{0}}{2} + \sum_{n=1}^{\infty}(a_{n}cos(nx) + b_{n}sin(nx))\\ \\ a_{n} = \frac{1}{\pi} \int_{-\pi}^{\pi} f(x)cos(nx) dx\\ b_{n} = \frac{1}{\pi} \int_{-\pi}^{\pi} f(x)sin(nx) dx

この式のancos(nx)+bnsin(nx)a_{n}cos(nx) + b_{n}sin(nx)をじーっと見てると、複素数で表したくなってきました。やってみましょう。 オイラーの公式から、

eiθ=cosθ+isinθ(eiθ=cosθisinθ)e^{i\theta} = cos\theta + isin\theta\\ (\therefore e^{-i\theta} = cos\theta - isin\theta)

ですので、eiθ+eiθe^{i\theta} + e^{-i\theta}eiθeiθe^{i\theta} - e^{-i\theta}より、

eiθ+eiθ=2cosθi(eiθeiθ)=2sinθcosθ=eiθ+eiθ2sinθ=eiθeiθ2i\begin{array}{l} e^{i\theta} + e^{-i\theta} = 2cos\theta\\ i(e^{i\theta} - e^{-i\theta}) = -2sin\theta\\ \end{array}\\ \Longleftrightarrow \begin{array}{l} cos\theta = \frac{e^{i\theta} + e^{-i\theta}}{2}\\ sin\theta = \frac{e^{i\theta} - e^{-i\theta}}{2i} \end{array}

代入して、

f(x)=a02+n=1(ancos(nx)+bnsin(nx))=a02+n=1(aneinx+einx2+bneinxeinx2i)=a02+n=1(einx(anibn2)+einx(an+ibn2))=a02+n=1einx(anibn2)+n=1einx(an+ibn2)=n=cneinx\begin{align*} & f(x) = \frac{a_{0}}{2} + \sum_{n=1}^{\infty}(a_{n}cos(nx) + b_{n}sin(nx))\\ & = \frac{a_{0}}{2} + \sum_{n=1}^{\infty}(a_{n}\frac{e^{inx} + e^{-inx}}{2} + b_{n}\frac{e^{inx} - e^{-inx}}{2i})\\ & = \frac{a_{0}}{2} + \sum_{n=1}^{\infty}(e^{inx}(\frac{a_{n} - ib_{n}}{2}) + e^{-inx}(\frac{a_{n} + ib_{n}}{2}))\\ & = \frac{a_{0}}{2} + \sum_{n=1}^{\infty}e^{inx}(\frac{a_{n} - ib_{n}}{2}) + \sum_{n=-\infty}^{-1}e^{inx}(\frac{a_{n} + ib_{n}}{2})\\ & = \sum_{n=-\infty}^{\infty} c_{n}e^{inx} \end{align*}

この時、cnc_{n}がフーリエ係数となります。

(i).n=0の時、cn=a02(ii).n>0の時、cn=anibn2=12πππf(x)(cos(nx)+isin(nx))dx=12πππf(x)einxdx(iii).n<0の時、cn=an+ibn2=12πππf(x)(cos(nx)isin(nx))dx=12πππf(x)einxdx\begin{align*} & (i). n = 0の時、\\ & c_{n} = \frac{a_{0}}{2}\\ \\ & (ii). n > 0の時、\\ & c_{n} = \frac{a_{n} - ib_{n}}{2}\\ & = \frac{1}{2\pi} \int_{-\pi}^{\pi} f(x)(cos(nx) + isin(nx)) dx\\ & = \frac{1}{2\pi} \int_{-\pi}^{\pi} f(x)e^{-inx} dx\\ \\ & (iii). n < 0の時、\\ & c_{n} = \frac{a_{n} + ib_{n}}{2}\\ & = \frac{1}{2\pi} \int_{-\pi}^{\pi} f(x)(cos(nx) - isin(nx)) dx\\ & = \frac{1}{2\pi} \int_{-\pi}^{\pi} f(x)e^{-inx} dx\\ \end{align*}

フーリエ積分

さて、一旦フーリエ級数展開の元の式をもう一度見てみましょう。級数和で表されている部分を一部書き出してみます。

f(x)=a02+n=1(ancos(nx)+bnsin(nx))=a02+a0cos(x)+b0sin(x)+a1cos(2x)+b0sin(2x)+\begin{align*} & f(x) = \frac{a_{0}}{2} + \sum_{n=1}^{\infty}(a_{n}cos(nx) + b_{n}sin(nx))\\ & = \frac{a_{0}}{2} + a_{0}cos(x) + b_{0}sin(x) + a_{1}cos(2x) + b_{0}sin(2x) + \dots\\ \end{align*}

この式を見ると、分解する成分はxのn倍の三角関数だけですね。ですが、もっと細かい間隔で解析してみたい場合もあると思います。 では、どうするのかというと、周期を大きくしてやればいいです。 周期を調整するために三角関数の引数を変えてみましょう。sin(x)sin(x)cos(x)cos(x)の周期は2π2\piで、これを周期Tに変換してみます。Δω=πT\Delta\omega = \frac{\pi}{T}ωn=nΔω\omega_{n} = n\Delta\omegaとすると、

f(x)=a02+n=1(ancos(ωnx)+bnsin(ωnx))f(x) = \frac{a_{0}}{2} + \sum_{n=1}^{\infty}(a_{n}cos(\omega_{n} x) + b_{n}sin(\omega_{n} x))

この式のTを大きくする、つまりδω\delta\omegaを小さくしていくと、分解する成分が細かくなっていきます。そして、TT \rightarrow \inftyとしてあげると、この間隔は連続になります。 このとき、この総和は積分によって表すことができます。

f(x)=a02+n=1(ancos(ωnx)+bnsin(ωnx))=12TTTf(t)dt+Δωπn=1(cos(ωnx)TTf(t)cos(ωnt)dt+sin(ωnx)TTf(t)sin(ωnt)dt)TΔω0より1π0(f(u)(cos(ωu)cos(ωx)+sin(ωu)sin(ωx))du)dω=1π0(f(u)cos(ω(xu))du)dω\begin{align*} & f(x) = \frac{a_{0}}{2} + \sum_{n=1}^{\infty}(a_{n}cos(\omega_{n} x) + b_{n}sin(\omega_{n} x))\\ & = \frac{1}{2T}\int_{-T}^{T} f(t) dt + \frac{\Delta\omega}{\pi}\sum_{n=1}^{\infty}\left(cos(\omega_{n} x)\int_{-T}^{T} f(t)cos(\omega_{n}t) dt + sin(\omega_{n} x)\int_{-T}^{T} f(t)sin(\omega_{n} t) dt\right)\\ & T \rightarrow \infty \Longleftrightarrow \Delta\omega \rightarrow 0より\\ & \rightarrow \frac{1}{\pi}\int_{0}^{\infty}\left(\int_{-\infty}^{\infty} f(u)(cos(\omega u)cos(\omega x) + sin(\omega u)sin(\omega x)) du\right) d\omega\\ & = \frac{1}{\pi}\int_{0}^{\infty}\left(\int_{-\infty}^{\infty} f(u)cos(\omega (x - u)) du\right) d\omega\\ \end{align*}

この積分の式をフーリエ積分公式といいます。

複素数にしてみると次のようになります。

12π(f(u)eiω(xu)du)dω\frac{1}{2\pi}\int_{-\infty}^{\infty}\left(\int_{-\infty}^{\infty} f(u)e^{i\omega(x-u)} du\right) d\omega

フーリエ変換

待たせたな。

これまでは周期関数について扱うことを考えてきましたが、これを非周期関数にも適用したいです。そこで、フーリエ積分を応用し、非周期関数を「周期無限大の周期関数」とみなして展開してみます。積分公式の積分されている部分を取り出して、

F(ω)=12πf(x)eiωxdxF(\omega) = \frac{1}{\sqrt{2\pi}}\int_{-\infty}^{\infty}f(x)e^{-i\omega x}dx

と定義します。つまり、引数に周波数を取り、返り値として係数を返す関数になります。

まとめ

長くなってしまいましたが、

  • 前回扱ったフーリエ級数展開において、周期を広げることでより多くの周波数の大きさを解析できる。
  • 無限大の周期を取ることで、連続スペクトルを得ることができる。

といったイメージになるかと思います。これによって任意の非周期関数について解析を行うことができます。

さて、次回離散フーリエ変換について取り扱いたいと思います。

参考

© 2021 木瓜丸