【IIRフィルタ】第2回:一次IIRフィルタの簡単お手軽な実装

前回のおさらい

一次遅れのIIRフィルタの計算式は

$$y(nT) = x(nT) +  e^{-\frac{T}{\tau}} * y((n-1)T)    (式8)$$

となる。

さて、係数の$e^{-\frac{T}{\tau}}$は、どんな値になるだろうか?たとえば、サンプリング周期T=1ms、設計したいフィルタの時定数$\tau = 10$ msとすると、$e^{-0.1}=0.90483$ となる。

$0.904837$ をどのように扱うか?

試しに、この値を1から引いてみよう。

$$1 – 0.904837 = 0.095163$$

約1/10.5。1/16としてしまえば、右シフト演算4回で行ける。割り算よりシフト演算なら格段に速い。VHDLやVerilogでも簡単に記述実装できる。

そうか!

係数を$e^{-\frac{T}{\tau}}$ではなくて、$1-e^{-\frac{T}{\tau}}$ の形になるようにすれば簡単な演算になるのだ。(式8)を係数$1-e^{-\frac{T}{\tau}}$になるよう変形してみる。

$$y(nT) = x(nT) – (1-e^{-\frac{T}{\tau}}) * y((n-1)T) + y((n-1)T)   (式9)$$

これをブロック図に書くと、

実装例、入出力時間波形、周波数特性については、次回以降で説明します。お楽しみに!