伝達関数とは何ぞや？

# 伝達関数とは何ぞや？
-  伝達関数は周波数領域でみた入出力特性を表現する関数です。
    - 「いや知らんがな、日本語で話せや」と思った方が本資料の対象です。

- 入力が出力までどうやって伝わるかを考えるためのツールです｡
  - 本資料ではRCフィルタ、RLCフィルタを例に説明します｡

- 大体電気回路を例に書いてあります。
  - 電気部門所属の人間が書いております。
  - 社内向けに書いたものを練習がてらQiitaに投稿しています

- 割と数式が出てきます。
  - 最初に少しだけ微分積分が出てきますが一瞬なので挫折しないでください。
    微積の出番は最初だけです。

# なんでこんな記事を？
~~会社のノルマ~~知っていることのアウトプットって大事ですよね。えぇ。
制御系の話を書こうと思うとどうしても伝達関数の話が必要になってくるので投稿の練習がてら書きました。

---
# 入出力特性の話

とりあえず何か制御対象なりフィルタなりがあったらどう言う動きをするのか調べてみたいですよね。
かっこよく言うと入出力特性を知りたいですよね。

- 信号を入力した瞬間からの出力信号の動きを見る
  - オシロスコープで観測するのがこの方法ですね｡
  - 入力信号にも一般的に良く使われるものが4種類あります。
    インパルス入力、ステップ入力、ランプ入力、正弦波入力です｡
    - 実機での実験で現実的に使うのはステップ入力、正弦波入力かなと｡
    - インパルス入力やランプ入力は机上計算で使う事が多いイメージ(個人の感想です)｡
    - 理屈上は上記4種の入力に対しての特性が分かれば、任意の信号に対する特性が分かります。
    - 三角波や矩形波、鋸歯状波が全て複数の正弦波の足し合わせだけで
      再現できるとか、フーリエ変換の話を調べると出てきます｡
      本資料では割愛します｡

