伝達関数の離散化の話(その1)
前回は数式を使わずにラプラス変換の話をしようとしたら無理だった。まあ「をで書こう」ってのは、「微分の計算をサンプリングされたデータ列の演算で近似しよう」ということ。今回は以下の簡単な微分方程式を例にいくつか方法を示す。
...... (1)
以降、添え字は番目にサンプルされた値を意味する。サンプリング時間をとする。
1.1. 矩形近似
これがおそらく一番簡単な方法。 (1)式を以下のように近似したことに相当する。
...... (2)
なんか微分の定義ででできそうな式だ。これをについて解くと、
...... (3)
となる。今度は積分の定義っぽい式になった。微分方程式を解くには積分が要る訳で、積分を矩形の面積の積算で近似したことになる。図1のイメージ。
これの良い点はプログラム上では(3)式を+=で書けるので実装がらくちんってこと。(蛇足:この近似は+=だけで書けるので個人的には「+=戦法」と呼んでいるが当然真似しても誰にも通じないので注意。)
え?肝心のとの関係はまだかって?忘れてた。(2)は(4)のように書けて(5)が得られる。
...... (4)
...... (5)
1.2. 台形近似
流石に矩形は手抜きなので台形で近似してみよう。図2の赤い台形の面積から以下の式ができる。
...... (6)
(6)は(7)のように書けて(8)が得られる。
...... (7)
...... (8)
これには「双一次変換」っていうちゃんとした名前がついていて、これの良い点は安定性とかが近似前後で不変という性質があること。ただzが2個に増えたってことはメモリに保持しないといけない値の数も2つに増えることになる。頑張って式変形してzで括れば減らせるけど。
とりあえず今日はここまで。実装の話とか、高次の近似の話とか、続きがあるかもしれないしないかもしれない。