« 複数の特電Spartan-6ボードを開く64bit版DLL | トップページ | Cosmo-ZのファームウェアとFPGAを更新 »

2015.08.26

Cosmo-Zを無理やり18bit化してみた

ZYNQ搭載のADCボード「Cosmo-Z 」は標準で12bitですが、オプションで16bitのADCを搭載することもできます。

7月28日のブログの記事「Cosmo-Zの16bit版を作ってみた」でも書いたのですが、入力0のときのノイズのヒストグラムはこんな感じでした。

Csz16_4

1LSB=30μVなので、σ=160μ程度のノイズが乗っています。

まぁ、16bitの高速ADCだとこれくらいは仕方がないです。

さて、16bitのADCにディジタルフィルタとデシメーション(オーバーサンプリングの逆)をしてやれば、もっと精度が出るんじゃないかと思い、やってみました。

XILINXのCoreGeneratorにはCIC Generatorというフィルタのウィザードがあるので、これを使ってみました。

Cic

拡大してみるとわかると思いますが、25分の1デシメーションのCICフィルタです。125MHzで入ってきた信号が10MHz以上で-100dB、7MHz前後で-75dBという強烈なLPFになっています。

CICフィルタについては、詳しくは、過去の記事「12bitのADCを18bit分解能にする方法」「CICフィルタのオーバーフローとビット数」「CICフィルタでビット数は増えるのか?」をご覧ください。簡単に言えば、加算と減算とレジスタだけで作れるローパスフィルタです。

このフィルタを通すと、5LSB程度(約160μV)あったノイズが、1LSB(約30μV)の幅に収まります。高周波成分をカットするので、当然ながらノイズは減ります。

Cic_16_hist

これを18bitに拡張して見てみると、σ=4LSB(約30μV)程度の綺麗な正規分布が出てきます。

Cic_18_hist

つまり、フィルタによって16bitのADC値から意味のある18bitの値が作り出されているというわけです。直感的に言えば、2つの整数を足して平均すれば0.5の桁までわかる、ということをもっと複雑にやっています。

では、FFTしてスペクトルを見てみます。

80MHzでサンプリングしていますが、25倍オーバーサンプリングとして扱うので、信号のレートは3.2MHzになります。したがって1.6MHzまで見えます。

まずは、16bitで測ったデータをFFTしてみます。信号源はオーディオアナライザで作った100kHzの正弦波です。基本波-20dBに対して高調波が-90dBくらい下がったところに出ています。

Fft_16bit_2

↑16bitでのFFT

次に18bitで測ったデータのFFTです。メインの部分は変わりありません。1MHz以上のノイズフロアが-10dB減って-160dBを差すくらいの違いしかありません。

Fft_18bit

↑18bitでのFFT

したがって、18bitにすることはDC電圧の決定には意味があるのだろうけれども、FFTした結果にはあまり影響が出ないといえます。

Cosmo-Zの18bit化ができました。

このシステムがどれほどの性能を持つかは、より歪の少ない発振器を使ってみないとわからないといえます。

-100dB以下の発振器が欲しい。

|

« 複数の特電Spartan-6ボードを開く64bit版DLL | トップページ | Cosmo-ZのファームウェアとFPGAを更新 »

コメント

コメントを書く



(ウェブ上には掲載しません)




« 複数の特電Spartan-6ボードを開く64bit版DLL | トップページ | Cosmo-ZのファームウェアとFPGAを更新 »