伝達関数の定義と求め方をわかりやすく解説

伝達関数は、線形時不変(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$ により、不足減衰・臨界減衰・過減衰の応答特性が変わる

次のステップとして、以下の記事も参考にしてください。