プログラムでCICフィルタ

by K.I
2017/01/01〜2017/01/16

Index


概要

プログラムについて


1というより、SINCフィルタも含めて、微分器・積分器のカスケード接続によるフィルタをCICフィルタと呼んでも良いと思う。
2これは環境によって異なるので、最初にintの大きさを確認しておく。
3まぁ、入出力をintにしただけなんだけど。

[top]

SINCフィルタ と CICフィルタ

積分フィルタ(Integrator Filter)

% white 10000 | imul 100 | intg | fftw | gp_fftl > wtintg.png

微分フィルタ(Comb Filter)

SINCフィルタ(微分→積分・積分→微分)

SINCフィルタ2段カスケード


SINCフィルタ3段カスケード


微分・積分を纏める → CICフィルタ



4サンプリング周波数を10kHzにしているのは、ある程度大きくしないと荒すぎるし、あまり大きいと時間が掛かりすぎるので。
5整数化時にx100してるのも同様の理由だが、有効な入力ビット数に限界もあるので適当に決めた。
6入力データに対して、十分な大きさのバッファで処理した場合は。

[top]

アップサンプラ(インターポーレータ)

→ R=16 とする

アップサンプリングのイメージ

アップサンプラ+SINC

アップサンプラ+SINC2

アップサンプラ+SINC3

アップサンプラの位置を変える


7折り返しのイメージMfs-fs/2〜Mfsも含むけれども。
8384ks/sのフィルタ特性を求める時は、擬似ホワイトノイズ生成に時間が掛かる(というよりプログラムの限界がある)ので、1/100のサンプリング周波数で計算している。
9実際は、Bit幅分のレジスタが必要なので節約の効果は大きい。

[top]

ダウンサンプラ(デシメータ)

→ R=16 とする

fs/2以下のデータのみの場合

fs/2以上のデータを含む場合

ダウンサンプリングのイメージ

SINC3+ダウンサンプリング

ダウンサンプラの位置を変える

帯域制限せずに掛けてみた


10いや、やっぱり波形見ただけじゃ分からないか。。
11やはり384ks/sのフィルタ特性を求める時は、擬似ホワイトノイズ生成に時間が掛かるので、1/100のサンプリング周波数で計算しています。
12どうしても折り返しのイメージMfs-fs/2〜Mfsも含むけれども。
13Bit幅分のレジスタが必要なので節約の効果はやっぱり大きい。

[top]

まとめ


[top]

おまけ

アップサンプラ プログラム

ダウンサンプラ プログラム

Bit幅

参考


14でもまぁ、あまり自信なし。。

[top] [プログラムの部屋に戻る]

comments powered by Disqus