从电路到代码:用Python模拟LTI连续系统响应(附RLC电路实例)
·
从电路到代码:用Python模拟LTI连续系统响应(附RLC电路实例)
在工程实践中,理解线性时不变(LTI)系统的动态响应是控制系统设计和信号处理的基础。传统教材往往侧重于数学推导,而本文将带您用Python代码"触摸"这些抽象概念——通过搭建RLC电路模型,直观展示零输入响应、零状态响应的生成机制,让微分方程在屏幕上"活"起来。
1. 环境准备与理论基础
1.1 必备工具链
- Python科学计算三件套 :
import numpy as np import matplotlib.pyplot as plt from scipy.integrate import solve_ivp - 电路建模原理 : RLC串联电路的微分方程可表示为:
其中L为电感(H),R为电阻(Ω),C为电容(F),Vs为激励电压。L*d²i/dt² + R*di/dt + (1/C)*i = dVs/dt
1.2 状态空间转换
将二阶微分方程转化为一阶方程组是数值求解的关键步骤。对于RLC电路:
def circuit_model(t, y, R, L, C, Vs):
# y[0]: 电容电压, y[1]: 电感电流
dydt = [
y[1]/C, # dvC/dt
(Vs(t) - R*y[1] - y[0])/L # diL/dt
]
return dydt
注意:状态变量选择会影响方程形式,电容电压和电感电流是常用组合
2. 零输入响应实战分析
2.1 初始能量释放过程
假设电容已充电至5V,电感电流为0A:
R, L, C = 100, 0.1, 1e-6 # 参数设置
t_span = [0, 0.005] # 5ms观察窗口
y0 = [5, 0] # 初始条件
def zero_input(t):
return 0 # 无外部激励
sol = solve_ivp(circuit_model, t_span, y0,
args=(R, L, C, zero_input),
max_step=1e-6)
2.2 阻尼特性可视化
不同电阻值导致的响应形态对比:
| 阻尼类型 | R值范围 | 特征波形 | 应用场景 |
|---|---|---|---|
| 过阻尼 | R > 2√(L/C) | 单调衰减 | 防振荡电路 |
| 临界阻尼 | R = 2√(L/C) | 最快稳定 | 精密仪器 |
| 欠阻尼 | R < 2√(L/C) | 振荡衰减 | 滤波器设计 |
plt.figure(figsize=(10,6))
plt.plot(sol.t, sol.y[0], label='Capacitor Voltage')
plt.xlabel('Time (s)'); plt.ylabel('Voltage (V)')
plt.title('Zero Input Response of RLC Circuit')
plt.grid(True); plt.legend()
3. 零状态响应仿真技巧
3.1 阶跃激励实现
def step_voltage(t, t0=1e-4, V=3):
return V if t >= t0 else 0
sol_step = solve_ivp(circuit_model, t_span, [0,0],
args=(R, L, C, step_voltage),
max_step=1e-6)
3.2 动态响应分解
- 瞬态分量 :特征根决定的指数衰减项
- 稳态分量 :激励信号决定的最终稳定值
# 提取稳态值
steady_state = sol_step.y[0][-1]
transient = sol_step.y[0] - steady_state
4. 完整响应与参数扫描
4.1 参数影响分析
通过交互式控件实时观察元件值变化的影响:
from ipywidgets import interact
@interact(L=(0.01, 1, 0.01), C=(1e-9, 1e-5, 1e-9))
def plot_response(L=0.1, C=1e-6):
sol = solve_ivp(circuit_model, t_span, y0,
args=(R, L, C, step_voltage))
plt.plot(sol.t, sol.y[0])
4.2 频域特性验证
通过FFT验证系统的低通特性:
freq = np.fft.fftfreq(len(sol_step.t), d=sol_step.t[1]-sol_step.t[0])
fft_result = np.fft.fft(sol_step.y[0])
plt.semilogx(freq[:N//2], 20*np.log10(np.abs(fft_result[:N//2])))
5. 工程实践中的陷阱与对策
5.1 数值稳定性问题
- 步长选择 :过大导致失真,过小增加计算量
- 奇异矩阵 :当C→0时需调整方程形式
5.2 模型验证方法
# 能量守恒验证
total_energy = 0.5*C*sol.y[0]**2 + 0.5*L*sol.y[1]**2
plt.plot(sol.t, total_energy, '--', label='Total Energy')
在最近的一个滤波器设计项目中,发现当电阻值低于临界阻尼点时,仿真结果与实际示波器测量存在约8%的偏差。后来通过引入导线寄生电感参数(约50nH)后,仿真与实测完美吻合。这个案例说明,即使是简单的RLC模型,也需要考虑实际中的二阶效应。
更多推荐

所有评论(0)