高速フーリエ変換 E.ORAN 宮川・今井 訳 科学技術出版1978
図書館にあったので借りた。別のFFTの本でも参考文献として上げられていたのである。40年ぐらい昔の本なのである。オレが生まれた頃である。ウソである。
FORTRANでのコード例があったのでC言語に書き直して見た。すると暴走したのである。VScodeで書いて実行したら暴走したのでVisual Studio 2017 Communityでデバッグだーーーーー。
いや、しかし、この道はいつか来た道!! C言語とFortranでは配列の始まる数字が違うのであった。C言語は0から始まる。データが16あると0から15までがindexである。Fortranは1から16までである。そこで不用意に配列宣言をxreal[16]と書いてから アクセスする際にxreal[16]とやちまってしまう。Cでは0から15までである。16はレンジ外である。そして、out of rangeのエラーにならず、暴走するのである。なむ。
まあしかし、たのしー!!
蛇足だがC言語のFFTのプログラム、本に載っている例題ね。そういうの2つとPython + Scipyのfft()とを比較したら圧倒的にPython + Scipy fftが速いの。教科書の例題はFFTアルゴリズムの解説が目的であって高速化・最適化は意図していないと書いてあったけど。
Python + Scipyのfft()は高速である。。。。という場合に比較を本の例題ではなくマシなライブラリのfftと比較すべし、ではある。
やっぱ、出来の良いプログラムがモジュール化に採用されるんだろねぇ、テキトー。
ちなみにPythonだけの記述でfft書いて動かしたら、それなりに遅いでした。
というわけで、FFTのアルゴリズムの理解は進んだとする。数式で∑記号をたくさん書いてシグナルフローを N = 128 ぐらいまで書けるか・・・書けんわい。
もう性能の良いライブラリを使う事にしますよってに(´・ω・`)
古い本でFFTアルゴリズムの解説を見ると1980年代後半の話でパソコンがPC-286とかPC-98とかでクロックが10MHzとか。しんじらんなーーーーい!! いや、オレもPC-286どころが、松田聖子がCMやってたソニーのヒットビットとか、シャープのX-1とか持っていたけどさ。すぐ埃かぶったけど。。。。。(笑)