バックナンバーはこちら。
https://www.simulationroom999.com/blog/stock-predict-matlabpython-backnumber/
はじめに
前回まででMATLABとPython(Numpy)によるフーリエ変換、逆フーリエ変換for文無し版を作成。
よくよく考えたらMATLABの方もコードを起こしただけで動作確認をしていない。
というわけで今回両方のコードの動作を見て見る。
登場人物
博識フクロウのフクさん
イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1
エンジニア歴8年の太郎くん
イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1
よくよく考えると?
Python(Numpy)によるフーリエ変換、逆フーリエ変換for文無し版の動作確認・・・。
って思ってたんだけど、そもそもMATLABの方って動作確認してなくない?!
うむ。
すっかり忘れてた。
私の方で簡単な動確はしたんで、それで満足してしまってた感じだな。
まぁ、あるあるではある。
というわけで、今回で両方の動作をサクっと確認してしまおう。
もう最初から最大周波数の設定は20Hzで良いよね。
それでOKだ。
まずはMATLAB
じゃ、MATLABコードの方の実行結果を貼るよー。
うん。
挙動としてはOK。
そしてPython(Numpy)
次はPython(Numpy)。
こっちもOK。
感想とか
しかし、1行コードでフーリエ変換、逆フーリエ変換が実現できてしまうってのはすごいことだよね。
まぁ行列の演算なので、
見えないところで大量の演算はしまくってるとは思うけどね。
これでもやっぱりFFTの方が早いの?
FFTの方が早いだろうね。
そもそもの演算回数が大幅に違う。
今回はサンプリングデータ数がそれほど多くないので差は感じないけどね。
ということは基本はFFT、IFFTを使うのが正解。
今回のように妙な事をやろうと思ったらやむを得ず演算速度を犠牲にして精度を上げる。
って感じか。
まぁまじめに検討はしてないけど、
今回の演算ももしかしたらバタフライ演算が適用できる可能性はあるけどね。
そうなの?
回転因子で表現し直して、最適化する手段を検討すれば、なにかしらあるかもしれない。
って程度だけどね。
もしかしたら、すでに世の中にそういうのは有るのかもしれないね。
それだとありがたいな。
まとめ
まとめだよ。
- MATLABとPython(Numpy)のフーリエ変換、逆フーリエ変換for文無し版の動作確認を実施。
- 共に問題無く動作。
- FFTと比べると演算回数の差で速度を犠牲にはしている。
- 回転因子を書き出して演算構造を見れば高速化は可能かもしれないが、ここではそこまでは頑張らない。
バックナンバーはこちら。
コメント