FFTのライブラリのテストするために、ADCから入力させる
適当なデータが欲しいってことで何を使うか考えていた
んだけど、秋月のDDSキット買うか、秋月でファンクション
ジェネレータの専用IC買って組むか、自分で作ろうか…
色々考えていたんだけど、昨日触れたChaNさんの自作DDS
http://elm-chan.org/works/asg/report_j.html
のお話を読んでみたら、なんとなく自作に挑戦してみる
方向に流れつつあるような無いような。
とりあえずChaNさんのページを読んでみて、仕組みは
およそわかった感じ。問題は精度なのかな。
赤道儀みたいに水晶1クロック単位で正確なことを
求められるわけじゃなく、小数点第何位までの精度
っていうレベルで設計するみたい。
そうそう。このへんが知りたかったところ。ある程度の
正確な精度が出せれば、微小な累積誤差は見ないことに
するっていう考え方なんだな…。わかった。
読んでみて理解した処理方法を。
正弦波1波形分のデータをテーブル化しておいて、
一定周期で割り込み掛けてそれを角速度ωずつ
位相を進めながらそのテーブルから読み出して
アナログ出力する…と。
で、この角速度ωは周波数ごとの固定値を計算で出して
おいて使用する…。
角速度ωとその積数である角度θはある程度の精度が
出せる小数値(固定小数点で表した値)を使って計算
させるみたい。
2進数の固定小数点の足し算なら簡単だから、あとは
スペックとのせめぎあい。
適当なMEGAシリーズのAVRと適当なD/Aコンバータ使えば
そこそこの精度と機能はできそうな予感。
ChaNさんのDDSは正弦波だけじゃなく、色んな波形データ
をSDカードから都度入力して使える汎用性があるんだけど、
オイラはそこまでの機能は求めず、プログラムメモリ上に
正弦波テーブルを置く程度で充分。必要があれば定数
テーブルだけ焼きなおしてリアセンブルすればいいし。
なんか、いきなり見えてきた感。
秋月のD/A変換ICと絡めれば、凄く少ない部品でできちゃう
んじゃね?とか。
http://akizukidenshi.com/catalog/g/gI-02090/
精度は12ビットもありゃ充分だろうし、SPIクロックも
20Mhzまで出るから、あとは電源回路ノイズさえ気にすれば
そこそこのができそう。
あまり凝らずサクッと作っちゃって、FFTを進めたいところ。
機能アップするにしても後日暇なときにでもいいでしょう。
ポイントはどのくらいの精度にするかってあたりかな。
処理速度と精度の関係性。
あとは、D/AコンバータICの出力周期に伴うノイズを
アナログフィルタで除去したり…。
まずはそのあたりをキチッと設計してみるか。
|