ディジタルフィルタでADCのビット精度は向上するのか?
ADコンバータのビット数が多ければ多いほど性能は高いと思われています。そのため、ADコンバータはビット数が多いほうが高価です。
それでは、ビット数の少ないADコンバータが出してきた荒い量子化のデータをディジタルフィルタを通すことで精度を上げることはできるのでしょうか?
実際にやってみました。
まず、XILINXのFPGAの中に入れるディジタルフィルタとしてCICフィルタというのを使います。フィルタとしてのキレは緩いのですが構造が簡単で足し算と引き算と遅延素子だけでできるからです。
このフィルタでは、入力4クロックに対して1回の割合で出力が更新されます。Fixed Or Initial Rateというところの設定が4になっているからです。
まず、このADCに固定電圧を入れてホワイトノイズのヒストグラムを見てみます。
12bitのADCでは粗くしか電圧を見れていませんが、フィルタを通したほうは中間の電圧がうまく再現されています。DC~低周波においてはビット精度は向上したと言えるでしょう。
次に、VP7722Aという正弦波発振器で作った100kHzの正弦波をADCでサンプリングしてみます。
下の図の茶色い波形は生の波形、フィルタを通すと赤色の波形になります。
フィルタを通したほうがカクカクしているのですが、それは4回に1回しか出力されないためです。
FFTで高調波を確認してみます。下の図は100kHz 7dBの正弦波を入力した場合のものです。このLPFでは、1MHz以下の減衰はないので赤と茶色の線はほぼ重なっています。
100kHzの信号に対して200kHzのところに高調波があります。もともとの正弦波が綺麗すぎるのと、このADCのひずみが少ないので基本波に対して-90dB以下でしか見えていません。CICフィルタを入れても歪みが改善されるわけではなく、悪くなるわけでもありません。
INLやDNLが悪化するとひずみ率の増加として見えてきますので、CICフィルタではINLやDNLが悪化することもなく、改善されることもないことがわかります。
また、12bit ADCの量子化の間にある電圧の推定も、非常に滑らかに妥当に行われていることがわかります。もし、1LSBの間の中間電圧の推定で偏りがあれば、歪率の悪化として見えてくるからです。
CICフィルタを通した場合と通さない場合で、0~40MHzまでのノイズを見てみました。
4MHz以上のノイズは綺麗に削減されているのですが、カクカクしていることに起因して、折り返し周波数あたりに新たなノイズが出てきているのが見えています。
これは良くないので改善が必要です。
具体的には、CICフィルタを2つ使いました。100MHzの信号を第一のCICフィルタで25MHz相当にデシメーションし、第二のCICフィルタで100MHzにインタポレーションしました。これで、100MHzのカクカクしない波形が得られます。
こうして得られたベストなFFTを下の図に示します。
今までは-100dBのところにノイズフロアがあったのですが、2段CICフィルタを入れることでノイズが抑圧され、-120~-140dBまでノイズフロアが下がりました。それによって、いままでノイズに隠れていた高調波が見えるようになってきました。
20kHzの基本波に対して、二次高調波が-90dBのあたりに見えていますが、これは発振器が出している高調波であるように見えます。
いくつかのファンクションジェネレータで試してみたり、一つのファンクションジェネレータでも出力レベルを変えてみると、高調波の出方が変わってくるのが見えます。
おそらく、ファンクションジェネレータの生の特性が見えているのでしょう。
結論として、CICフィルタ(LPF)により、
- ADCの量子化された間の電圧を推定することは可能(低周波領域でのビット数は増大)
- 高周波成分のノイズ削減が可能
- 歪や高調波は改善しない
ということがわかりました。
| 固定リンク
コメント