「PIC AVR 工作室」サイトの日記的なブログです。
サイトに挙げなかった他愛ないことを日記的に書き残してます。
PIC AVR 工作室 ブログ



アセンブラフルスクラッチの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程度。ビットリバーサルと平方和の平方根を
付け足して、ちゃんと計算どおり動くようにガンバロウ。


そしたら、その後は極力汎用的に使えるように改良だな。



コメント ( 0 )