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

 前回は数式を使わずにラプラス変換の話をしようとしたら無理だった。まあ「szで書こう」ってのは、「微分の計算をサンプリングされたデータ列の演算で近似しよう」ということ。今回は以下の簡単な微分方程式を例にいくつか方法を示す。

 \displaystyle \frac{d}{dt}(y(t)) = u(t) ...... (1)

 以降、添え字nn番目にサンプルされた値を意味する。サンプリング時間をΔTとする。

1.1. 矩形近似

 これがおそらく一番簡単な方法。 (1)式を以下のように近似したことに相当する。

 \displaystyle \frac{y_n - y_{n-1}}{ΔT} = u_{n-1} ...... (2)

 なんか微分の定義ででできそうな式だ。これをy_nについて解くと、

 \displaystyle y_n = y_{n-1} + ΔTu_{n-1} ...... (3)

となる。今度は積分の定義っぽい式になった。微分方程式を解くには積分が要る訳で、積分を矩形の面積の積算で近似したことになる。図1のイメージ。

f:id:TEFSOM:20200707205715j:plain

Fig.1. 矩形近似

これの良い点はプログラム上では(3)式を+=で書けるので実装がらくちんってこと。(蛇足:この近似は+=だけで書けるので個人的には「+=戦法」と呼んでいるが当然真似しても誰にも通じないので注意。)

え?肝心のszの関係はまだかって?忘れてた。(2)は(4)のように書けて(5)が得られる。

 \displaystyle \frac{z - 1}{ΔT} y_{n-1} = u_{n-1} ...... (4)

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

1.2. 台形近似

 流石に矩形は手抜きなので台形で近似してみよう。図2の赤い台形の面積から以下の式ができる。

 \displaystyle y_n - y_{n-1} = \frac{ΔT}{2}(u_{n} + u_{n-1}) ...... (6)

f:id:TEFSOM:20200707214848j:plain

Fig.2. 台形近似

(6)は(7)のように書けて(8)が得られる。

 \displaystyle (z-1)y_{n-1} = \frac{ΔT}{2}(z+1)u_{n-1} ...... (7)

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

これには「双一次変換」っていうちゃんとした名前がついていて、これの良い点は安定性とかが近似前後で不変という性質があること。ただzが2個に増えたってことはメモリに保持しないといけない値の数も2つに増えることになる。頑張って式変形してzで括れば減らせるけど。

 

とりあえず今日はここまで。実装の話とか、高次の近似の話とか、続きがあるかもしれないしないかもしれない。

伝達関数の離散化の話(その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の魔法同士の翻訳を真面目にやると、複素数とかデルタ関数とかの出てくる積分をゴリゴリしないといけないけど、重要なのはそこじゃなくて元々は時間関数の微分方程式だったって事だと個人的には思う。次回はちゃんと内容を書く。サービス、サービス!

 

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

 

はじめに

皆がすなるブログというものを我もしてみんとてするなり。

1.Who?

 サイクリングと電子工作が趣味の社会人5年目(2020年時点)。せっかくの休日を無駄に過ごすのはもったいないので、モチベーションを維持したり忘備録としても使えればと思い、2,3年前にTwitterに趣味アカウントを作った。以下にリンクを置いておく。

サイクリング:https://twitter.com/Si_IGBT

電子工作:https://twitter.com/Si_SJ_MOSFET

(蛇足:アカウント名は学生時代に研究していたパワーエレクトロニクスで使う素子の名前から。その内パワエレについても語るかもしれない。)

2.Why?

一言で書くと、自分の趣味に関して、何かTwitterよりももう少しS/N比の高いものを残したいなと思ったから。

 Twitterアカウント開設当初は、ブログは更新が面倒で長続きしないがTwitterなら気軽にツイートできるので続くだろうと思って始めたものの、使い慣れてくるとその更新の簡単さが仇となって、「ねむい」とか「うまい」とか、どうでも良い日常を垂れ流してしまうようになってしまった。

 まあそれはそれでまた正しいTwitterの使い方なのだろうけど、当初思い描いていたより大幅にS/N比の低いものとなってしまった。(注:ここで、Sとは見返したくなるような趣味に関する内容、Nとは特に振り返る価値の無い雑多な内容、とする。)

 もう少し上手くTwitterを使う方法(タグ付け、アカ別け、など)も考えられなくもないが、個人的には手をかけるならTwitterでやる必要性は無いように感じたので、自由に書けるブログを始めてみようと思う。続くのかは分からない。力みすぎると失速しそうなのでTwitterぐらいの気持ちで書いてみようと思う。

3.What?

 基本的に趣味のチャリと電子工作に関する話を書きたい。特筆に値する飯屋を見つけたりしたら「うまい」に相当する記事も書いちゃうかもしれないけど。

4.How?

 何か画像を載せられるくらい進捗がでたら、画像数と文字数の制限の無いツイートだと思って気軽に書きたい。週一くらいで書けたらいいなと思う。

5.When?Where?

いつでもどこでも好きに書きたい。まあ大抵家で週末に書くことになりそうだ。