デルタシグマ A/D 変換 (1) で考えた方針でいろいろ試してはみたのですが、あまり
高性能は得られませんでした。 区間を平均して "1" の数だけを送るというのは、思いの
ほか大切な情報を捨て去ってしまうようです。 分解能やノイズをあきらめて、そこそこの変換速度で
使うか、それとも高分解能を目指して高速性はきっぱりとあきらめるか。
それはちょっと保留して、高精度計測用に使えそうな構成を試してみました。
● Δ-Σ変調器は2次にして、SPICE ではその部分のみをシミュレートします。
結果を ltsputil で 102.4ksps の 1bit デジタルデータに変換します。
ltsputil -eoa ds-mod2.raw ds-mod2.txt 6145
6145 という数は 2048+4096+1 です。 IIR フィルターは理論上無限の過去からの記憶を
引きずっていますので、既知の信号データをある程度送り込んで、過去の記憶をクリアーし
ます。 今回は後ろのほうの 4096 サンプルだけを使います。
C プログラムで以降の処理を行います。 出力ビットストリームのデータレートは 100*1024bps で
す。 とりあえず8次のベッセル近似デジタル LPF を通してみました。 カットオフ周波数
は 300Hz です。
入力信号の周波数は 50Hz とし、振幅を 1V, 100mV, 10mV ・・ と変えて、結果を FFT 解析しま
した。 サンプリング周波数が 102.4kHz ですから約 50kHz までのデータが得られるのですが、高い
周波数成分はおとなしく減衰しているので、1/8 の約 6kHz までをプロットしています。
10μV 入力時は SN 比がほぼ1です。 1μV 入力には応答が見られませんし、300Hz 付近のノイズの
ほうがレベルが高くなっています。
MSYS + MinGW 環境下でプログラム類を作成しました。 dsadc.zip
中の ds-mod2.asc と、c_src/ サブディレクトリー中の t2.c, makefile, x2 を見て
ください。 x2 は ltsputil.exe と t2.exe を起動するシェルスクリプト
です。 ltsputil.exe は "C:/Program files/LTC/ltsputil/" ディレクトリーに
存在するとしています。 ltsputil は LTspice User Group から入手できます。
LTspice (scad3) は .raw ファイル
を保存するように設定しておくと便利かもしれません。
"p12o.c" は一次および二次の IIR デジタルフィルターです。 係数の算出法は ここ に書いておきました。
● Δ-Σ変調器を3次にしました。 そのほかで前項と異なるのは、信号周波数を 25Hz に、102.4ksps の
データ数を 4096+8192+1 サンプルに、フィルターのカットオフ周波数を 100Hz に
したことだけです。
入力信号周波数 25Hz とフィルターのカットオフ周波数 100Hz が接近しているので、25Hz 信号の
減衰がわずかに見えます。 入力振幅が 10μV のときの応答が小さくなっていますが、この理由は
まだ解明していません。 3次以上のΔ-Σ変調器は、安定であることが理論的には導けないそうです
ので、取り扱いには注意が必要です。
dsadc.zip 中の ds-mod3.asc と、c_src/ サブディレクトリー
中の t3.c, makefile, x3 を見てください。 x3 は ltsputil.exe と t3.exe を起動する
シェルスクリプトです。
★ このように SPICE と他のプログラミング言語を組み合わせて使うと、SPICE は
デジタルフィルター演算等が得意でないことを補うのに加えて、アナログ回路のシミュレーションと
デジタルデータ処理を分離できるので、作業能率が向上します。
実際、SPICE でデジタルフィルター演算を始めた頃、データ受け渡しのタイミングで苦労したことが
あります。 逆相クロック? そんなのは演算プログラムとは無関係なはず。 そして、単なる数値演算を
やるのだったら SPICE は遅い、これはどうしようもない制約でしょうね。 デジタル演算処理のみの
変更だったら、以前の .raw ファイル (ltsputil で処理済み) を保存しておけば、あっという間に
結果が出ます。
● Δ-Σ ADC について、変調器が発生する量子化ノイズは入力信号とは無関係だと普通は仮定します
が、これは事実ではありません。 この効果は tonal effects と呼ばれ、小レベルの擬似ノイズ信号を
加えるとその悪影響を軽減することができます。 擬似ノイズ信号の注入効果を調べます。
回路の右半分が擬似ランダム信号発生器です。
この回路は一定周波数以下の信号成分を発生しないので、この目的には好都合です。 擬似ノイズ信号
なしの場合は:
擬似ノイズf信号を加えると:
入力信号レベルが小さい場合の振るまいが、だいぶ改善されます。 特に 10μV 入力時の改善比
が目立ちます。 擬似ノイズ信号の注入に 90MΩ などという非現実的な値の抵抗器を使っています
が、これはもちろんT型減衰器に置き換えます。
dsadc.zip 中の ds-mod4.asc と、c_src/ サブディレクトリー
中の t4.c, makefile, x4 をご覧下さい。
後日見直してみると、100μV 入力時の応答性能が少し悪化しています。 これは擬似ノイズ信号
のレベルを調整すると緩和できるでしょう。
もどる
|