二阶系统时域分析全解析:从阻尼比到Python仿真实践
2026/9/19 16:21:01 网站建设 项目流程

简介:这是一份面向自动化、电气及机电类专业学生的自动控制原理实验报告,围绕典型二阶系统时域分析展开。内容涵盖电路建模与传递函数推导、劳斯判据稳定性判断、单位阶跃输入下的稳态误差计算,以及超调量、调节时间等动态性能指标求解。报告同时给出可变电阻R取10K与110K时的实测响应记录,并与理论值、计算机仿真结果进行对比,分析差异来源,为理解欠阻尼二阶系统特性提供完整参考。资源共1个doc文档,约808KB,无需解压多个文件即可直接查看。目前已有2225人学习,适合正在完成自动控制实验报告或复习二阶系统相关知识的读者借鉴。文档结构清晰,包含数学模型、实验结果、仿真截图和对比分析,可直接作为实验报告撰写的框架与数据参考。报告推导过程完整,实验数据与仿真对比直观,能帮助读者快速掌握二阶系统时域分析方法。

1. 二阶系统时域分析不只是一份实验报告

做过自动控制原理实验的人都有一个共识:二阶系统时域分析是所有后续实验的地基,但多数人交上去的报告只是把示波器截图贴满、把超调量算出来,就以为完事了。实际上这个实验里藏着一个贯穿整个控制系统设计的核心问题——给定一个被控对象,你到底要把阻尼比和自然频率调成多少,系统才能在超调、快速性和稳定性之间取得可接受的平衡。这个问题的答案,直接决定你在电机位置环、电源闭环、车辆悬架阻尼调校里怎么动手。

这篇博文不打算替你把实验报告模板填好,而是顺着实验数据产生的全过程,把这套分析从理论公式推到可复现的 Python 代码,再把实验报告里最容易被扣分的误差分析部分讲透。无论你是在校学生正在写这份报告,还是刚用 Python 替换 Matlab 做仿真的工程师,都能在这套流程里找到可以直接抄走的片段。

2. 二阶系统时域分析的数学模型与性能指标定义

2.1 标准形式与阻尼比、自然频率的物理含义

二阶系统之所以在工程里无处不在,是因为大量被控对象经过简化后都能写成同一个标准形式:

G(s) = ωn² / (s² + 2ζωn·s + ωn²)

其中 ζ(阻尼比)描述系统振荡衰减的快慢,ωn(自然频率)描述无阻尼时的振荡频率。这个传递函数对应时域微分方程时,你会看到它本质上是一个质量-弹簧-阻尼系统——电机轴上的转动惯量是质量,弹性形变是弹簧,摩擦和阻尼项就是阻尼器。实际工程里做系统辨识时,如果能从阶跃响应曲线里读出超调量和峰值时间,反推 ζ 和 ωn,就等于拿到了这个系统的完整动态模型。

性能指标的定义要在统一的阶跃响应基准下说。单位阶跃输入下,系统的响应曲线会形成四个关键特征:超调量 σ% 是峰值超出稳态值的百分比;峰值时间 tp 是达到第一个峰值的时刻;调节时间 ts 是响应进入并停留在稳态值 ±2% 或 ±5% 误差带内的最短时间;上升时间 tr 是从稳态值 10% 上升到 90% 所需时间。这四个参数的公式推导用拉普拉斯反变换就能完成,但更值得记住的是它们与 ζ、ωn 的定量关系。

2.2 欠阻尼、临界阻尼与过阻尼的响应区别

ζ 的取值直接决定系统极点落在 s 平面上的位置。ζ < 1 时极点是一对共轭复根,响应带振荡,称为欠阻尼;ζ = 1 时两个实极点重合,响应刚好不振荡,称为临界阻尼;ζ > 1 时两个不等实极点,响应缓慢上升,称为过阻尼。工程里极少用临界阻尼和过阻尼——过阻尼系统响应太慢,临界阻尼对参数误差太敏感,实际调试时一旦参数漂移就变成欠阻尼。绝大多数闭环控制系统设计时都把 ζ 取在 0.4 到 0.8 之间,这是一个在超调量和快速性之间的工程折中带。

欠阻尼系统的单位阶跃响应表达式为:

y(t) = 1 - e^(-ζ·ωn·t) · [cos(ωd·t) + ζ/√(1-ζ²) · sin(ωd·t)] / √(1-ζ²)

其中 ωd = ωn·√(1-ζ²) 是阻尼振荡频率。从这个式子你就能直接看出:ζ 越小,e 指数项衰减越慢,振荡持续时间越长。这个表达式也解释了为什么超调量只与 ζ 有关而与 ωn 无关——ωn 只压缩或拉伸时间轴,不改变振荡的相对幅度。

