今日は結局ゲルマニウムラジオじゃなくてアセンブラ
のFFTを進めることに。
モロモロ細かいところを微修正して、とりあえず表計算
ソフトで出した結果とモロモロの波形で一致するところ
まで確認ok。ひと段落。
バタフライ演算、それを呼び出す64点FFTのメイン処理、
ビットリバーサル処理、平方和の平方根(スカラー化)の
処理全部含めてクロック数をシミュレータで計ってみると…
27500クロック弱。…単純に考えると毎秒580回くらい。
(@16Mhz)
うーん。当初考えてたよりずいぶん肥大化したなぁ…。
もうちょっと速く処理できるのを期待してたんだけど…
しかも、窓関数の処理はとりあえず端折ってあるので、
もし必要になったらプラスアルファだな(微小だけど)。
ChaNさんのC言語FFTモジュールがどのくらいかチェック。
http://elm-chan.org/works/akilcd/report.html
同じ16Mhzの発振源で、128点FFT16ビット精度で7.3msですか!
毎秒約137回の計算。速いなぁ。高級言語でこれなのか…
一部アセンブラ?
今回オイラが作ったのは半分の精度でポイント数も半分。
それでも速度が4倍程度。オイラのプログラム、よほど効率が
悪いんだろうな。
もうちょっと削れないかなぁ?処理時間が短ければ短いほど、
今回の用途としてはありがたいんだよな。
でもまぁ劇的にコンパクトにすることは厳しそうなので、
まずこれはこれで使うことと仮定して、案を前進しよう。
ADCから取り込んでFFT掛けるためには、入力のアナログ信号
にLPFを掛けておかないといけない(折り返しひずみ対策)
ので、オペアンプ周りの回路を計算したいところ。
4弦をそれぞれ高低2パートに分けて合計8パート分
取り込む必要があり、かつカットオフ周波数とナイキスト
周波数の間には殆ど余裕がないので、高次フィルターが必須。
あまり複雑になりすぎると周辺回路がでかくなっちゃうので、
2次か3次で済ませたいところ。
まぁ、最大の山場は越えた感。あとは一気にアプリ面の
設計に特化できるなぁ。そっちの方が難儀するかなぁ?
|