そもそもA/Dコンバータってどうやってできてるの? ADCデバイスをソフトウェアから使うとき,クロック周波数指定するけどどうして? という疑問から,いまさらながらにしくみを勉強したところ,逐次比較型A/Dコンバータって,上位ビットから順に二分探索で電圧値を求める(LSBは切り捨て)手順だということに気づいた。
説明は,第一種アマチュア無線免許の試験問題解説をされているRadio-GXKさんのサイトの記事がとてもわかりやすい。同時に解説されている二重積分形型についてもわかりやすくて,とてもよかった。
変換トリガとともにサンプルホールドした入力電圧値を,Aref電圧に対して,上位ビット(MSB)から1/2, 1/4, 1/8, ... と,求めるビット数分だけ割っていった電圧を保持するDAC(キャパシタで構成するのが一般的なようだ)を用意しておき,クロックごとに上位ビットから順に比較していき,入力電圧値がDACのそのビットの電圧値より大きければ1,小さければ0をを出力ラッチに入れると同時に,次のサイクルでDACのビット設定にも反映することをLSBまで繰り返す。
つまり,末端,葉の部分で左から0V,右に向かって2のbit数乗(8bitなら2^8=256)刻みでArefまでの値が並ぶ二分木として決定木を作り,根から左なら0,右なら1を選ぶように木をたどることでアナログの電圧値をArefの比でいくつになるのかを二進法で示した値が得られるということ。決定木は「コンピュータサイエンス・アンプラグド」の活動「20の扉」と,その解説が参考になると思う。MSBが根でLSBが葉になるところも解説の図と一致する。
なるほど二分探索ね,と思って検索してみたら,特許にそういう記述をしているものがあった。意外と大学の講義ノートのようなものには見かけないので,ソフトウェア屋さんとハードウエア屋さんの壁みたいなものを感じた次第。アルゴリズミックに動く回路なので,アルゴリズム名で説明すればいいのになあ。
一方,⊿Σ型ADCについては,日本人の発明ということで,ちょっと感動した。Wikipedia参照。PDMになる,というのは感覚的にはわかるがデジタル信号処理の理解が中途半端なので,式を見ていても,はあそうですかとしかならなかった。残念。
それで,ではPDMの結果をマルチビットにする(PCM相当に変換する)デシメーションフィルタってなんだろうと思ったら,⊿Σ変調含めて詳しく書いてあったブログがあった。このへんから入っていくと,すっきりわかるような気がする。decimationで辞書をひくと「サンプリングレートを大幅に下げる」って書いてあるけれど,高い周波数で1bit AD変換しているPDM結果を,適当な量子化ビット数に数えられるだけの間隔(例えば8bitなら,1/256)に落として,その区間における,元の周波数における1の数をカウントするという理解でよいのだろうか。密度の高低を値の大小に変換するわけだから。このページではディジタルローパスフィルタとなってて,検索してみると詳しい解説がいろいろあって,いくつか眺めているうちに,その表現に,ひとまず納得した。加算するので遅延していく(位相が遅れる)というのもアナログと同じ特性。なるほど。