Cosmo-Zを無理やり18bit化してみた
ZYNQ搭載のADCボード「Cosmo-Z 」は標準で12bitですが、オプションで16bitのADCを搭載することもできます。
7月28日のブログの記事「Cosmo-Zの16bit版を作ってみた」でも書いたのですが、入力0のときのノイズのヒストグラムはこんな感じでした。
1LSB=30μVなので、σ=160μ程度のノイズが乗っています。
まぁ、16bitの高速ADCだとこれくらいは仕方がないです。
![]()
さて、16bitのADCにディジタルフィルタとデシメーション(オーバーサンプリングの逆)をしてやれば、もっと精度が出るんじゃないかと思い、やってみました。
XILINXのCoreGeneratorにはCIC Generatorというフィルタのウィザードがあるので、これを使ってみました。
拡大してみるとわかると思いますが、25分の1デシメーションのCICフィルタです。125MHzで入ってきた信号が10MHz以上で-100dB、7MHz前後で-75dBという強烈なLPFになっています。
CICフィルタについては、詳しくは、過去の記事「12bitのADCを18bit分解能にする方法」「CICフィルタのオーバーフローとビット数」「CICフィルタでビット数は増えるのか?」をご覧ください。簡単に言えば、加算と減算とレジスタだけで作れるローパスフィルタです。
このフィルタを通すと、5LSB程度(約160μV)あったノイズが、1LSB(約30μV)の幅に収まります。高周波成分をカットするので、当然ながらノイズは減ります。
これを18bitに拡張して見てみると、σ=4LSB(約30μV)程度の綺麗な正規分布が出てきます。
つまり、フィルタによって16bitのADC値から意味のある18bitの値が作り出されているというわけです。直感的に言えば、2つの整数を足して平均すれば0.5の桁までわかる、ということをもっと複雑にやっています。
![]()
では、FFTしてスペクトルを見てみます。
80MHzでサンプリングしていますが、25倍オーバーサンプリングとして扱うので、信号のレートは3.2MHzになります。したがって1.6MHzまで見えます。
まずは、16bitで測ったデータをFFTしてみます。信号源はオーディオアナライザで作った100kHzの正弦波です。基本波-20dBに対して高調波が-90dBくらい下がったところに出ています。
↑16bitでのFFT
次に18bitで測ったデータのFFTです。メインの部分は変わりありません。1MHz以上のノイズフロアが-10dB減って-160dBを差すくらいの違いしかありません。
↑18bitでのFFT
したがって、18bitにすることはDC電圧の決定には意味があるのだろうけれども、FFTした結果にはあまり影響が出ないといえます。
![]()
Cosmo-Zの18bit化ができました。
このシステムがどれほどの性能を持つかは、より歪の少ない発振器を使ってみないとわからないといえます。
-100dB以下の発振器が欲しい。
| 固定リンク








コメント