【文系向け】フーリエ変換とはざっくり何なのかを説明してみる
たまには仕事の話を、と思いこの記事を書いてみました。
私は仕事では音響信号処理を扱っています(一応)。
配属当初は、音って何、サンプリングレートって何?、周波数領域と時間領域?みたいにハテナがいっぱいでした。
そして特に分からなかったのが、【フーリエ変換】です。
この分野の一番の基礎になる、と言っても過言ではない気はしますが、難しい。
そして、理解しようにも理系の人向けの本や記事が多くて分かりにくかったので、
この記事では、文系の人に向けて、説明をしていきます。
なお、フーリエ変換は様々な分野で使われていますが、ここでは音を対象にしています。
シリーズに分けて載せていくつもりです。
※専門家ではないので、雰囲気を掴むために読んで頂けれたらと思います。
対象読者
・文系だけどフーリエ変換を知りたい人(稀有な気もする)
・ざっとフーリエ変換の雰囲気を掴みたい人
対象でない人
・理系の人でフーリエ変換について理解を深めたい人
用語の整理
色々と用語があって混乱しがちなので、まずは整理させてください。
フーリエ解析、フーリエ変換、高速フーリエ変換(FFT)、離散フーリエ変換(DFT)、逆離散フーリエ変換、逆フーリエ変換(IFT)、逆高速フーリエ変換(IFFT)…
それらの関係はこのようになっています。
ややこしいのが、「フーリエ変換」というときに、逆フーリエ変換も含むこともある、ということです。
ここでは、それを「広義のフーリエ変換」と呼ぶことにします。
後述しますが、フーリエ変換の逆が、逆フーリエ変換です。
以降でフーリエ変換について説明していきます。
ざっくりとフーリエ変換とは。
例え話で説明すると分かりやすい気がします。
ここにミックスジュースがあると仮定します。
そのミックスジュースに、「何が」「どのくらい」入っているのか計算できるものが、
フーリエ変換です。
逆に、逆フーリエ変換は、「何が」「どのくらい」の情報からミックスジュースを作る
といった感じです。
音におけるフーリエ変換
先ほどの例えを音に当てはめると、音という波のミックスジュースがあって、
その中に、「どの周波数」が、「どのくらい」入っているか、が分かる。
という感じです。
下の図は音を分析できるAuditionというソフトの画面です。
ここでは、400HzのSin波を表示しています(図左側)
右側で、左部分の波は「何Hzの波なのか」、「どのくらい(dBデシベル)」含まれているかが表されています。
(何で400Hz以外の部分も膨らんでいるのか、dBがマイナスの値なのか、はまた別の機会で。有限の計算、プログラムでの都合ですが。)
このように、フーリエ変換では、「音という波」に「どのような成分」が「どのくらい含まれているか」を明らかにすることができます。
ざっくりとフーリエ変換の仕組み
「近似」という考え方
さて、ではどうして、「どのような成分」「どのくらい含まれているのか」が分かってしまうのでしょうか。
簡単に言うと、音を「波」≒関数と見立てたときに、それを近似できる式があるから、です。
つまり、波という関数を「別の方法」で表すことができる、ということです。
(例えばy=ax+bという関数も、別の式で表現することができるのです)
(似たような考え方に、マクロリーン展開があります。)
この、「別の方法」で表すときに、「どのような成分」が「どのくらい含まれているのか」が分かるのです。
※プログラムとして扱う場合には近似です。無限にリソースを扱えるのであれば、同値の表現ができます。
「別の方法」とは?
別の方法、というのが三角関数です。
SinとかCosとかいうやつです。
つまり、ある関数の式を、三角関数を用いて表してみるということです。
なので、フーリエ変換は、「三角関数」で表すときに、「どのような成分」が「どのくらい含まれているのか」が分かると言えます。
それでは、どのように、「どのような成分」が「どのくらい含まれているのか」分かるのでしょうか。
それは、ごくシンプルに言うと、総当たり攻撃で、どの成分があって、どのくらいあるかを計算しているのです。
総当たりとは?
さすがに言葉だけでは分かりにくいので、式を出させてください。
フーリエ級数式
$$f(t)=a_0 + \sum_{n=1}^{ \infty }{ \displaystyle\left( a_n \cos \displaystyle\frac{2 \pi n}{T} t + b_n \sin \displaystyle\frac{2 \pi n}{T} t \right)} $$
この式は、波を、三角関数をもちいて表している式です。突然の数式すみません。
これをもっと分かりやすく展開して書くとこうなります。
$$f(t)=a_0 + a_1 \cos \displaystyle\frac{2 \pi 1}{T} t + b_1 \sin \displaystyle\frac{2 \pi 1}{T} t + a_2 \cos \displaystyle\frac{2 \pi 2}{T} t + $$
$$b_2 \sin \displaystyle\frac{2 \pi 2}{T} t + \cdots + $$
$$a_n \cos \displaystyle\frac{2 \pi n}{T} t + b_n \sin \displaystyle\frac{2 \pi n}{T} t $$
※nは∞
シグマをほどいてみました。
ここで言いたいことは、様々なsinとcosが無限に足し合わさっているということです。
この、様々なsinとcosが、対象の波に存在しているのかどうかを、総当たりしているのです。
それで総当たりとは?
総当たりを具体的に言うと、対象の波に様々なsinやcosが存在しているのかを1つ1つ積分していくということです。
総当たりして、その波に、sinなり、cosが存在しない場合には、0になります。
反対に、波が存在する場合には、何の波が、どのくらい存在するかが値となって、分かります。
例えば、$$ \sin \displaystyle\frac{2 \pi 2}{T} t $$はないので0,$$ \sin \displaystyle\frac{2 \pi 3}{T} t $$は存在していて大きさは2,
のような感じで分かります。
本当に理解するには?
回りくどすぎて分かりにくくなってしまったかもしれません…。
実際に理解するには、下記のようなトピックを理解する必要があります。
- 三角関数
- 定積分・不定積分
- 関数の四則演算(積とその定積分)
- 関数の直交
- 関数の合成
- フーリエ級数
- 複素数
- オイラーの公式
- 対数
- 微分
- ネイピア数
ざっとこのくらいでしょうか。
高校数学を積み上げていって理解できる、という感じです。
利用する、程度であればプログラムのライブラリーを使うだけなのですが。。
まとめ
フーリエ変換では三角関数で何がどのくらい含まれているのか分かります。
波を関数で近似してあげる、というアプローチで分かります。
数学を使わないと、回りくどくなってしまい、理解が逆に難しい(反省)
後日、数学を使いながら説明できればと思います。