![tc](https://raw.githubusercontent.com/physical-eng/whatsTF/main/img/introInputs.svg)

---
# 時間領域で見た場合の入出力波形の例

時間の推移で変化するグラフ(や関数など)を  **「時間領域」** のグラフ(や関数など)と
呼ぶことにします。

## RCフィルタに1Vのステップ信号を入力した場合
  - ステップ入力の場合、入力電圧に比べて出力電圧がゆっくりと立ち上がります｡
  - 出力電圧が10%(0.1V)から90%(0.9V)に到達するまでの時間を
  **立ち上がり時間**と呼びます｡
  - 立上がりの瞬間の出力電圧の傾きの直線が1Vに到達する時間$\tau$を**時定数**と呼びます｡
    - 実際の出力電圧は時定数の時点では0.632Vになります。

![tc](https://raw.githubusercontent.com/physical-eng/whatsTF/main/img/introStep.svg)

## LCRフィルタに1Vのステップ信号を入力した場合の場合
  - ステップ入力の場合、出力電圧が振動しながら収束していく場合があります。
  - ピーク部分と1Vとの差を**行き過ぎ量**と呼びます｡
    - 電気的にはオーバーシュートに相当します｡
![RLC](https://raw.githubusercontent.com/physical-eng/whatsTF/main/img/introRLC.svg)

## RCフィルタに±1Vの正弦波を入力した場合
- ある周波数までの正弦波電圧を入力した場合、入力電圧と出力電圧は一致します｡
- 入力電圧の周波数を上げていくと、出力電圧の振幅が減少し、入力電圧に比べて遅れていきます｡
- 入力電圧に対する出力電圧の比を**増幅率**、入力電圧に対して出力電圧がどれだけ遅れるかを**位相**で表します｡
  - 増幅率は$20log(\frac{V_{out}}{V_{in}})[dB]$で算出します
  - 位相の単位は通常[deg]です。出力電圧が遅れている場合にマイナスとなります｡
![](https://raw.githubusercontent.com/physical-eng/whatsTF/main/img/introSin2.svg) ![](https://raw.githubusercontent.com/physical-eng/whatsTF/main/img/introSin3.svg)

---
# 周波数領域で見た場合の入出力特性

- ボード線図(RCフィルタの例)

- 周波数を横軸にとり、増幅率、位相をプロットしたグラフを**ボード線図**と呼びます｡
  - 周波数を横軸として考える関数(あるいはグラフなど)を**周波数領域**の関数(あるいはグラフなど)と呼びます｡
  - 横軸の周波数は片対数でプロットします。(増幅率はdB表記の場合既に対数化されているのでそのまま)
  - 点線で描かれているグラフは**概略ボード線図**と言います｡
    解析の簡略化のために使う場合があります。
![](https://raw.githubusercontent.com/physical-eng/whatsTF/main/img/introBode.svg)

---
# 入出力を計算で求めてみると
## 時間領域の波形を計算で求める時

出力電圧$V_{out}$を入力電圧$V_{in}$の式で表現しようとすると、微分積分が出てきて最終的に複雑な微分方程式を解くはめに･･･

![bg contain right:25%](https://raw.githubusercontent.com/physical-eng/whatsTF/main/img/RCFilter.svg)
```math
\begin{aligned}
V_{in}(t) &= E \\
V_{in}(t) &= Ri(t) + \frac{1}{C} \int i(t) dt = R\frac{d}{dt}q(t) + \frac{1}{C} q(t) \\
V_{out}(t) &= \frac{1}{C} q(t) \\
\frac{d}{dt}q(t) &= \frac{CE-q(t)}{CR} \\
\frac{1}{CV_{in}(t)-q(t)}dq(t) &= \frac{1}{CR}dt \\
\int \frac{1}{CE-q(t)}dq(t) &= \int\frac{1}{CR}dt \\
\log_e (CE-q(t)) &= -\frac{1}{CR}t + A_1 \\
CE-q(t) &= e^{(-\frac{1}{CR}t + A_1)} \\
q(t) &= CE-e^{(-\frac{1}{CR}t)} × e^{A_1} \\
q(t) &= CE-e^{(-\frac{1}{CR}t)} × CE \\
V_{out}(t) &= CE\{1-e^{(-\frac{1}{CR}t)}\}
\end{aligned}
```


---
## 周波数領域で入出力特性を計算する場合

- 電気回路論の場合は$j \omega$でインピーダンスを計算する方法が相当します
``` math
\begin{align}
V_{in} (j \omega) &= Ri(j \omega) + \frac{i(j\omega)}{j \omega C} 
V_{in} (j \omega) &= (R + \frac{1}{j \omega C})i(j \omega) \\
i(j \omega) &= \frac{1}{R + \frac{1}{j \omega C}}V_{in}(j \omega) \\
V_{out}(j \omega) &= \frac{1}{j \omega C}i(j\omega) \\
&= \frac{\frac{1}{j \omega C}}{ R + \frac{1}{j \omega C}}V_{in}(j\omega)
&= \frac{1}{ j \omega CR +1}  V_{in}(j\omega)\\
\end{align}
```

- 制御工学の場合は$j \omega$の代わりに$s$を使用

$$
V_{out}(s) = \frac{1}{ sCR +1}  V_{in}(s)
$$
  - $s$をかける操作が微分に、$\frac{1}{s}$をかける操作が積分になります($j\omega$も同じ)｡


---
# 時間領域と周波数領域の変換



- 時間領域から周波数領域へ変換:ラプラス変換 $\mathcal L$
- 周波数領域から時間領域へ変換:逆ラプラス変換 $\mathcal L^{-1}$
-  基本的には[ラプラス変換表](https://jeea.or.jp/course/contents/01131/image/table/01.png)にある関数の形に分解して変換します｡
例えば、前項の
$$
V_{out}(s) = \frac{1}{ sCR +1}  V_{in}(s)
$$
を時間領域の形式に変換する場合、
$V_{in}$をステップ入力とした場合(ステップ入力は[ラプラス変換表](https://jeea.or.jp/course/contents/01131/image/table/01.png)のNo.1)の出力電圧$V_{out}$は、
``` math
\begin{align}
V_{in}(s) &= \frac{CE}{s} \\
V_{out}(s) &= \frac{1}{CR}\frac{1}{ s + \frac{1}{CR}} \frac{CE}{s} &= \frac{CE}{s}-\frac{CE}{ s + \frac{1}{CR}}   \\
&= CE\left(\frac{1}{s}-\frac{1}{ s + \frac{1}{CR}}\right)
\end{align}
```
[ラプラス変換表](https://jeea.or.jp/course/contents/01131/image/table/01.png)の1,4から、
$$
\mathcal L^{-1} \left \lbrace V_{out}(s) \right \rbrace = V_{out}(t) = CE\left(1 - e^{-\frac{1}{CR}t}\right)
$$

- まずはよくあるパターンだけ知っておけば充分
  - 最終的には上記の様な解析ができたらもちろんGood


---
# 基本要素
と言うわけで良く出てくる基本要素を紹介していきます。

## 比例要素
<img src="https://raw.githubusercontent.com/physical-eng/whatsTF/main/img/NonInvOP.svg" style="display: block; float:right ;margin-left: auto; margin-right: 100px;" width="240" />

- 単純に入力を定数倍する要素
  - 抵抗にかかる電圧と電流
  - 非反転増幅回路

$$
V_{out}(s) = K V_{in}(s)
$$

- 時間領域では単純に定数倍(ゲインが1以下なら減少)
- 周波数領域ではゲインが増減、位相は変化無し

![h:180 w:400](https://raw.githubusercontent.com/physical-eng/whatsTF/main/img/StepOP.svg) ![h:180 w:400](https://raw.githubusercontent.com/physical-eng/whatsTF/main/img/BodeOP.svg)


---
## 1次遅れ系
<img src="https://raw.githubusercontent.com/physical-eng/whatsTF/main/img/RCFilter.svg" style="display: block; float:right ;margin-left: auto; margin-right: 100px;" width="300" />

- 低周波の信号は通過、高周波になるほど減衰
  - RCローパスフィルタ

$$
V_{out}(s) = \frac{1}{Ts + 1} V_{in}(s)
$$

- 時間領域では入力から遅れて出力が立ち上がる
- 周波数領域では遮断周波数($f_c=\frac{1}{2\pi T}$)以降、-20dB/decで減衰する(周波数が10倍になるとゲインが-20dB)
  - 遮断周波数で45deg遅延,遮断周波数×10で90deg遅延

![h:180 w:400](https://raw.githubusercontent.com/physical-eng/whatsTF/main/img/Step1st.svg) ![h:180 w:400](https://raw.githubusercontent.com/physical-eng/whatsTF/main/img/Bode1st.svg)


---
## 2次遅れ系

<img src="https://raw.githubusercontent.com/physical-eng/whatsTF/main/img/RLCFilter.svg" style="display: block; float:right ;margin-left: auto; margin-right: 100px;" width="300" />

- 急峻なローパスフィルタ、発振する場合あり
  - 電気回路だとRLCフィルタ

$$
V_{out}(s) = \frac{(\frac{1}{\sqrt{LC}})^2}{s^2+\frac{R}{L}s+(\frac{1}{\sqrt{LC}})^2} V_{in}(s)
=\frac{\omega_n^2}{s^2 + 2\zeta\omega_n + \omega_n^2} V_{in}(s)
$$

- 減衰係数$\zeta$と固有角周波数$\omega_n$(電気回路だと共振周波数)によって挙動が変わる

### 固有角周波数
- 時間領域では$\omega_n$ が大きいと立ち上がりが速くなる
- 周波数領域では$\omega_n$以降、ゲインが-40dB/decで減衰する

![h:180 w:400](https://raw.githubusercontent.com/physical-eng/whatsTF/main/img/Step2nd-2.svg)![h:180 w:400](https://raw.githubusercontent.com/physical-eng/whatsTF/main/img/Bode2nd-2.svg)

### 減衰係数
- 時間領域では
  - 1次遅れ同様遅れて立ち上がる($\zeta\ge1.0$)
  - 振動しながら収束する($0.0\lt\zeta\lt1.0$)
  - 発振する($\zeta=0.0$)
- 周波数領域では
  - $\zeta$が小さいほど位相の変化が急峻
  - 0dB以上の**ピークゲイン**が現れる($0.0\le\zeta\lt1.0$)

![h:180 w:400](https://raw.githubusercontent.com/physical-eng/whatsTF/main/img/Step2nd-1.svg)![h:180 w:400](https://raw.githubusercontent.com/physical-eng/whatsTF/main/img/Bode2nd-1.svg)


---
## 積分要素

- 延々と入力をため込む要素
  - 現実には存在しない:必ず上下限が存在する

$$
V_{out}(s) = \frac{1}{sT} V_{in}(s)
$$

- 時間領域では
  - 一定値を入力し続けると無限に増加する
  - 時定数が小さいほど急激に増加する

- 周波数領域では
  - 位相は常に90deg遅れる
![h:180 w:400](https://raw.githubusercontent.com/physical-eng/whatsTF/main/img/StepInteg.svg)![h:180 w:400](https://raw.githubusercontent.com/physical-eng/whatsTF/main/img/BodeInteg.svg)
---
## 微分要素

- 次の瞬間の変化を出力する
  - 現実には存在しない:未来の情報がないと出力ができない

$$
V_{out}(s) = sT V_{in}(s)
$$

- 時間領域では
  - 入力が増加した瞬間に無限大の出力

- 周波数領域では
  - 位相は常に90deg進む
![h:180 w:400](https://raw.githubusercontent.com/physical-eng/whatsTF/main/img/StepDiff.svg)![h:180 w:400](https://raw.githubusercontent.com/physical-eng/whatsTF/main/img/BodeDiff.svg)


---
# 何故存在しない要素を考えるのか?
- 組み合わせの一部として現れる場合がある
    - CRハイパスフィルタ  
<img src="https://raw.githubusercontent.com/physical-eng/whatsTF/main/img/CRFilter.svg" style="display: block; float:right ;margin-left: auto; margin-right: 100px;" width="300" />
$$
\begin{align}
  V_{out} &= \frac{sCR}{sCR+1} \\
   &= sCR \times \frac{1}{sCR+1} \\
\end{align}
$$

![h:180 w:400](https://raw.githubusercontent.com/physical-eng/whatsTF/main/img/StepCR.svg) ![h:180 w:400](https://raw.githubusercontent.com/physical-eng/whatsTF/main/img/BodeCR.svg)

- 特定の条件で近似して使用
  - 積分要素
    - 無限には蓄積できないが、上下限の範囲内であれば実現可能
  - 微分要素
    - 直前の値と現在の値から推定

---
# ブロック線図
基本要素の説明を一通りしたところで、実際の電気回路を例にとって解析をしたいわけですが、  
その前に信号の流れを図示するための**ブロック線図**について説明します。
と言ってもほとんど普段から見かけるブロック図と差はありません。

- 乗算
制御の一番基本的なブロックです。
各ブロックは全て1入力1出力です。

![](https://raw.githubusercontent.com/physical-eng/whatsTF/main/img/Block2.svg) ![](https://raw.githubusercontent.com/physical-eng/whatsTF/main/img/RCFilter.svg)

- 加算加算は白丸で表します｡これだけ他ではあまり見かけない表記かも。
![h:180](https://raw.githubusercontent.com/physical-eng/whatsTF/main/img/BlockAdder.svg) ![h:180](https://raw.githubusercontent.com/physical-eng/whatsTF/main/img/OpAdder.svg)

- 減算
![h:180](https://raw.githubusercontent.com/physical-eng/whatsTF/main/img/BlockSubtractor.svg) ![h:180](https://raw.githubusercontent.com/physical-eng/whatsTF/main/img/OpSubtractor.svg)

- 直列接続
![](https://raw.githubusercontent.com/physical-eng/whatsTF/main/img/BlockSeries1.svg)  ![](https://raw.githubusercontent.com/physical-eng/whatsTF/main/img/BlockSeries2.svg) 

- 並列接続
![](https://raw.githubusercontent.com/physical-eng/whatsTF/main/img/BlockParallel1.svg) ![](https://raw.githubusercontent.com/physical-eng/whatsTF/main/img/BlockParallel2.svg) 

---
# 直列接続とボード線図

- 直列接続されたシステムのボード線図は各々のボード線図の和になります。

例えば、$G_{1}(s)=\frac{1}{\frac{10}{2\pi}s+1},G_{2}(s)=\frac{1}{\frac{1000}{2\pi}s+1},G_{3}(s)=G_{1}(s)G_2(s)$ のボード線図は下図左のようになります。
$G_{3}(s)$が$10^2$Hz未満では$G_{1}$と一致し、$10^2$Hz以降は$G_{1},G_{2}$を足した形と一致するのが分かるかと思います。

複雑な伝達関数も基本要素の直列接続形式に分解してやることで、ボード線図の描画が簡単になります。
ちなみにこの例だとステップ応答は下図右のようになります。
$G_{1}$の特性が支配的で$G_2$の特性に気づけなさそうですね。
![](https://raw.githubusercontent.com/physical-eng/whatsTF/main/img/BodeSeries1.svg) ![](https://raw.githubusercontent.com/physical-eng/whatsTF/main/img/StepSeries1.svg)


---
# まとめ
今回は伝達関数そのものの話なので、この辺にしてまとめておきます。
- 伝達関数は周波数領域でみた入出力特性を表現する関数です。
  - 周波数領域での特性はゲイン(増幅率)と位相で表現します。
  - 微分積分が出てくる関係式でも、周波数領域では代数的に(四則演算で)計算できます。
- 複雑なブロックも基本要素の直列接続に変形すればボード線図の加算で解析できます。
  - 比例要素
  - 1次遅れ系、 2次遅れ系
  - 積分要素、 微分要素

- 今回の内容で分かること
  - フィルタの定数を決めたら立ち上がり時間がどのくらいになるか？
  - 立上がりを速くするためにはフィルタの定数をいくらにすれば良いか？
  - 設計したフィルタは振動する可能性があるか？

## 終わりに
  結構な分量説明しましたが、今回の内容は入り口です。設計に必要な話はまた別の機会に。
  と言っても個人的にはこの入り口がなんだかんだ一番難しいのではとも思っています。
  ここが分かった上でフィードバック系の話を加えると、PID制御や位相補償回路の話が理解出来るはず。

  Qiitaでご覧いただいた方、ありがとうございました。
  私も勉強中の身ですので、お気づきの点がございましたらコメントいただけますと幸いです。