Processingでフーリエ変換〜導入編〜


現代のあらゆる技術を支えているフーリエ変換について、できる限りわかりやすく解説します。

H﨑  2018/9/8  フーリエ変換

Drawing

はじめに

物理部部長のH崎です。音展の二週間前を切って午前2時とかに書いているので、誤字脱字があるかもしれませんが、大目にみてくださいね。

皆さんは と聞いて何を思い浮かべますか?海岸に打ち寄せる波や、湖面に石を投げてできる波紋などでしょうか。これらは目に見える波で、山と谷が周期的に繰り返されているのがよくわかります。しかし、波には目に見えないものもたくさん存在します。

例えば「音波」は空気中を伝わって、私たちは様々な音を耳で聞くことができます。他にもで「電波」はテレビやラジオ、スマホの通信にも使われています。

現代社会は「波」によって支えられているといっても過言ではありません。この波を表現、制御するためのツールがフーリエ変換です。ほとんどの方にとって馴染みのない理論ではありますが、実は至る所にフーリエ変換は応用されています。この記事を通じて、少しでも多くの方に興味を持っていただければ幸いです。

フーリエ変換とは?

1800年頃にフーリエという数学者が驚くべき内容の論文を発表しました。

Drawing

いきなりsinとかcosとかなんやねん!ってなった方を放って話を進めるわけにはいきませんので、一応説明しておきます。

Drawing

sinやcosというのは半径1の円周(単位円)上を回る時のそれぞれ縦方向の長さ、横方向の長さを表します。画像を見てわかるように、とても綺麗な形をした波形です。つまり、この綺麗な波形を任意で組み合わせると、どんな複雑な波形であっても表現できるといったのです。

実際にやってみよう

ものは試し。フーリエのおっちゃんが言ったことが本当なのか例を挙げて確かめてみましょう。

Drawing

上の画像のように複雑な形をした黒色の波形があったとします。周期はありますが、先ほどの波とは全く違って階段状の波形をしています。

本当に、この波形もsinやcos波を足し合わせるだけで作ることができるのでしょうか。答えは、、、もちろんYES!!実際にフーリエ変換を使うと、「どの周期のsin、cosをどれくらいの大きさで混ぜてあるか」を計算できます。

Drawing

計算すると、上の画像のように$2\sin{x}$(赤色、周波数1)、$-\sin{2x}$(緑色、周波数2)、$\frac{2}{3}\sin{3x}$(黄色、周波数3)、$-\frac{1}{2}\sin{4x}$(青、周波数4)の波形を足し合わせると黒色の波形を作ることができます。

「おい嘘をつくな、cosがないじゃないか!!」 と思った方。鋭い!実は黒色の波形のような奇関数(原点で点対称になる関数)はsinのみで表すことができまるので、cosは入っていません。

結局は 「波形を周波数ごとに分解する」 ということです。フーリエ変換は波形の中に含まれている成分を周波数ごとに調べることができるツールと表現することもできると思います。

発展(読み飛ばしても良い)

先ほど「ほぼ直線」としたのは、完全に直線を表すことは不可能であるためです。フーリエは「どんな関数もsinとcosの和で表される」と主張しましたが、後にそれは間違いであるということがディレクレによって証明されました。

その条件とは 「区分的に滑らかで、絶対可積分である」 ということです。下の図を見ると、0,1.0,2.0の部分で不連続(繋がっていない)であることがわかります。これは区分的に滑らかという条件に反し、またその不連続点でギブスの現象と呼ばれる出っ張りがどうしてもできてしまうことが数学的に証明されています。

Drawing

ブラウザバックはちょっと待った!!まだまだお話は続きます。


結局、なんの役に立つの?

そう思った皆さん。安心してください。役に立たないならそもそも紹介なんてしません!実はあなたの身近なところにフーリエ変換が潜んでいます。考えるだけで恐ろしいですね。

Drawing

このような画面に見覚えはありませんか?音楽をかけたときにバーがひょこひょこと伸びたり縮んだりするやつです。スペクトルアナライザ と言います。

これは横軸に周波数、縦軸にその周波数の強さをとって、音声の中にどんな周波数の音がどれくらい含まれているかを表します。右側のバーが大きくなれば、高周波が多い、といった具合です。

仕組みは簡単。音声の波形をフーリエ変換して周波数ごとに分解し、それをグラフの形で表現しています。(本当はFFTという複雑な方式を使いますが、ここでは割愛)

また、スマホで聞く音楽は、音質を保ったまま、データサイズを小さくすること がとても重要です。そこで使われているのがまさにフーリエ変換なのです。ここではPCMとMP3(44.1kHz)を例に挙げたいと思います。

そもそも録音という作業は一秒間に44100回(多い!)という間隔で電圧を読み取り、それを順に記録するというものです。これを サンプリング と言います。

Drawing

このデータをそのまま記録するのがPCM方式です。高音質ではありますが、圧縮しないためどうしてもサイズが大きくなります。5分の音楽だと、42MBもの容量を使ってしまいます。ちなみにCDはこの方式を採用していて、最大で約700MBのデータを記録できます。700/42≒16。だからCDには16曲ぐらいしか入っていないんですね。

そしてPCMの欠点を解消したのがMP3と呼ばれる方式です。PCMのように波形をそのまま記録するのではなく、波形を分割してフーリエ変換することで周波数ごとの成分を調べ、人間には聞こえづらい高周波をカットしてデータ量を減らし、仕上げにハフマン符号化などを行うことで、音質を保ちつつデータ量を1/10に抑えています。つまり、圧縮した音源をCDに入れれば、一枚に160曲収めることも可能なんですね。なんか損した気分。

まとめ

いやー調べれば調べるほど奥が深い!音楽を例にフーリエ変換の有用性を説明してきましたが、画像の圧縮などにも使われているそうです。「画像なんて、もはや波なのか?」とも思いますが、、、今回の導入編は大学数学の範囲であるフーリエ変換をできるだけ数式なしで説明してきましたが、次回の本編では実際にフーリエ変換を使って作ったプログラムの解説をしていきたいと思います。少々難しい内容なので、とっつきにくいかと思いますが、チャレンジしてみましょう!