フーリエ変換 メモ1 -フーリエ変換の発想と離散フーリエ変換-

 

音に関するプログラムをいろいろ組んでみたので忘れないうちにここにメモして置きます
※正しいとは限りません御了承ください

フーリエ変換について
第一にフーリエ変換とは与えられた関数の構成要素を調べる数式です
定義式は

f:id:akikanR:20170605203139p:plain

となります
π:円周率
i :虚数

しかしこれをコンピュータ上で行う場合∞というのは扱いに困りますし、これだけ与えられても具体的にどう取り扱っていいのか分かりませんよね?少なくとも私は分かりませんでした。
よって以下に私が分かればいいや程度で説明していきます。

 

【1】そもそもフーリエ変換の基本的な発想は?
(まとめだけ読んでもたぶん差し支えありません)
そもそもの始まりは「あらゆる関数はsin波とcos波の足し合わせで表現できる」ということをフーリエさんが発見したことでした(流れは違うかもしれませんが基本的なアイディアはこれです)sin波とcos波の足し合わせで表現する関数をフーリエ級数と呼びます。
フーリエさんの「あらゆる関数はsin波とcos波の足し合わせで表現できる」という考え、
実際にはあらゆる関数に適応させることは出来ませんでした
フーリエさんの考えを適応するためには条件があったのです
その条件はディリクレの条件と呼ばれています
といってもディリクレの条件はゆるく、殆どの関数が条件を満たします。唯一注意する必要のありそうな条件は
「周期的な関数でなくてはならない」というものです
周期的といっても大抵の関数は周期的と呼ぶには些か不規則です
ですがこう見るとどうでしょう

ここに全く周期的でない波形があります

f:id:akikanR:20170605203311p:plain

 

上の波形が周期的に繰り返される関数だと考えると

f:id:akikanR:20170605203354p:plain

ね?周期的でしょう?

 

非周期的な関数でも同じものが後に繰り返されていると考えると良いです
こうして考えるとあらゆる関数は周期的であるということができます
<まとめ>
・ディリクレの条件を満たすあらゆる関数はsin波とcos波での足し合わせで表現できる
・ディリクレの条件は非常にゆるい

 

 

【2】コンピュータ上でのフーリエ変換の利用
さて、前項に「ディリクレの条件を満たすあらゆる関数はsin波とcos波での足し合わせで表現できる」 と書いているのに最初に提示されたフーリエ変換にcosもsinもないじゃないか!と思う人もいるでしょう
フーリエ変換の∞の扱いどうするんだ!という疑問と共に答えていきます
まずコンピュータ上では∞を厳密に扱えないため、離散フーリエ変換(略称DFT)を扱います

以下が定義式です

f:id:akikanR:20170605203516p:plain

N:任意の整数(周期をいれる変数)
i :虚数
π:円周率


というわけで∞は消えました
Σの意味はいいですね?
xが0からN-1までxの値を変化させながらΣの中の物を足していくという意味です
このままsin波とcos波を出していきます

ここにオイラーの公式があります

f:id:akikanR:20170605203601p:plain

θ:角度
i : 虚数
これを離散フーリエ変換の式に入れると

f:id:akikanR:20170605203632p:plain

となりsinとcosが出てきました
離散フーリエ変換の定義式がsin波とcos波の足し合わせで表現されていることが理解できましたか?
f(x)はいいの?という声もあるかもしれませんがsinとcosの係数なので問題ないです

虚数を扱えるプログラミング言語では離散フーリエ変換の定義式をそのまま使えば問題はありません
しかし扱えないプログラミング言語の場合は最後に示したフーリエ変換のsinとcosの状態から実数と虚数で分けて計算しなくてはいけません

プログラムでの具体的な使い方は長くなってきたのでまた今度

 

#初稿2015年4月1日