CICフィルタの動作をEXCELで確認

CICフィルタの動作は理解しにくいのですが、EXCELシートを使えば計算過程を簡単に確認できるため理解が進みます。 ここで紹介する計算例はPiRadioに実装されているものと同じデシメーションレート1/32、4段です。

CICフィルタの基礎

デシメーションレート(間引き)Mで1段あたりのCICフィルタの基本構成は以下の通りですが、 実際の実装では回路規模を小さくするためこのブロック図通りではありません。
伝達関数は同じなので以下の式で周波数特性を求めることはできます。



デシメーションレート(M)と段数(N)の周波数特性は以下で紹介するEXCELシートで簡単に求められます。 使用している伝達関数は上の式です。下の例では入力サンプリングレートが1560kHzで出力が48.8kHzになっています。



EXCELシートのダウンロード

エクセルシートはこちらからダウンロードしてください。

使い方は「CIC」項を開いて「Dec」ボタンを押すだけです。
「Dec」ボタンだけマクロになっており、「J3」に設定された値で間引き処理を行います。

Bit Growth

CICをかけるとビットが大幅に増殖する様子も確認できます。
この構成で先ほどのブロック図「M段遅延の微分項」と同じ働きになるため回路が簡単になります。
増殖するビット幅を求める方法は以下になります。



このように加算、減算だけで大きな減衰特性を持つフィルタが作れるため乗算処理を避けたいハードウェア(FPGAなど)では好んで使われます。

CICの計算過程

EXCELなので途中の計算過程をグラフなどで確認できます。
積分項では時間が経つほどに値が増えていき、実際のFPGA内では周期的にオーバーフローを起こしています。 しかし微分項では逆に値が戻っていくため途中でオーバーフローしていても結果的には問題ありません。



入力では振幅100の波形が出力で振幅100Mになっているのがわかります。
ビット増殖で20bit増えて2^20=1M(メガ:百万倍)になってるわけです。