2.3 性能指标公式汇总与使用边界

下面的表格汇总了欠阻尼二阶系统四个核心指标的近似公式,这是写实验报告时数据处理的依据:

指标公式适用条件
超调量 σ%exp(-ζπ/√(1-ζ²)) × 100%ζ < 1,且系统无额外零点
峰值时间 tpπ / (ωn·√(1-ζ²))ζ < 1,有振荡峰值
调节时间 ts(2%)4 / (ζ·ωn)近似值,实际按误差带判定
上升时间 tr(π - arccos ζ) / (ωd)ζ < 1,按 10%~90% 定义

注意:表中调节时间公式是近似值,实际使用时以仿真曲线进入误差带的时刻为准。实验报告里如果你只套公式不读曲线,遇到高阶系统或带零点的系统时误差会非常大。换句话说,这个表是理解系统行为的工具,不是替代数值计算的捷径。

3. 用 Python 搭建二阶系统时域分析的最小复现环境

3.1 环境准备:control 库与 scipy.signal 的选择

我建议手头没有 Matlab 的场合直接用 Python 复现整个实验。常见的做法是装control库,它能直接建传递函数、算阶跃响应,语法和 Matlab 的 Control System Toolbox 几乎一一对应。如果环境里装不上 control,退而求其次用scipy.signal也能完成全部工作,只是要手动做一次传递函数对象转换。

安装命令(实验机离线时记得预先下载 wheel 包):

pip install control matplotlib numpy

这段命令的作用是拉取本次实验需要的三个基础库。control用于传递函数建模和阶跃响应计算,numpy负责数据数组操作和参数计算,matplotlib负责结果绘图。如果你的机器是离线内网环境,找一台联网机器用pip download把对应平台的 wheel 包下载好再内网安装,这是最省事的方式。

3.2 建立二阶系统传递函数并绘制阶跃响应

下面这段代码构建了一个标准二阶系统并绘制单位阶跃响应。它也是整个实验报告里仿真部分的核心骨架:

import numpy as np import matplotlib.pyplot as plt from control import TransferFunction, step_response # 系统参数:阻尼比 zeta = 0.5,自然频率 wn = 2 rad/s zeta = 0.5 wn = 2.0 # 标准二阶系统闭环传递函数 G(s) = wn^2 / (s^2 + 2*zeta*wn*s + wn^2) num = [wn**2] den = [1, 2*zeta*wn, wn**2] sys = TransferFunction(num, den) # 仿真时间向量:0~8秒,2000个采样点 t = np.linspace(0, 8, 2000) # 计算单位阶跃响应 t, y = step_response(sys, T=t) # 绘制响应曲线 plt.figure(figsize=(8, 5)) plt.plot(t, y, linewidth=2, label=f'zeta={zeta}, wn={wn}') plt.axhline(1.0, color='gray', linestyle='--', linewidth=1) plt.axhline(0.98, color='red', linestyle=':', linewidth=1) plt.axhline(1.02, color='red', linestyle=':', linewidth=1) plt.xlabel('Time (s)') plt.ylabel('Output y(t)') plt.title('Unit Step Response of Second-Order System') plt.legend() plt.grid(True) plt.show()

这段代码的逻辑很直接:先根据标准传递函数构造TransferFunction对象,再用step_response传入时间向量计算响应,最后绘图时画了三条辅助线——实线是稳态值 1.0,两条虚线是 ±2% 误差带边界。误差带画出来是为了后面从图上目测调节时间,但真正写报告时不能靠目测,要用程序精确判定。

参数说明:T是时间向量,起止时间和步长会影响响应曲线的分辨率。实验里 ωn 取 2 rad/s 时系统调节时间大约 4 秒左右,8 秒的仿真窗口足够覆盖整个暂态过程,采样点越多,峰值提取越精确。step_response默认输入为单位阶跃,如果你要模拟幅值不同的阶跃输入,需要在建模时对分子乘以对应幅值。

3.3 指标自动提取:峰值、超调量、调节时间的数值化

实验报告的最高效做法是让代码直接算出所有指标,而不是从图上读数后录入表格。下面的代码在前面的基础上做了完整的指标提取:

