ねこでじ(Nekodigi)

Nekodigi’s diary

学習中の気づきをまとめています。応援よろしくお願いします

【Processing】FFTをきちんと実装する。

成果物

f:id:Nekodigi:20201215163003g:plain
今まではFFTの仕組みがよく分かっておらず、見つけたものをそのまま使っていたのですが、WikipediaのCooley-Tukey-algorithmというFFTアルゴリズムが思いのほか分かりやすかったのでそれをもとに実装してみました。分かりやすさを重視したので速度は遅めですが、工夫すれば軽量化できます。

仕組み

複素数の計算が少々大変ですが、今回のアルゴリズムの中心部はこんなにもシンプルです。偶数部と奇数部に分けて計算し、組み合わせることで求めることができます。
gist.github.com
参考にしたサイト。
Cooley–Tukey FFT algorithm - Wikipedia
Wikipediaの疑似コードは少し癖があるので、こちらのコードを参考に作成しました。
github.com

コード

先ほどのメインのコードに複素数計算やMinimなどを追加したものです。マイク入力に反応して動きます。
Cooley_Tukey_FFTという名前で追加しています。
github.com