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

  実質最初の記事がいきなりマニアックになってしまった。まあ制御に関係なくても「マイコンにローパスフィルタを実装したいんだけど、この伝達関数ってやつ、どうしたら実装できるの?」みたいな事はあると思うので、何かの役には立つかもしれない。あとググればいっぱい出てくるからn番煎じだけど自分なりに好きに書いておく。

0.1. そもそも伝達関数ってなに?

 真面目に説明すると、ラプラス変換の定義から説明が必要で余白が足りないので、ふざけて書くと、「微分積分複素数sの乗除で記述できる魔法」?

 もう少しだけ書くと、ある時間関数f(t)の時間微分ラプラス変換すると、元の関数のラプラス変換後の複素数sの関数F(s)sを乗じたものが出てくる、みたいな面白い変換。フーリエ変換すると周波数領域に行けるみたいなノリでラプラス変換すると複素平面に行ける。

 さて、この変な魔法を微分方程式に使うとなんと代数方程式に変換できてしまう。微積の授業で解かされるあの面倒な微分方程式が、分数をこねこねするだけで良くなる。わーい、たーのしー!

 え?何が楽しいかって?アナログだったらLCR回路で自由にフィルタが実装できるけど、この入出力関係を数学的に記述すると微分方程式になって、魔法を使うと伝達関数ってのが得られる訳だ。あとちょっとでデジタルに落とし込めそうじゃない?

 まとめると、元々アナログ的な連続時間での微分方程式だった「伝達関数」を、デジタル的なサンプリング時間毎の飛び飛び時間の世界でも使えるように「離散化」してみようじゃないか、というお話。やっと記事のタイトルが回収できた。一応ここまでの話を落書きしておく。

f:id:TEFSOM:20200706224617j:plain

Fig.1. そもそも伝達関数ってなに?というかこの記事は何の話?

0.2. あとz変換ってなに?

 さて、デジタル的に計算する話に入ろう。ここで「マイコン(別にDSPでもFPGAでも良いけど)でどんな計算ができるのか?」と考えると、二進数を加減乗除することと、それをメモリに置いておくことくらいしかない。メモリに置いておくと何が起こるかというと、単位時間毎に計算しているとすると「単位時間だけ古くなる」訳だ。これを何か記号で表せると便利そうだ。

 実は「離散時間領域で単位時間だけ進めることが複素数zを乗じることに相当するような変換」があってz変換と呼ばれている。この魔法を使うと、単位時間だけ古いのが欲しければz^ {-1}を乗じればよい。すっごーい!デジタル演算の記述が得意なフレンズなんだね!

 あとはszで書ければよい訳だ。szの魔法同士の翻訳を真面目にやると、複素数とかデルタ関数とかの出てくる積分をゴリゴリしないといけないけど、重要なのはそこじゃなくて元々は時間関数の微分方程式だったって事だと個人的には思う。次回はちゃんと内容を書く。サービス、サービス!

 

(注:酔ったら思った以上にポエムになった。真面目な人はこのふざけた説明は見なかった事にして制御工学とか信号処理の本で別途勉強してほしい。数式はググれば出てくるのでイメージをつかむヒントになれば、、、と思ったけど図が少ないので足したいな。)