CICフィルタでビット数は増えるのか?
CICフィルタを通すと、本当に
出力ビット数 = タップ数 × log2(R + M) + 入力ビット数
でビット数が増えるのかを検証してみることにしました。
まず、12bitの精度でのSIN波を計算で作ります。0~4095まで振れるSIN波です。このSIN波にはσ=1のノイズを乗せておきます。
CICフィルタに通す前の元の信号(緑)と、CICフィルタを通した後の信号(赤)を見比べてみると、フィルタを通したものは少しだけ遅れているのと、スタートのところが少し欠けている以外は、見た目の違いはありません。
では、FFTして、ノイズレベルを見てみましょう。
まずは、元のSIN波。

周波数=100のところにピークがあるほかは、-100dBくらいのところにノイズフロアがあります。このノイズを全部二乗して足し合わせ、SND≒SINADを求めると68.5dBでした。
ちょっとSINADの計算は怪しいかもしれませんが、このまま進めます。
上の波形はコンピュータで作り出したものですが、ADCの信号を想定しているので、有効ビット数(ENOB)=(SINAD-1.76)/6.02で求まります。
有効ビット数は11bitと出ました。12bit精度でSIN波を作っておいて、1LSBのノイズを乗せているのですから、とても妥当な値です。
次に、CICフィルタを通した後のFFT結果を示します。
SINAD=77.5dBと計算できたので、有効ビット数は12.5bitと求まりました。
なんと、有効ビット数が1.4bitも増えました!
これを面白い結果とみるか、つまらない結果とみるかは人それぞれだと思います。
3タップ・4倍デシメーションなので、計算に必要なビット数は6bit増えます。
実際にはそれほど精度は上がっていませんが、時間軸上の情報をデシメーションすることで、分解能を変えられるというのは面白いことだと私は思います。
| 固定リンク




コメント