伝達関数は、線形時不変(LTI)システムの入出力関係をラプラス変換の $s$ 領域で表現したものです。制御工学の最も基本的なツールであり、システムの安定性や応答特性を解析するために不可欠です。
本記事では、伝達関数の定義からその求め方、極と零点の意味、Pythonでのシミュレーションまでを解説します。
本記事の内容
- 伝達関数の定義とラプラス変換との関係
- 微分方程式から伝達関数を求める方法
- 極と零点の意味
- 基本的な伝達関数(1次遅れ系・2次系)
- Pythonによるシミュレーション
前提知識
この記事を読む前に、以下の記事を読んでおくと理解が深まります。
伝達関数とは
定義
伝達関数 $G(s)$ は、初期値をすべてゼロとしたときの、入力 $U(s)$ から出力 $Y(s)$ への比として定義されます。
$$ \begin{equation} G(s) = \frac{Y(s)}{U(s)} \end{equation} $$
ここで $Y(s)$ と $U(s)$ はそれぞれ出力と入力のラプラス変換です。
微分方程式から伝達関数を求める
$n$ 階線形微分方程式で記述されるシステムを考えます。
$$ a_n \frac{d^n y}{dt^n} + a_{n-1} \frac{d^{n-1} y}{dt^{n-1}} + \cdots + a_1 \frac{dy}{dt} + a_0 y = b_m \frac{d^m u}{dt^m} + \cdots + b_1 \frac{du}{dt} + b_0 u $$
初期値ゼロの条件でラプラス変換すると、$\frac{d^k}{dt^k} \to s^k$ となるため、
$$ (a_n s^n + a_{n-1} s^{n-1} + \cdots + a_0) Y(s) = (b_m s^m + \cdots + b_0) U(s) $$
したがって伝達関数は
$$ \begin{equation} G(s) = \frac{b_m s^m + b_{m-1} s^{m-1} + \cdots + b_0}{a_n s^n + a_{n-1} s^{n-1} + \cdots + a_0} \end{equation} $$
ここで、物理的に実現可能なシステムでは $m \leq n$ (プロパーな伝達関数)が成り立ちます。
極と零点
定義
伝達関数 $G(s) = \frac{N(s)}{D(s)}$ において、
- 極(pole): 分母 $D(s) = 0$ の根 → システムの固有の応答モードを決定
- 零点(zero): 分子 $N(s) = 0$ の根 → 特定の周波数で出力がゼロになる
極と安定性
システムが安定であるためには、すべての極の実部が負 でなければなりません。
$$ \text{Re}(p_i) < 0 \quad \forall i $$
これは、極 $p_i$ がすべて複素 $s$ 平面の左半面にあることと同じです。
極の位置と応答特性
| 極の位置 | 応答特性 |
|---|---|
| 負の実軸上($p = -a$) | 指数減衰 $e^{-at}$ |
| 虚軸上($p = \pm j\omega$) | 持続振動 $\sin(\omega t)$ |
| 右半面($\text{Re}(p) > 0$) | 発散(不安定) |
| 複素共役($p = -\sigma \pm j\omega$) | 減衰振動 $e^{-\sigma t}\sin(\omega t)$ |
基本的な伝達関数
1次遅れ系
$$ G(s) = \frac{K}{\tau s + 1} $$
ここで $K$ は定常ゲイン、$\tau$ は時定数です。極は $s = -\frac{1}{\tau}$ にあります。
ステップ応答は
$$ y(t) = K \left(1 – e^{-t/\tau}\right) $$
2次振動系
$$ G(s) = \frac{\omega_n^2}{s^2 + 2\zeta\omega_n s + \omega_n^2} $$
ここで $\omega_n$ は固有角振動数、$\zeta$ は減衰比です。
極は
$$ s = -\zeta \omega_n \pm \omega_n \sqrt{\zeta^2 – 1} $$
| $\zeta$ の範囲 | 応答の種類 |
|---|---|
| $0 < \zeta < 1$ | 不足減衰(振動しながら収束) |
| $\zeta = 1$ | 臨界減衰(最速で振動なし) |
| $\zeta > 1$ | 過減衰(ゆっくり収束) |
導出例: RLC回路の伝達関数
直列RLC回路でコンデンサの電圧 $v_C(t)$ を出力とする場合を考えます。
キルヒホッフの電圧則より
$$ L \frac{di}{dt} + Ri + v_C = v_{in}(t) $$
$$ i = C \frac{dv_C}{dt} $$
第2式を第1式に代入すると
$$ LC \frac{d^2 v_C}{dt^2} + RC \frac{dv_C}{dt} + v_C = v_{in}(t) $$
ラプラス変換して整理すると
$$ G(s) = \frac{V_C(s)}{V_{in}(s)} = \frac{1}{LCs^2 + RCs + 1} = \frac{\frac{1}{LC}}{s^2 + \frac{R}{L}s + \frac{1}{LC}} $$
これは2次振動系の標準形と同じです。$\omega_n = \frac{1}{\sqrt{LC}}$、$\zeta = \frac{R}{2}\sqrt{\frac{C}{L}}$ と読み取れます。
Pythonでの実装
極零点配置とステップ応答
import numpy as np
import matplotlib.pyplot as plt
import control as ctrl
# 2次振動系: G(s) = wn^2 / (s^2 + 2*zeta*wn*s + wn^2)
wn = 2.0 # 固有角振動数
zetas = [0.2, 0.5, 0.7, 1.0, 1.5] # 減衰比
fig, axes = plt.subplots(1, 2, figsize=(14, 5))
# ステップ応答
ax1 = axes[0]
for zeta in zetas:
G = ctrl.tf([wn**2], [1, 2*zeta*wn, wn**2])
t, y = ctrl.step_response(G, T=np.linspace(0, 8, 500))
ax1.plot(t, y, label=f'$\\zeta$={zeta}', linewidth=2)
ax1.axhline(y=1.0, color='k', linestyle='--', alpha=0.3)
ax1.set_xlabel('Time [s]')
ax1.set_ylabel('Output y(t)')
ax1.set_title('Step Response of 2nd Order System')
ax1.legend()
ax1.grid(True, alpha=0.3)
ax1.set_xlim([0, 8])
# 極零点配置
ax2 = axes[1]
colors = plt.cm.tab10(np.linspace(0, 0.5, len(zetas)))
for zeta, color in zip(zetas, colors):
G = ctrl.tf([wn**2], [1, 2*zeta*wn, wn**2])
poles = ctrl.poles(G)
ax2.plot(poles.real, poles.imag, 'x', markersize=10,
markeredgewidth=2, color=color, label=f'$\\zeta$={zeta}')
# 虚軸
ax2.axvline(x=0, color='k', linewidth=0.5)
ax2.axhline(y=0, color='k', linewidth=0.5)
ax2.set_xlabel('Real')
ax2.set_ylabel('Imaginary')
ax2.set_title('Pole-Zero Map')
ax2.legend()
ax2.grid(True, alpha=0.3)
ax2.set_aspect('equal')
plt.tight_layout()
plt.show()
減衰比 $\zeta$ が小さいほど振動的な応答となり、$\zeta = 1$ で臨界減衰、$\zeta > 1$ で過減衰となることが確認できます。
1次遅れ系の時定数による応答変化
import numpy as np
import matplotlib.pyplot as plt
import control as ctrl
# 1次遅れ系: G(s) = K / (tau*s + 1)
K = 1.0
taus = [0.1, 0.5, 1.0, 2.0, 5.0]
plt.figure(figsize=(10, 5))
for tau in taus:
G = ctrl.tf([K], [tau, 1])
t, y = ctrl.step_response(G, T=np.linspace(0, 15, 500))
plt.plot(t, y, label=f'$\\tau$={tau}', linewidth=2)
plt.axhline(y=K, color='k', linestyle='--', alpha=0.3, label=f'Steady state = {K}')
plt.xlabel('Time [s]')
plt.ylabel('Output y(t)')
plt.title('First Order System: Effect of Time Constant')
plt.legend()
plt.grid(True, alpha=0.3)
plt.tight_layout()
plt.show()
時定数 $\tau$ が大きいほど応答が遅くなりますが、定常値は $K$ で同じです。$t = \tau$ で定常値の約63.2%に達します。
まとめ
本記事では、伝達関数の定義と求め方について解説しました。
- 伝達関数は $G(s) = Y(s)/U(s)$ で定義され、LTIシステムの入出力関係を $s$ 領域で表す
- 微分方程式からラプラス変換を用いて伝達関数を導出できる
- 極はシステムの応答モードを決定し、すべての極が左半面にあれば安定
- 2次系の減衰比 $\zeta$ により、不足減衰・臨界減衰・過減衰の応答特性が変わる
次のステップとして、以下の記事も参考にしてください。