相変わらずAVRのアセンブラでFFTフルスクラッチの
続きを黙々と。
そこそこソースが書けてきたので、出来た範囲だけで
シミュレーション掛けてみる。入力データ的には
シミュレーション画面で適当なノコギリ波を模したもの
を入れてみる。
一通り実行してみると…
なんかデータが出力されたのは見れた…けど、入って
いる場所がなんか変だなぁ…
…あれだ。ビットリバーサルがまだ未実装だからだ。
そりゃそうだな。
ってことで引き続きビットリバーサル処理を練ってみる。
ロジックでうまいことやっちゃおうと思ったんだけど、
意外に処理時間食いそうなので、こういうときは
手っ取り早く定数テーブル化しちゃったほうが賢い。
処理時間も速い。
ってことで例によって99BASIC。定数テーブルをサクッと。
で、具体的な処理方法をちょっと考えてみて、64要素なら
64回ループすりゃいんじゃん…って思ったんだけど
そうするとおかしくなりそう。2つの要素を入れ替えて
64要素順に舐めると、「ひっくり返し」てさらに「ひっくり返し」
なおすから、元に戻っちゃう。
2進数のビット反転前後の値を眺めれば、単に頭から半分
(0~31)を舐めて、そいつらをビット入れ替えすればいい
はずだな。ロジック的には単純で大丈夫。
そっちが出来たら、その次は最初に適当に組んでた
バタフライ演算の部分。負数を無視して作ってあるので
これを2の補数表示で計算できるように変更しないとな。
そこまで出来ればコーディング終了は近い。
そういえば、平方和の平方根(スカラー値)を求める処理
は、1回あたり120クロックほどかかるので、正の周波数
だけ考えても32要素必要。スカラー値にする時間だけでも
単純計算で4000クロックほど要するんだなぁ…。
なんだか馬鹿らしい時間な気がしてしまう…
当初10000クロックちょっとで64点FFTが1回計算できそうだ
と思ってたんだけど、仕上がってきてみたら20000クロック
近い値になってしまいそう。もうちょっと速いと良かった
んだけどな。
|