アセンブラでFFTを振るスクラッチの妄想を現実化
するための一歩。まずは簡単なところってことで
8ビット幅の平方根(16ビットデータから8ビット幅の
平方根を求める)を計算するマクロを組んでみる。
まずは以前作ったexcelシートをそのままアセンブリ言語
に落としていってみる。
とりあえずそれっぽく計算結果が得られたんだけど、
微妙に変なところとかあって、あれこれ微調整を
してみる…。まぁ、120クロック程度で計算できるように
出来たのでヨシヨシ。だいぶご都合主義の怪しいロジック
なんだけど、まぁ正確な数値が出てるみたいだからいいや。
それにしても、excelシートに作りこんだロジックで
不等号を結構いい加減に考えてたことに気づいた。
イコールが含まれるのか含まれないのかの点。
それと、二分法を愚直にロジックに落とすと
0の平方根って普通には出来ない(1以上とそれ以下で
分けて考えないとだめ)なんだけど、正の整数って
限定すれば、初期値の与え方次第で0もそのまま
計算できちゃうっぽいな。
一方、計算途中に使用するレジスタ類が8ビットだから、
どうしても65025(=0xff×0xff)以上の平方根は
うまく計算できないっぽい。ここは定数を見て
特殊ロジック対応にした方が速いな。
アセンブラにしても高級言語にしても、数学の計算式
どおりに行かないのがコンピュータの計算処理。
誤差とか閾値とか常に考えないと駄目なのよね。
あまり得意ではない分野。
まあ、そういうわけで平方根ができたので、次は
FFT本体部分の計算だな。これもマクロ化して
おきたい。
|