フーリエ級数からフーリエ展開まで
参考:フーリエの冒険
音の正体
- 空気の振動
- 「あ~」と喉を振動させると、空気が圧縮され、薄くなったり濃くなったりする。この繰り返しの振動が鼓膜に伝わる
この空気の振動を解析するための手法が、FFT
音波は、同じ波の形が繰り返される
- このような繰り返しのある波のことを「周期的な波」といい、
- 波形が1回繰り返すのにかかる時間を「基本周期」という
- 基本周期が短いと、声は高く聞こえ(女性)、長いと低く聞こえる(男性)
- 声が大きい -> 波は縦に大きい
- 声が高い -> 波は横に小さい
同じ「あ~」という音でも、人によって高さが大きさが異なり、波形がもそれにともなって変わる
- 波から特徴を表したい
- フーリエ級数によって、波を数式で表す
- 波から特徴を表したい
フーリエ:フランスの物理学者
複雑な物を複雑なまま解釈しようとするのは難しいが、難しいものを簡単なものに分解できれば問題はより簡単になる
具体的には、三角関数を使って音波を分解する
例えば$\sin$波の場合、以下のように表される
$$ f(\theta)=\sin\theta $$
しかし、この場合では $f$が取る値の範囲が$1$と$-1$までに限定されてしまう そのため、色んな音の大きさに対応するために
$$ f(\theta)=\alpha \sin\theta $$
とし、$\alpha$で定数倍する
この$\alpha$を振幅という
振幅を考えることで、あらゆる振幅の単純な波を表現可能となった
しかし、これでは
$$ 2\sin\theta + 3\sin\theta = 5\sin\theta $$
のように、縦に引き伸ばせるだけで横方向には変化させられず、複雑な波は作れない
そこで、時間変化も考える
具体的には、角周波数$\omega$を導入し以下のように表現する
$$ f(t) = \alpha \sin\omega t $$
角周波数$\omega(=2\pi f)$は角速度(単位時間あたりに進める角度)を表しており、$t$と積を取ることで、$t$秒後の波の角度$\omega t$がわかる
ある波を考えてみる
- 周波数 1Hz 振幅 20
- 周波数 4Hz 振幅 5
- 周波数 10Hz 振幅 13
複雑な波は1.+2.+3.なので、
$$ f(t) = 20\sin2\pi 1t + 5\sin2\pi 4t + 13\sin2\pi 10t $$
と表される
したがって、$\sin$波の重ね合わせで表現される波は
$$ f(t) = \alpha_1\sin\omega_1t + \alpha_2\sin\omega_2t + \dots + \alpha_n\sin\omega_nt $$
となる
しかし、$\sin$波だけでは0からスタートする波しか表現できないため、$cos$波も同様に考える。
$$ f(t) = \alpha_1\cos\omega t + \beta_1\sin\omega t + \alpha_2\cos2\omega t + \beta_2\sin2\omega t + \dots + \alpha_n\cos n\omega t + \beta_n\sin n\omega t $$
$\sin$と$\cos$を利用することで、山の途中から始まっている波を表すことができた。
しかしまだ問題がある。
それはこれでは常に0を中心とした波しか表すことができない。
そこで全体にバイアスを掛けるための、$a_0$を導入する。
$$ f(t) = a_0 + \alpha_1\cos\omega t + \beta_1\sin\omega t + \alpha_2\cos2\omega t + \beta_2\sin2\omega t + \dots + \alpha_n\cos n\omega t + \beta_n\sin n\omega t $$
これにより、あらゆる複雑な波を単純な波に分解して数式で表すことができた
このような式をフーリエ級数式と呼ぶ
上式を簡単に書くと、
$$ f(t) = a_0 + \sum_{n=1}^{\infty}(a_n\cos n\omega t+b_n\sin n\omega t) $$
となる
ここで注目するのは$\alpha$と$\beta$の値 例えば、「あ」と「い」の違いを上式で表すためには、角周波数成分の重み成分$\alpha$と$\beta$を変える必要がある。言い換えれば、音の違いは$\alpha$と$\beta$にあると言える (重みという表現を使ったが、より簡単に言い換えると、$\alpha$と$\beta$は混合率みたいなもの)
さて、これまでの議論で、音の表現方法はわかったが、実際にどのようにして各値を求めていくのだろうか
$$ f(t) = a_0 + \sum_{n=1}^{\infty}(a_n\cos n\omega t+b_n\sin n\omega t) $$
やるべきことは、複雑な波$f(t)$から$a_0$や$\alpha_n$を取り出すことだ
ここで鍵となるのは、波というのは周期性を持つということだ。 0度から180度の$\sin$波を考えた時、正の成分と負の成分の面積はどちらも同じであるため、足し合わせると0になることがわかる
一方でバイアス成分である$a_0$は常に一定の値であるため、その面積は $a_0\times T$ であることがわかる
そのため、$a_0$は、$f(t)$の0から時刻$T$(一周期)の面積を求め、$T$で割ることで求まる
さて続いて$\alpha_n$を求めていく
$a_0$と同じように考えれば、$\alpha_n$の波だけを残してそれ以外の面積を0にしてしまえばよさそうとわかる
ここである波$\sin \theta$の面積が0になってしまう理由を思い出すと、波が周期性を持っておりプラスの面積とマイナスの面積が同じ広さであったためだった
つまり、プラスとマイナス同士が打ち消し合うのが0になる原因であり、そうならないように工夫すればよい。 そこに注目すると、$\sin \theta$に対して、同じ波$\sin \theta$を掛けてやれば、マイナス成分がプラス成分に変換できる、とわかる(マイナスの値にマイナスの値を掛けたら、必ずプラスになるよね)
したがって、N番目の周波数成分の振幅$\alpha_n$を取り出したいときは $f(t)$に対して、$\cos n\omega t$ を掛けで出てきた値(面積)に$2/T$を掛けることで、$\alpha_n$成分だけを取り出すことができる
($2/T$を掛けているのは、出てきた面積が 面積$=T/2 \times \alpha_n$だから。面積は山が横に並んだ様子をイメージしてもらえば良くて、山と山の間の面積は0だから、その隙間を埋めるために$1/2$していて、山は周期$T$だけ横に並んでいる)
$$ f(t)\times \cos n\omega t =a_0 \times \cos n\omega + \alpha_1 \cos \omega t \times \cos n\omega t + \beta_1 \sin \omega t \times \cos n\omega t + ... $$
とすると、$\alpha_n$以外の周波数成分の面積はすべて0になる
($\cos n\omega t$を掛けると、$\alpha_n \cos n\omega t$以外の面積が0になるのは、一見不思議だが、$\cos \omega$が基本周波数で、$\cos n\omega t$がその定数倍であることを考えると、$\cos n\omega t$とそれ以外の$\cos m \omega t$は(n-m)分、波がズレているので、やはり波同士がお互いに打ち消し合うのだ。$a_0$に関しては、そもそも定数だから、$\cos n\omega t$そのものの面積をとてるのと同じだよね)
これらを数式でよりシンプルに表現すると
$$ a_0 =\frac{1}{T} \int_{0}^{T} f(t)dt $$
$$ \alpha_n = \frac{2}{T}\int_{0}^{T} f(t)\cos n\omega t dt $$
$$ \beta_n = \frac{2}{T}\int_{0}^{T} f(t)\sin n\omega tdt $$
と書くことができ、これらのことをフーリエ展開と呼ぶ