FFT計算をEXCELでやっちまおうっていうお話しの続き。
ようやく思ったとおりの結果が出るように。( ̄ー ̄)
fft_dif_excel.xls
(↑このブログサービス、画像以外のファイルも色々貼れる
ようになったみたいなので、早速ペタリ)
内容的には、8サンプルの周波数間引きFFTを計算するもの。

入力は左側の赤で囲った2箇所。一つはサンプリングレート。
この例では1000sps…ADCを毎秒1000回行ったと仮定。
もう一つは入力信号としてS0~S7の8つ。基本的には
実数部だけ入力して使うんだけど、虚数も入力可。
そこだけ入力すればあとは自動計算&グラフも自動描画。
出力的には、G0~G7の8個で、そのうちG0~G4が
各周波数成分として利用する部分。G0が直流成分。
ちなみにビット入れ替えの処理も済ませてあるので、
上から順にG0~G7の順で読めばOK。
まぁ、それよりもグラフに自動反映されるので、グラフを
見るのが一番解りやすいかな…。
例の本 読んで理解できたことをそのままワークシート
に落としただけなんだけど、単に計算式をワークシートに
落としただけじゃなくて、リクツを元に計算式を作り直して、
それを実際に動かしてみたら理論通り動いたってところが
ミソ。
しかも、このセルに埋め込んである計算式は、理論上
サンプル数を幾ら増やしても対応できる仕組み。
そう。これを思い切り拡張して、アセンブラでフルクラッチ
する目論見なのだ。これでとりあえず目処は付いたかな…
そう。ただ周波数成分を計算するところでちょっと…。
実数成分と虚数成分それぞれの2乗の和の平方根を
求めないといけないんだけど、アセンブラで平方根がなぁ…
ってことで、とりあえずニュートン法を適用したらどんな
風になるかな…ってことで試算を。
ニュートン法は漸化式で誤差を詰めていく方法だから、
初期条件の与え方が肝になるわけだけど、例によって
表計算のワークシートを旨く利用して試算してみた…。
処理上現実的な方法ってことで初期条件の与え方を
考えてみてから、それを元に誤差およそ2~3%程度
まで近づけるには漸化式を2回計算するだけで十分っぽい。
スバラシイ。
3回も計算すればもはや1%未満になるみたい。うーん、
現実レベルと考えて良さそう。
あとはそれをアセンブラで高速に処理させることができる
かどうか…だな。
だいぶ見えてきたので、手が空いてきたら徐々に
プログラムに落とし込んでいきたいところだな。
32点とするか、64点とするか、128点とするか…
そこが最大の課題になりそうだから、一度ウクレレ弦
を実際に使ってみて、pico scopeでFFTを掛けてみて、
それでどんな風かを眺めておきたいところだな…



|