ΔΣ-ADC実験編 その9 続SINC filter & Biquad IIR filter


SINC filter =  MovingAve filter


 
 1.「SINCフィルタ」 とは、「俺のことか」と、MovingAve フィルタ 言い   (川柳風)

    前節では、SINCフィルタ1段を、まねました。

    しかし、特性を見てみると、決してSINCフィルタそのものでは、ありませんでした。


    赤がSINCフィルタ(M=16)、黒が、積分を8個の移動平均で代用したフィルタ

    それで、色々な特性を調べてみる内に、ハタと気付きました。(膝をたたいて、にっこり笑い.....)

    SINCフィルタって、移動平均フィルタそのものと、ちゃうやろか?   

    冒頭のmaximaによる展開式は、

          SINCフィルタ (1-z^-M)/16(1-z^-1)

    そして、その式を展開してみると、な、なんと! 移動平均フィルタそのものです。



 
    実際、特性を見てみると、ぴったり重なり合います。

               CIC(M=16)                                          16個の移動平均フィルタ   

    そ、そうやったんか、もっと早く、気付くべきやったわ.....

    1bit信号処理では、実は、移動平均フィルタの方が、単純で、扱いやすいのです。

    で、16個の移動平均と、それの2段重ねの特性です。


    そして、decimation後の16個の移動平均1段の場合の、100KHz出力

   1/16にdecimationしても、原型と、ほとんど同じです、凄い!




2.Biquad IIR filter の FPGAでのプログラミング

    Biquad filterの式、そのものをプログラムする事になります。

    先ず、Low pass filterの設計


    次に、そのままを verilogHDLにて記述します。

    伝達関数の定義から

          Yn/Xn=(0.2+0.4*z^-1+0.2z^-2)/(1-0.5*z^-1-0.1*z^-2)

    変形して

          Yn(1-0.5*z^-1-0.1*z^-2) =(0.2+0.4*z^-1+0.2*z^-2)*Xn

          Yn - 0.5*Yn-1-0.1*Yn-2 = 0.2*Xn+0.4*Xn-1+0.2*Xn-2

          Yn - 1/2*Yn-1-1/10*Yn-2 = 2/10*Xn+4/10*Xn-1+2/10*Xn-2

       Yn =Yn-1 /2 + Yn-2 /10 + ( Xn + 2*Xn-1 + Xn-2 )/5




    これは、直接型構成のプログラミングです。実に単純で明快ですね....これが一番いいです。

    標準型、並列型等のプログラミングは、 「Scilabで学ぶディジタル信号処理 三谷先生 CQ出版 p.246」を参照下さい。

    IIRフィルタで、気をつけなければならないのは、そのダイナミックレンジです。

    伝達関数の分子、分母、それぞれに分離して、そのダイナミックレンジを探ります。




    これから、

    このフィルターの場合、入力の3倍のレンジがあれば、飽和しない事になりますね。

    入力の最大値が 1023(10bit)だとすると、


    その3倍は


    だから、入力が 10bit なら、yn、yn-1は、12bit が目安になります。

    C電卓の作者様、いつも利用させていただいています、ありがとうございます。

    作成したBiquad IIR filterの simulationです。(sampling=1MHz)


    yn,yn-1は、12bitが目安だと、言いましたが、

    simulationの結果では、

    もっと少ないbit数で作動する場合が、ありますので、

    simulationは、必須です。

H22.7.6