一次IIIRフィルタの簡単な実装の記事を続ける。以前の

11/15

の記事から

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

y(nT) = x(nT) +  e^(-T/τ)*y{(n-1)T}  (式8)

となることがわかった。この式を変形すると

y(nT) = x(nT) – {1-e^(-T/τ)}*y{(n-1)T} + y{(n-1)T}

(式9)

となる。ブロック図で書くと

1stiir_const2

となる。今までの記事では、係数{1-e^(-T/τ)}を

{1-e^(-T/τ)} = 1/16

すなわち、右シフト演算4回として、実装した場合の各種波形グラフを見てきた。ディジタルフィルタの計算式は、

y(nT) = x(nT) – 1/16*y{(n-1)T} + y{(n-1)T}

(式11)

である。このとき、たとえばサンプリング周期T=1msとすると、時定数は約15msになる。

◆インパルス応答の時間波形(整数計算)

11/17の記事

◆ステップ応答の時間波形(整数計算)

11/18の記事

◆正弦波入力応答の時間波形(整数計算)

11/20の記事

11/21の記事

◆周波数応答(リニア周波数軸、整数計算)

11/24の記事

◆周波数応答(ログ周波数軸、整数計算)

11/25の記事

今回は、時定数を変えてみよう。たとえばサンプリング周期T=1msのとき、時定数は約7msになるようにする。係数としては、1/16を1/8にする。右シフト3回で実装することを目論んでいる。

{1-e^(-T/τ)} = 1/8

ディジタルフィルタの計算式は

y(nT) = x(nT) – 1/8*y{(n-1)T} + y{(n-1)T}

(式24)

となる。

正確な時定数τは

e^(-T/τ) = 1-1/8 = -0.875

にて、サンプリング周期T=1msとすれば、時定数

τ=7.488876[ms]

である。

さて、波形を示す。

■インパルス応答の時間波形(整数計算)

127のステップ入力の場合の応答である。時定数τ=7.488876[ms]のアナログローパスフィルタの応答と比較している。横軸は、サンプリングn。サンプリング周期T=1msとすれば、横軸は時間[ms]。

1_8_impluse_integer

ディジタルフィルタ出力y(nT)の場合は、ゼロに近づかない。7で飽和する。途中の1/8で7が桁落ちでゼロになってしまい、演算結果に反映されず、残ってしまう。

■ステップ応答の時間波形(整数計算)

ディジタルフィルタは127のステップ入力を入れると、最終値は127*8=1016になる。最終値がなぜ8倍されるかというのは、「最終値の定理」から決まる。最終値の定理については、

11/18

の記事を参照。

グラフでは、1016のステップ入力のアナログ1次ローパスフィルタ出力と比較している。

1_8_step_integer

ほぼ同じになる。

エクセルデータはこちら

「motion_oyaji_IIR_1_8_time_step_081121.xls」をダウンロード