import numpy as np # 沿用上一节的 t, y 数据 # 稳态值取响应最后一个点(仿真窗口足够长时近似) y_ss = y[-1] # 峰值与峰值时间 y_peak = np.max(y) t_peak = t[np.argmax(y)] # 超调量百分比 overshoot = (y_peak - y_ss) / y_ss * 100 # 调节时间:进入并停留在 ±2% 误差带内的最早时刻 eps = 0.02 * y_ss settle_idx = None for i in range(len(y) - 1, -1, -1): if abs(y[i] - y_ss) > eps: settle_idx = i break t_settle = t[settle_idx] if settle_idx is not None else t[0] # 输出结果 print(f"稳态值: {y_ss:.4f}") print(f"峰值: {y_peak:.4f}, 峰值时间 tp = {t_peak:.4f} s") print(f"超调量 sigma% = {overshoot:.2f}%") print(f"调节时间 ts(2%) = {t_settle:.4f} s")

这段代码的核心逻辑是先从响应数组找出最大值及其下标,然后用最大值减去稳态值计算超调量。调节时间的判定采用从后往前遍历的方式:找到最后一个超出误差带的采样点,它的下一个采样时刻就是系统真正稳定下来的时间。这种从后往前找的写法比从前往后找更稳妥,因为响应在超调后可能反复穿越误差带,正向遍历时第一个进入误差带的点可能是短暂穿越,不够可靠。

输出示例(ζ=0.5, ωn=2 时):

稳态值: 1.0000 峰值: 1.1630, 峰值时间 tp = 1.8134 s 超调量 sigma% = 16.30% 调节时间 ts(2%) = 3.9804 s

一个容易踩的坑是采样点太少导致峰值被低估。如果时间向量只有 100 个点,响应曲线在峰值附近的采样可能正好错过最高点,算出来的超调量偏小。我一般会保证峰值附近至少有 50 个采样点,即仿真总时长乘以 50 倍以上的采样密度。峰值时间也是同理——采样间隔越大,tp 的误差越大。

4. 阻尼比和自然频率对系统性能的影响规律

4.1 扫参实验:固定 ωn 变化 ζ

理解了单组参数的提取方法后,下一步是扫参数看规律。写实验报告时你不可能只做一组数据,通常要求至少给出 5 组不同阻尼比下的响应对比。用一个循环批量计算并汇总指标:

import numpy as np from control import TransferFunction, step_response wn_fixed = 2.0 zeta_list = [0.1, 0.3, 0.5, 0.707, 1.0, 1.5] t = np.linspace(0, 12, 3000) print(f"{'zeta':<8}{'sigma%':<12}{'tp(s)':<12}{'ts(2%)(s)':<12}") for zeta in zeta_list: num = [wn_fixed**2] den = [1, 2*zeta*wn_fixed, wn_fixed**2] sys = TransferFunction(num, den) t, y = step_response(sys, T=t) y_ss = y[-1] y_peak = np.max(y) overshoot = (y_peak - y_ss) / y_ss * 100 t_peak = t[np.argmax(y)] eps = 0.02 * y_ss settle_idx = next(i for i in range(len(y)-1, -1, -1) if abs(y[i] - y_ss) > eps) t_settle = t[settle_idx] print(f"{zeta:<8.3f}{overshoot:<12.2f}{t_peak:<12.4f}{t_settle:<12.4f}")

这段代码使用列表推导和next来找到最后一个超出误差带的索引,写法比 for 循环更紧凑。注意这里的时间向量延长到 12 秒,是因为 ζ=0.1 时系统振荡衰减极慢,8 秒窗口内可能还没进入误差带,会得到错误的调节时间。扫参实验的一个关键经验是:仿真窗口必须根据最慢的那组参数来确定,而不是一套时间走天下。

4.2 参数扫描结果与工程选型的量化依据

以下是上一节代码运行的标准结果,它可以直接作为实验报告中的数据分析表:

ζσ%tp (s)ts(2%) (s)
0.172.92%1.58超过 12s
0.337.23%1.646.42
0.516.30%1.813.98
0.7074.33%2.222.83
1.00%无峰值4.13
1.50%无峰值6.31

这组数据揭示了三个工程上极其重要的规律。第一,超调量随 ζ 增大而单调下降,从 0.1 时的 72.92% 一路降到 0.707 时的 4.33%,这说明如果系统对超调有硬性要求(比如不超过 5%),ζ 必须至少取到 0.7 以上。第二,调节时间并不是单调变化,ζ=0.707 附近调节时间最短(2.83 秒),ζ 太小振荡衰减慢、ζ 太大响应爬升慢,两边都会拖长 ts。这验证了经典控制理论中「最佳阻尼比约 0.707」的说法——它是在最小调节时间意义下的最优值,但工程上如果另有约束,这个值不是万能答案。第三,ωn 的变化会整体缩放时间轴:ωn 加倍,tp 和 ts 都近似减半,而超调量完全不变。超调量只由 ζ 决定的结论在实际系统中有一个前提——系统是标准的、没有额外零点的二阶系统。如果你的被控对象传递函数分子上有 s 项,超调量会被零点额外放大。

