CICフィルタのオーバーフローとビット数
3タップCICフィルタの各部の計算結果を見てみましょう。
まずはデシメータの左側の部分の最初の積分器の結果をx0とします。このx0の動きを見てみますと、
明らかにオーバーフローしてしまっています。
それどころか、直流(DC)を入れたり、インパルスを入れた場合でも、積分器の出力は何らかの値を出し続けるので、オーバーフローしてしまいます。
次の図は、t=500のときにx=1となるインパルスを入れた場合の、積分器の各段の計算結果です。
たった1つだけのデータが1になっただけでも、時間とともにどんどんオーバーフローしていくのですから、時間軸で追いかけていっても何もわかりません。
このように、CICフィルタの積分器はいつもオーバーフローしています。オーバーフローさせた状態で使い、微分器で、数ポイント前のとの差分を計算して使うという、非常におおざっぱな動きをしています。
じつは今日、実験してみて初めてわかりました。
このオーバーフローをしても計算結果が無意味にならない最低のビット数が、
出力ビット数 = タップ数 × log2(R + M) + 入力ビット数
の式であるようです。
まぁ、時系列で追っていくと何だかわかりませんが、微分した結果を見ればそれなりのものになっているという、不思議な回路です。
次の図は、振幅は1LSBのSIN波だけど、入力データにσ=0.3LSBのノイズが乗っているというデータをCICフィルタに通したものです。
ノイズがあるので、遷移するところがバリバリになっていますが、そのおかげで中間の値を復元できているのがわかります。もし、ノイズが全くない状態だと、CICフィルタを通した値はとてもカクカクしたものになってしまいます。
逆にノイズが多すぎても(σ=1.5)、
出力された結果に多くのノイズが乗るのでよろしくありません。
この結果からわかるのは、ADCに直流が印加された場合に、CICフィルタが中間値を出力するためには適度(σ=0.3くらい)なノイズが必要であるということです。当然といえば当然ですが。
また、CICフィルタの遮断特性は急峻ではないので、ノイズが多いと取り切れません。あまりノイズが多くてもよくないということが言えます。
良いのか悪いのかよくわからないCICフィルタですが、ゆっくりと変化していく信号に対してはもっともらしい結果を出すので、きっと使えるのだと思います。
次回は、ビット数が本当に増えるのかどうかを検証してみることにします。
| 固定リンク
コメント