伝達関数の離散化の話(その2)

 前回は伝達関数の話と言いつつ伝達関数が出てこないタイトル詐欺だったので、今回は適当に例題として以下の伝達関数を離散化してみる。

 \displaystyle G(s) = \frac{Y(s)}{U(s)} = \frac{1}{1+sT} ...... (1)

 どんな伝達関数かというと実は(その0)の図1に出てきた伝達関数を整理しただけ。一次遅れ系と呼ばれてて特性としてはローパスフィルタ。

2.1. 矩形近似の一次遅れ

とりあえず(その1)で出した以下の式を(1)にぶち込む。zじゃなくてz^ {-1}で記述しなくてもいいのか気になる人がいるかもしれないけど必要に応じて分母分子をzで割ればいい。(z^ {-1}を打つのがめんどいだけ)

 \displaystyle s ≒ \frac{z - 1}{ΔT} ...... (2)

できた。なお、 a=\frac{ΔT}{T}とおいた。

 \displaystyle G(z) = \frac{a}{z+a-1} ...... (3)

これをどうやって実装するのかって?こうやってこうじゃ。

 \displaystyle y_n = \frac{a}{z+a-1} u_n ...... (4)

 \displaystyle (z+a-1)y_n=a u_n ...... (5)

 \displaystyle y_{n+1}+a y_n-y_n=a u_n ...... (6)

 \displaystyle y_{n+1}=(1-a)y_n+a u_n ...... (7)

なんかデジタル信号処理の本とかで最初にでてきそうなフィルタになった。

 \displaystyle y_{n+1}=y_n+a (u_n-y_n) ...... (7')

ちなみに強引にこう書くと+=で実装できる。

2.2. 台形近似の一次遅れ

同様に以下の式を(1)にぶち込んで、

 \displaystyle s ≒ \frac{2}{ΔT}\frac{z-1}{z+1} ...... (8)

あらかじめ煮込んでおいたものがこちら。なお、 b=\frac{ΔT}{2T+ΔT}とおいた。

  \displaystyle y_{n+1}=(1-2b)y_n+b u_{n+1}+b u_n ...... (9)

ちなみに強引に以下のように書けばメモリに置いておく値は中括弧部分の1つで済む。

  \displaystyle y_{n+1}=b u_{n+1}+\{b u_n+(1-2b)y_n\} ...... (9')

(そういえばz^ {-1}を打つのを面倒がっていたら分母分子をzで割り忘れて添え字が全部一個進んでしまった。まあ「『昨日の晩飯を基に今日の晩飯を決める』のと『今日の晩飯を基に明日の晩飯を決める』のは考え方としては同じこと」なのと同じことなので気にしないことにする。)

グラフ?はて何のことじゃ?