パフォーマンス比較の続きとFFT実装の結論 [任意点数のFFT]
一通りやろうと思っていたFFTの実装を終わらせて、それぞれの効率を比較してみた。離散Fourier変換の計算はいろいろな規則性があってそれを上手く使う賢いアルゴリズムがいっぱいあって面白い。
今日は昨日の続きでNの大きな2のベキの場合の比較をする。
ひとつ、驚愕の結果が得られた。実は、いまだに信じられない。なにかの間違いじゃないか、という気がしてしょうがない。
パフォーマンス比較 [任意点数のFFT]
一昨日までで実装は一段落した。まったく最適化していないのでさくさくっ、とやってしまったが、筋道を整理するという意味ではこういうやり方の方が望ましい。
ということで、今回実装した生のままのアルゴリズムのパフォーマンスを比較してみる。
vDSPによる2の基数のFFTの実装 [任意点数のFFT]
定義式通りのDFTの実装 [任意点数のFFT]
クラスクラスタの具体クラスのまず一番最初、式通りのFourier変換を実装する。クラスクラスタの他のクラスのほとんどは抽象クラスではなくてこのクラスのサブクラスになる。結局やることは皆同じだし。
実装を始める [任意点数のFFT]
一通りアルゴリズムの整理ができてそれをどう割り振るかも一応決めた。
ということで実装を始めよう。ここまでくれば実装はするっ、とできる、はず。
ところで実装はもちろんObjective-Cでやる。
まあ、普通あまりこういった数値計算の、しかも効率を気にした実装をObjective-Cなんていう高水準の、ゆるい言語で実装するというのはないだろう。
でも、書いた式の思想というか意思(数式にはそういうものがあるというのはわかってもらえると思う)をそのまま書き下せるというのが一番望ましい、と言う意味でMathematicaが一番だけどObjective-Cはそれに次ぐ。僕にとって一番自然な実装方法。