交流回路の解析では、抵抗・インダクタ・キャパシタの振る舞いを複素インピーダンスで統一的に扱います。直流回路のオームの法則を複素数に拡張することで、微分方程式を解くことなく交流回路の定常応答を求めることができます。
本記事の内容
- 複素インピーダンス $Z = R + jX$ の定義
- R, L, C各素子のインピーダンス
- フェーザ表示
- 直列回路と並列回路
- Pythonでの周波数応答の可視化
前提知識
この記事を読む前に、以下の記事を読んでおくと理解が深まります。
フェーザ表示とは
正弦波電圧 $v(t) = V_m \cos(\omega t + \phi)$ をフェーザで表すと:
$$ \tilde{V} = V_m e^{j\phi} $$
$v(t)$ はフェーザの実部として復元できます:
$$ v(t) = \text{Re}\left[\tilde{V} e^{j\omega t}\right] $$
フェーザ表示では、微分が $j\omega$ の掛け算、積分が $1/(j\omega)$ の掛け算に置き換わります。
$$ \frac{d}{dt} \to j\omega, \quad \int dt \to \frac{1}{j\omega} $$
各素子のインピーダンス
抵抗 $R$
オームの法則 $v = Ri$ がそのまま成立:
$$ \boxed{Z_R = R} $$
電圧と電流は同位相です。
インダクタ $L$
$v = L \frac{di}{dt}$ をフェーザ表示すると $\tilde{V} = j\omega L \tilde{I}$:
$$ \boxed{Z_L = j\omega L} $$
電圧は電流より $90°$($\pi/2$)進みます。
キャパシタ $C$
$i = C \frac{dv}{dt}$ をフェーザ表示すると $\tilde{I} = j\omega C \tilde{V}$:
$$ \boxed{Z_C = \frac{1}{j\omega C} = -\frac{j}{\omega C}} $$
電圧は電流より $90°$($\pi/2$)遅れます。
複素インピーダンスの一般形
$$ Z = R + jX $$
- $R$: レジスタンス(実部) — エネルギーを消費
- $X$: リアクタンス(虚部) — エネルギーを蓄積・放出
$$ |Z| = \sqrt{R^2 + X^2}, \quad \phi = \arctan\frac{X}{R} $$
$|Z|$ はインピーダンスの大きさ、$\phi$ は電圧と電流の位相差です。
直列回路
直列接続のインピーダンスは各素子の和:
$$ Z_\text{series} = Z_1 + Z_2 + \cdots + Z_n $$
RLC直列回路
$$ Z = R + j\omega L + \frac{1}{j\omega C} = R + j\left(\omega L – \frac{1}{\omega C}\right) $$
$$ \boxed{|Z| = \sqrt{R^2 + \left(\omega L – \frac{1}{\omega C}\right)^2}} $$
共振条件 $\omega L = 1/(\omega C)$、すなわち $\omega_0 = 1/\sqrt{LC}$ のとき $|Z| = R$(最小)となります。
並列回路
並列接続のインピーダンスはアドミタンスの和:
$$ \frac{1}{Z_\text{parallel}} = \frac{1}{Z_1} + \frac{1}{Z_2} + \cdots + \frac{1}{Z_n} $$
2素子の場合:
$$ Z_\text{parallel} = \frac{Z_1 Z_2}{Z_1 + Z_2} $$
Pythonでの実装
import numpy as np
import matplotlib.pyplot as plt
# 回路パラメータ
R = 100.0 # [Ω]
L = 50e-3 # [H]
C = 10e-6 # [F]
# 周波数範囲
f = np.logspace(1, 5, 1000) # 10 Hz ~ 100 kHz
omega = 2 * np.pi * f
# 各素子のインピーダンス
Z_R = R * np.ones_like(omega)
Z_L = 1j * omega * L
Z_C = 1.0 / (1j * omega * C)
# RLC直列インピーダンス
Z_series = Z_R + Z_L + Z_C
# RLC並列インピーダンス
Z_parallel = 1.0 / (1.0/Z_R + 1.0/Z_L + 1.0/Z_C)
# 共振周波数
f0 = 1.0 / (2 * np.pi * np.sqrt(L * C))
print(f"共振周波数 f0 = {f0:.1f} Hz")
fig, axes = plt.subplots(2, 2, figsize=(14, 10))
# (a) 各素子のインピーダンスの大きさ
axes[0, 0].loglog(f, np.abs(Z_R), 'r-', linewidth=2, label='$|Z_R| = R$')
axes[0, 0].loglog(f, np.abs(Z_L), 'b-', linewidth=2, label='$|Z_L| = \\omega L$')
axes[0, 0].loglog(f, np.abs(Z_C), 'g-', linewidth=2, label='$|Z_C| = 1/\\omega C$')
axes[0, 0].axvline(f0, color='gray', linestyle='--', alpha=0.5, label=f'$f_0 = {f0:.0f}$ Hz')
axes[0, 0].set_xlabel('周波数 [Hz]')
axes[0, 0].set_ylabel('$|Z|$ [Ω]')
axes[0, 0].set_title('各素子のインピーダンス')
axes[0, 0].legend()
axes[0, 0].grid(True, alpha=0.3, which='both')
# (b) RLC直列回路
axes[0, 1].semilogy(f, np.abs(Z_series), 'b-', linewidth=2)
axes[0, 1].axvline(f0, color='r', linestyle='--', label=f'$f_0 = {f0:.0f}$ Hz')
axes[0, 1].set_xlabel('周波数 [Hz]')
axes[0, 1].set_ylabel('$|Z|$ [Ω]')
axes[0, 1].set_title('RLC直列回路のインピーダンス')
axes[0, 1].legend()
axes[0, 1].set_xscale('log')
axes[0, 1].grid(True, alpha=0.3, which='both')
# (c) RLC並列回路
axes[1, 0].semilogy(f, np.abs(Z_parallel), 'r-', linewidth=2)
axes[1, 0].axvline(f0, color='b', linestyle='--', label=f'$f_0 = {f0:.0f}$ Hz')
axes[1, 0].set_xlabel('周波数 [Hz]')
axes[1, 0].set_ylabel('$|Z|$ [Ω]')
axes[1, 0].set_title('RLC並列回路のインピーダンス')
axes[1, 0].legend()
axes[1, 0].set_xscale('log')
axes[1, 0].grid(True, alpha=0.3, which='both')
# (d) 位相
axes[1, 1].semilogx(f, np.degrees(np.angle(Z_series)), 'b-', linewidth=2, label='直列')
axes[1, 1].semilogx(f, np.degrees(np.angle(Z_parallel)), 'r-', linewidth=2, label='並列')
axes[1, 1].axvline(f0, color='gray', linestyle='--', alpha=0.5)
axes[1, 1].axhline(0, color='black', linewidth=0.5)
axes[1, 1].set_xlabel('周波数 [Hz]')
axes[1, 1].set_ylabel('位相 [deg]')
axes[1, 1].set_title('インピーダンスの位相')
axes[1, 1].legend()
axes[1, 1].grid(True, alpha=0.3, which='both')
axes[1, 1].set_ylim(-100, 100)
plt.tight_layout()
plt.savefig('impedance_ac_circuit.png', dpi=150, bbox_inches='tight')
plt.show()
まとめ
本記事では、インピーダンスと交流回路について解説しました。
- フェーザ表示により、微分方程式を代数方程式に変換できる
- $Z_R = R$、$Z_L = j\omega L$、$Z_C = 1/(j\omega C)$
- 複素インピーダンス $Z = R + jX$($R$: レジスタンス、$X$: リアクタンス)
- 直列は $Z$ の和、並列はアドミタンスの和
- RLC直列共振で $|Z|$ 最小、並列共振で $|Z|$ 最大
次のステップとして、以下の記事も参考にしてください。