2019年11月05日

FFTというものがありましてね・・・ふーーん

高速フーリエ変換 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とか持っていたけどさ。すぐ埃かぶったけど。。。。。(笑)

posted by toinohni at 13:09| 東京 ☀| Comment(0) | ソフト系雑学 | このブログの読者になる | 更新情報をチェックする