あいかわらず移動中はやり直しのための信号数学を
読みながら…なんだけど、なかなか読んでる時間がとれず
遅々とした進捗。
なにしろ制約事項が結構大きいので、色々頭を悩ます…
スプライト表示器や背景表示器を作った時も結構な
制約と折り合いをつけながら…だったんだけど、FFTを
アセンブラでフルスクラッチってことになると制約の
内容というか次元がまたちょっとちがう。
mega128の4KBのメモリを存分に使うつもりでは
あるんだけど、4ch同時に処理しないといけないし、
FFTだけじゃなくアプリ側も同時に載せないといけないし、
そんなこんなを考えていると、色々悩ましい。
とりあえず、サンプリングをサクサク行いつつ、
128KBの潤沢なプログラムメモリに定数テーブル
おきまくることを考えると、周波数間引きを使って
処理するのがいいのかもしれない。
それより一番の問題はやっぱ4KBのSRAMをどう
使うか。
256点サンプルで4chとすると、仮に実数1バイト
虚数1バイトとしてもサンプリングデータを置いておくだけ
でも2KBか?(サンプリング値を置いておくだけなら
実数部だけでいいのか?)
FFTのバタフライ演算中にもSRAM使うし、アプリ側
でもSRAMを使うことを考えると、この倍は取れない。
しかもFFTをただ掛けるだけじゃなく、FFT掛けた後の
計算結果を一部短時間ながら残しておいて、そのストック
データを元にアプリ側処理をアレコレ動かすわけで、
そっちのストックエリアも結構必要なはず。
うーん。
そもそもたった8ビットの精度で、マトモな計算が
成り立つのかどうか… もっとSRAMのデカイ
AVRがあればいいのになぁ。
一度高級言語でDFT用プログラムを組んでおいて
イメージを膨らませつつ、後々でシミュレーションの
計算結果検証に使うか。
なんにしても手を動かさないと始まらないよなぁ。
|