アセンブラフルスクラッチのFFT。
とりあえず64点を6段階でFFT掛けるところまで
組めたので、シミュレーションかけてクロック数を
概算してみることに。まだビットリバーサルも
平方和の平方根(実数、虚数をスカラー値に変換)する
ところまでは出来てないんだけど、そっちはそれほど
処理クロック要らないだろうから概算レベル。
イザ!
1回の64点FFTがおよそ14000クロック。まだロジックの
正確さも未確認、小数点位置も誤ったままなので、
微調整したらもうちょっと長くなるかもしれないけど、
桁違いにはならないはず。若干の上乗せだろうと。
仕上がりでざっくり16000クロックと考えてみる。
すると、16Mhzで16000クロックなら毎秒1000回。
8チャンネルを並行的に処理するとなると、1000÷8
で毎秒125回といったところ。遅延時間は10m秒以下
かな。まぁいい感じ。
考え違いをしていなければ、そこそこのスペックで
処理できる目処たった感。64点FFTに特化したロジック
ってことでそこそこ効率化を練りこんでみた結果。
高級言語だとさすがにここまでは行かないはず。
そういえば、FFTの各段階でSRAMを別々に用意
しないといけないかも…と思ってたんだけど、単に
洗い換えで充分だった。データ量を最小化するなら
64点×(実数+虚数)の128バイトだけで済んじゃう。
ビットリバーサルや平方和の平方根を求めるのに
同じSRAMを流用しちゃえばそれ以上のメモリは不要。
意外に食わないのねぇ。
(レジスタはかなりアクロバティックだけど)
プログラムメモリも、定数テーブル+ロジックで
現状1KB程度。ビットリバーサルと平方和の平方根を
付け足して、ちゃんと計算どおり動くようにガンバロウ。
そしたら、その後は極力汎用的に使えるように改良だな。
|