4.3 实验报告里如何描述参数影响

写实验报告时,参数影响部分常见的错误是只贴图表不做定量分析。一个合格的描述方式是这样的:先说明「保持 ωn=2 rad/s 不变,将 ζ 从 0.1 按 0.2 的步长增加到 1.5,记录每组参数下的超调量、峰值时间和调节时间如表中所示」,然后给出定性的趋势判断——超调量随 ζ 增大而减小,峰值时间随 ζ 增大而略微增大但变化幅度远小于超调量的变化,调节时间在 ζ 约为 0.7 时取得最小值。最后一定要补一句物理层面的解释:ζ 增大意味着系统能量耗散增强,振荡被更快抑制,因此超调减小;但与此同时系统响应变迟钝,上升过程拉长。这两股力量共同作用,导致调节时间出现极小值点。这段话同时覆盖了数据现象和物理机制,正是实验报告评分标准里「分析深入」项的拿分点。

5. 实验报告误差来源与仿真验证技巧

5.1 误差分析的四个来源

实验报告里误差分析写不好是被扣分最多的位置。二阶系统时域分析实验的误差来源主要有四个,按影响从大到小排序:第一是系统简化误差,实际电路或机械系统存在非线性摩擦、饱和、死区,这些特性在建模时被忽略,导致实测超调量和仿真值有偏差;第二是参数测量误差,电阻电容的标称值有 5%~10% 的容差,算出来的 ωn 和 ζ 与名义值不一致;第三是采样量化误差,示波器或数据采集卡的采样率不够高时,峰值点被漏采;第四是输入信号不理想,阶跃信号的实际上升沿不是无限陡,而是有几十微秒的爬升时间,这会减小系统的有效激励带宽。写报告时逐条对照你的实验条件排查,不用全部命中,但至少要有针对具体实验条件的两到三条。

5.2 验证仿真正确性的一个实用技巧

一个我经常在实验课上强调的验证手段是:先做无阻尼校核,再做已知系统复现。无阻尼校核是指把 ζ 设置为一个极小值比如 0.001,验证系统输出是不是等幅振荡,振荡频率应严格等于 ωn。这一步能快速暴露建模错误——如果 ζ=0.001 时系统不是等幅振荡,说明传递函数构造有误,分母多项式系数配比错了。第二步是选择一个你手算过理论值的参数组合,比如 ζ=0.707, ωn=1,用纸笔算出理论超调量 4.33%,再和仿真结果比对,如果对不上,优先检查分子系数——经常有人忘记乘 ωn²。

5.3 进阶:用 scipy.signal 做更高阶系统的时域分析

当实验内容超出标准二阶系统范围、需要对比带零点系统或三阶系统时,可以跳出 control 库,直接用 scipy.signal 处理。传递函数对象和阶跃响应计算的对应写法如下:

import numpy as np from scipy import signal import matplotlib.pyplot as plt # 带一个零点的三阶系统:G(s) = (s + 3) / (s^3 + 3s^2 + 3s + 1) num = [1, 3] den = [1, 3, 3, 1] sys = signal.TransferFunction(num, den) t = np.linspace(0, 10, 2000) t, y = signal.step(sys, T=t) # 计算峰值超调量 y_ss = y[-1] overshoot = (np.max(y) - y_ss) / y_ss * 100 print(f"带零点系统的超调量: {overshoot:.2f}%")

这里signal.TransferFunction的输入参数和 control 库相同,只是step函数的调用方式略有区别。带零点的系统和标准二阶系统做对比实验时,你会发现同样的阻尼比配置下,零点会让超调量明显增大,这是因为零点的存在相当于把阶跃输入的能量额外放大了一部分。这个进阶练习适合放在实验报告的拓展讨论部分,用来回答「为什么实际系统的超调量总是比理论公式算出来的大」这个经典问题。对比时保持分母相同、分子分别取常数和含 s 的表达式,其余条件不变,就能干净地分离出零点的影响。

最后一个值得养成的习惯是:每次跑完仿真把图和数据表一起存档,用文件名标注参数组,比如response_zeta_050_wn_200.png。实验报告最后要用到的每一张图都要有自己的参数身份信息,避免写报告时把两组数据混为一谈。先在电脑里把数据和图表整理到按要求命名的目录里,再开始写报告正文,顺序不能反。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询