こんにちは,学生エンジニアの迫佑樹(@yuki_99_s)です.
工学系の大学生なら絶対に触れるはずのフーリエ変換ですが,「イマイチなにをしているのかよくわからずに終わってしまった」という方も多いのではないでしょうか?
難しいのに加えて,教科書もちょっと不親切で,いきなり論理が飛躍したりするんですよね(僕の理解力の問題かもしれませんが)
僕がフーリエ変換について学んだ時に,以下のような疑問を抱きました.
出来る限り難しい式変形は使わずにこれらの疑問を解決できるようにフーリエ変換についてまとめてみました!!
多少厳密性を欠いても,とりあえず理解するという目的の記事なので,これを読んだあとに教科書と付き合わせてみることをおすすめします.
それでは,いってみましょう!! 今回の記事は結構本気で書きました.
目次
フーリエ変換の公式
今回のゴールを確認するべく,まずはフーリエ変換及びフーリエ逆変換の公式を見てみましょう.
一見するとすごく複雑な形をしていて,とりあえず暗記に走ってしまいたい気持ちもわかります.
数式のままだとなんか嫌になっちゃう人も多いと思うので,1回日本語で書いてみましょう.
簡単に言ってしまうと,時間tの関数(信号)になんかかけたり積分したりって処理をすることで角周波数ωの関数に変換しているということになります.
フーリエ変換って結局何なの?
さて,フーリエ変換は「時間tの関数から角周波数ωの関数への変換」であることがわかりました.
次に出てくるのが以下の疑問です.
大学生
結局のところ,フーリエ変換ってなにをしてるの?
例えば,こんな複雑な関数があったとします.
後ほど詳しく説明しますが,実はこの複雑な見た目の関数も,私達が慣れ親しんだsin関数を足し合わせることで出来ています
高校生くらいに,位相のずれを考えない場合,sin関数の概形を決めるためには振幅と角周波数が分かればいいというのを習いましたよね?
つまり,キーとなってくるのは「振幅と角周波数」なので,その2つを抜き出してみましょう.
さらに,抜き出しただけはなく可視化してみるために,「振幅を縦軸,角周波数を横軸に取ったグラフ」を書いてみます.
このグラフのように,分解した成分を大小でまとめたものをスペクトルというので覚えておいてください.
そして,この分解した状態を求めて成分の大小関係を求めることを,フーリエ変換というんです
イメージ的にはそこまで難しいものではないはずです.
フーリエ変換が実際の所なにをやっているかというのはすごく大切なので,一旦まとめてみましょう.
「よくわからないものがごちゃごちゃに集まって複雑な波形になっているものを,単純なsin波の和で表して扱いやすくしよう!!」というイメージを理解してもらえたら良いと思います.
「振幅を縦軸,角周波数を横軸に取ったグラフ」を書きましたが,これは序盤で述べた通り,角周波数の関数になっていますよね.
「複雑な関数をただのsin関数の重ね合わせに変形してしまえば,微分積分も楽だし,解析も簡単になって嬉しいよね」という感じ
※すべての周期関数がこのように分解できるわけではありませんが,とりあえずはこの理解でOKだと思います.詳しく知りたい方は教科書を読んでみてください
フーリエ級数展開
今回扱うフーリエ変換について考える前に,フーリエ級数展開について理解する必要があります.
実は,フーリエ級数展開も,フーリエ変換も概念的には同じで,違いは「元の関数が周期関数か非周期関数か」と言うだけなんです
フーリエ変換とフーリエ級数展開は親戚関係にあるので,どちらも簡単な三角関数の和で表していくというイメージ自体は全く変わりません
繰り返しのないぐちゃぐちゃな形の非周期関数を扱うフーリエ解析より,規則正しい周期を持った周期関数を扱うフーリエ級数展開のほうが簡単なので,まずはフーリエ級数展開を見ていきましょう.
なぜ三角関数の和で表せる?
先ほど,「複雑な関数も私達が慣れ親しんだsin関数を足し合わせて出来ています」と言いました.
そして,ここからその前提をもとに話が進もうとしています.
しかし,ある疑問を抱きはしなかったでしょうか?
大学生
実は,今まで習った数学でも,複雑なものを簡単なものの和で組み合わせるという作業はどこかで経験したはずです
そう,その名も「ベクトル」.
ということで,ベクトルと同様の考え方を使いながら,「関数を三角関数の和で表せる理由」について考えてみたいと思います.
まずは,2次元のベクトルを直交している2つのベクトルの和で表すことを考えてみます.
先程だした例では,関数を三角関数の和で表すことが出来ました.また,ベクトルも,直交している2つのベクトルの和で表すことが出来ました.
ここまでくれば,三角関数って直交しているベクトル的な性質を持ってるんじゃないか…?と考えるのが自然ですね.
関数とベクトルはそっくり
実は,関数とベクトルってそっくりさんなんです.
例えば,ベクトルの和と関数の和を見てみましょう.
どっちも,同じ成分同士を足しているので,同じと考えて良さそうですね.
関数とベクトルがに似たような性質をもっているということは,「関数でも内積を考えられるんじゃないか」と予想が立ちます
こちら,シグマ記号を使って表してあげると,このような感じになります.
ただし,実はまだ不十分なところがあるんですね.
内積を取る時,f(x)のxの値として整数のみを取りましたが,もちろんxは整数だけではありません.
ということで,これを整数から実数値に拡張するため,今シグマ記号になっているところを積分記号に直してあげればいいわけです.
このように,ベクトル的に考えてあげることによって,関数の内積を定義することが出来ました
2つの関数の内積を考えたい場合,「2つの関数を掛けて積分すれば良い」ということになります.
ここで,最初の疑問に立ち返ってみましょう.
「関数が,三角関数の和で表せる」→「ベクトルも,直交しているベクトルの和で表せる」→「もしかして,三角関数って直交しているベクトルみたいな性質がある?」という話でした.
ここで,関数に対して内積という演算を定義したので,実際に三角関数が直交している関係にあるのかを見てみましょう.
ただ,その前に,無限大が積分の中に入っていると計算がめんどくさいので,三角関数の周期性を利用して定積分に書き直してみます.
ここまでくれば,積分計算が可能なはずです.積和の公式を使って変形した後,定積分を実行してみます.
今回,sinxとsin2xを例にしましたが,一般化してみるとこのようになります.
そう,角周波数が異なる三角関数同士は直交しているんです
ベクトルのようにイメージは出来ませんが,内積が0となり,確かに直交していますね.
今回はsinを例にしましたが,cosも同様に直交しています.
どんな2次元ベクトルでも,直交している2つのベクトルを使って表せたのと同じように,関数も直交している三角関数たちを使って表せるということがわかっていただけたでしょうか.
三角関数が直交しているベクトル的な性質を持っているため,関数が三角関数の和で表せるのは考えてみると当たり前なことなんですね.
指数を使ってシンプルに
さて,ベクトルと同様に考えることで,関数をsinやcosの和で表すことができるということを理解していただけたと思います.
先ほどはかなり羅列していましたが,シグマ記号を使って表すとこのようになりますね.
なんかsinやらcosやらがいっぱい出てきてごちゃごちゃしているので,オイラーの公式を使ってまとめてあげましょう.
オイラーの公式より,sinとcosは指数関数を使ってこのように表せます.
先ほどのフーリエ級数展開した式を,指数関数の形に直してみましょう.
一見すると複雑さが増したような気がしますが,実は変形すると凄くシンプルな形になるんです.
とりあえず,同類項をまとめてみましょう.
ここで,ちょっとした思考の転換です.
(e^{-i\omega t})において,(\omega)を1から∞まで変化させて足し合わせるというのは,(e^{i\omega t})において,(\omega)を-∞から-1まで変化させて足し合わせることと同じなんです
そして,(e^0)が1であることを利用して,(a_0)も,(a_0e^{i0t})と書き直すと,一気にスッキリした形に変形することが出来ます.
再びフーリエ変換とは
さて,ここまで考えたところで,最初にみた「フーリエ変換とはなにか」を再確認してみましょう.
フーリエ変換とは,横軸に角周波数,縦軸に振幅をとるグラフを得ることでした.
この,「横軸に角周波数,縦軸に振幅をとるグラフ」というのは,どういうことかを考えてみます.
実はすでにかなりいいところまで来ていて,先ほど「関数は三角関数の和で表し,さらに変形して指数関数を使って表せる」というところまで理解しました
関数を指数関数の和で表した時,その指数関数たちの係数部分が振幅を表しています.
ちなみに,この指数関数たちの係数のことを,フーリエ係数と呼ぶので覚えておいてください.
このフーリエ係数が振幅を表しているということは,このフーリエ係数さえ求められれば,フーリエ変換は完了したも同然なわけです.
再びベクトルへ
では,関数を指数関数の和で表した時の係数部分を求めていきたいのですが,まずはイメージしやすいベクトルで考えてみましょう.
例えば,ベクトルの場合,係数を求めるのはすごく簡単ですね.
ただ,この「係数を求める」という処理,ちゃんと計算した場合,内積を取っているんです
ちょっと内積を使ってαとβを求めてあげましょう.
このように係数を求めるには内積を使えばいいということがわかりました.
つまり,フーリエ係数も,関数の内積を使って求めることが出来るというわけです.
複素関数の内積って?
ちょっと複雑になってきたので,一旦整理しましょう.
フーリエ変換とは,横軸に周波数,縦軸に振幅をとったグラフを求めることでした.
そして,振幅とは,フーリエ係数のことで,フーリエ係数を求めるためには関数の内積を使えばいいということがわかりました.
さて,ここで先ほどのように,関数同士の内積を取ってあげたいのですが,一旦待ってください.
ベクトルのときもそうでしたが,自分自身と内積を取ると必ず正になるというのを覚えているでしょうか?
複素数がベクトルの要素に含まれている場合,ちょっとおかしなことになってしまいます.
そう,自分自身都の内積が負になってしまうんですね.
そこで,内積の定義を,共役な複素数で内積計算を行うと決めてあげるんです.
実数の時は,共役の複素数をとっても全く変わらないので,これで実数の内積も複素数の内積もうまく定義することが出来るんです
高校生の時ももこういうことがありましたよね.
そう,複素数の2乗を計算する時,今回と同じように共役な複素数をかけてあげたと思います.
フーリエ係数を求める
さて,無事に内積計算を複素数へ拡張できたので,本題に進みます.
(e^{i\omega t})の共役の複素数が(e^{-i\omega t})になるというのは多分大丈夫だと思いますが,一旦確認しておきましょう.
ここで,先ほど拡張した複素数の内積の定義より,共役な複素数を取って内積計算をしてみます.
これで,無事にフーリエ係数を求めることが出来ました!!!!
このフーリエ係数は,角周波数が決まれば一意に決まる関数となっているので,添字ではなく関数として書くことも出来ますよね.
周期関数以外でも扱えるようにする
ここまで来たらあとは最後,一息.(ここの変形はかなり雑なので,詳しく知りたい方は是非教科書をどうぞ)
今導き出した式の定積分の範囲は,-πからπとなっています.
これってなぜだったでしょうか?そうです.-∞から∞まで積分するのがめんどくさかったので三角関数の周期性に注目して,-πからπにしたのでした
つまり,周期性がない関数を扱いたい場合は,しっかり-∞から∞まで積分してあげれば良いんですね
これで,フーリエ変換の公式を導き出すことが出来ました!! 長い道のりでした.
最後に
ところどころ怪しい式変形もあったかもしれませんが,基本的な考え方はこんな感じなはずです.
出来る限り小難しい数式は使わないようにして,高校数学が分かれば理解できる程度のレベルにしておきました.
はじめはなにやらよくわからなかった公式の意味も,ベクトルと照らし合わせてイメージしながら学んでいくことでなんとなく理解できたのではないでしょうか?
電気回路,音響,画像処理,制御工学などいろんなところで出てくるので,学んでおいて損はないはず.お疲れ様でした!