スイッチトキャパシタ(Switched Capacitor, SC)回路は、抵抗器の代わりにスイッチとコンデンサを用いて信号処理を行う回路です。特にCMOS技術で実現される積分器やフィルタに広く応用されており、アナログ集積回路設計において重要な技術です。
ここでは、名古屋大学OCWの資料「スイッチトキャパシタ回路」第12回講義資料に基づいて、SC回路の基本である「等価抵抗」の概念をPythonを用いてシミュレーションし、可視化します。
1. SC回路と等価抵抗
スイッチで周期的に充放電を行うことで、コンデンサが「擬似的な抵抗」として振る舞います。基本式は以下の通りです:
[
R_{\text{eq}} = \frac{T}{C}
]
- ( T ):クロック周期(スイッチのオン・オフ周期)
- ( C ):コンデンサの容量
この等価抵抗を持つ一次遅れ回路 ( G(s) = \frac{1}{1 + sAT} ) のステップ応答とそのサンプル&ホールド挙動、さらに周波数特性をPythonで確認していきましょう。
2. Pythonコードによるシミュレーション
以下のコードでは、SC回路に相当する一次遅れ系のステップ応答・サンプル&ホールド挙動・ボード線図を確認できます。
主要パラメータ
- ( C_1 = 1 \mu F ), ( C_2 = 2 \mu F )
- ( A = C_2/C_1 = 2 )
- ( T = 100 \mu s )
- ( \tau = AT = 200 \mu s )
import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import lti, step, bode
from scipy.interpolate import interp1d
# --- パラメータ設定 / Parameter Settings ---
T = 0.0001 # 基本周期 / Base time [s]
C1 = 1e-6 # 容量 C1 / Capacitance C1 [F]
C2 = 2e-6 # 容量 C2 / Capacitance C2 [F]
A = C2 / C1 # A = C2 / C1
tau = T * A # 時定数 τ = T * A
f = 1 / T # サンプリング周波数 / Sampling frequency [Hz]
# --- 伝達関数 G(s) = 1 / (1 + sAT) ---
num = [1]
den = [A*T, 1] # 一次遅れシステムの分母
system = lti(num, den)
# --- ステップ応答(=逆ラプラス変換) / Step response ---
t = np.linspace(0, 10*T, 1000)
t, y = step(system, T=t)
# --- サンプル&ホールド処理 / Sample and Hold ---
sample_period = T
sample_times = np.arange(0, t[-1], sample_period)
sampled_values = np.interp(sample_times, t, y)
# ホールド波形を作成 / Create hold waveform
hold_func = interp1d(sample_times, sampled_values, kind='previous', bounds_error=False, fill_value=(0, sampled_values[-1]))
y_hold = hold_func(t)
# --- プロット1: ステップ応答とS/H ---
plt.figure(figsize=(10, 5))
plt.plot(t * 1000, y, label='Original Response (1/(1+sAT))', linewidth=2)
plt.plot(t * 1000, y_hold, '--', label='Sample & Hold at f=1/T', linewidth=1.5)
plt.title('Step Response and Sample & Hold of 1/(1+sAT)')
plt.xlabel('Time [ms]')
plt.ylabel('Amplitude')
plt.grid(True)
plt.legend()
plt.tight_layout()
plt.show()
# --- ボード線図 / Bode Plot for 1/(1 + sAT) ---
w, mag, phase = bode(system)
# --- プロット2: ゲイン特性(ボード線図) / Bode Magnitude ---
plt.figure()
plt.semilogx(w, mag)
plt.title('Bode Plot (Magnitude) of 1/(1+sAT)')
plt.xlabel('Frequency [rad/s]')
plt.ylabel('Magnitude [dB]')
plt.grid(True)
plt.tight_layout()
plt.show()
# --- プロット3: 位相特性 / Phase Plot ---
plt.figure()
plt.semilogx(w, phase)
plt.title('Bode Plot (Phase) of 1/(1+sAT)')
plt.xlabel('Frequency [rad/s]')
plt.ylabel('Phase [degrees]')
plt.grid(True)
plt.tight_layout()
plt.show()
3. シミュレーション結果の解説
ステップ応答とサンプル&ホールド
- 青線:連続時間の応答(理想的な一次遅れ系)
- 点線:SC動作により周期的にサンプリングされたホールド波形
これにより、スイッチトキャパシタ回路の応答が、サンプリング周波数に応じてどのように変化するかが直感的に理解できます。
ボード線図(周波数特性)
- ゲイン特性は -3dB 点で角周波数 ( \omega = 1/AT ) に対応します。
- 位相遅れも周波数に依存して変化し、典型的な一次遅れの特性を示します。
結果
4. 学術的背景(出典)
本記事の理論背景および数式は、名古屋大学OCW資料に基づいています:
この資料では、スイッチドキャパシタを使った積分器やフィルタ設計についても丁寧に解説されており、実用的な設計にも応用できます。