二阶系统时域分析:阻尼比、超调量与MATLAB参数提取实战 简介二阶系统时域分析是自动控制原理课程中的典型实验这份文档完整呈现了从数学建模到实验仿真的全过程。内容涵盖二阶系统传递函数推导、劳斯判据稳定性验证、单位阶跃输入下的稳态误差计算以及超调量、调节时间等动态性能指标分析同时记录了可调电阻为10千欧和110千欧两种参数下的实测波形并与理论值、仿真结果做了对比能帮助读者理解欠阻尼二阶系统的响应特征及误差来源。报告从原理出发一步步展示从电路方程到闭环传递函数的推导思路并附有劳斯表构造过程和阶跃响应曲线特征说明便于自学者按步骤核对。资源为单个Word文档约808KB适合自动化、电气等专业的学生作为实验报告模板或复习参考。这份报告已在CSDN上被2225人浏览学习对于正在完成同类实验、需要规范报告结构或核对计算方法的读者很有参考价值。1. 二阶系统时域分析为什么是自动控制原理实验里的第一道坎做过自动控制原理实验的人大多有这种体验二阶系统时域分析这一节课上阻尼比、自然频率、超调量算得清清楚楚进了实验室阶跃曲线在示波器上冲出来峰值好像有又似乎被噪声吃掉了一点尺子量完再和公式对照误差总在“能解释”和“不太好解释”之间晃。问题往往不是计算器按错而是对峰值时间 tp、超调量 Mp、调节时间 ts 这几个性能指标的定义边界掌握得不够——读数该取峰顶还是包络线调节时间按 2% 还是 5% 容差反推阻尼比时激励是否真的保持了线性二阶条件。这篇文章把从传递函数到实验报告的整条路径梳理一遍给出能在 MATLAB/Simulink 里直接复现的脚本和参数提取方法也把实验数据回推 ζ、ωn 的坑讲清楚适合自动化、机器人、嵌入式方向准备控制类实验或课程设计的人对照操作。2. 二阶系统传递函数与特征参数先把时域指标体系立住2.1 标准型传函里为何只保留阻尼比和自然频率二阶系统时域分析里几乎所有结论都建立在一个标准式上G(s) ωn² / (s² 2ζωn·s ωn²)ωn 是自然角频率ζ 是阻尼比。这两个参数不是凭空定义出来的抽象概念它们直接映射到实际物理环节。电机转速闭环、质量-弹簧-阻尼系统、RLC 无源滤波器只要系统在关注频带内表现为“一个惯性环节串联一个储能环节”就能化成这个结构。实验室里最常见的被测对象是 RLC 串联电路电容电压对输入电压的传递函数是G(s) (1/LC) / (s² (R/L)s 1/LC)对照标准式得到ωn 1 / √(LC) 2ζωn R / L即 ζ (R/2)·√(C/L)这组关系是实验设计的第一依据调电阻 R 直接调阻尼比改 L 和 C 改变自然频率。给实验报告写“被测对象参数”时通常先把这组式子列出来再给出实际元件值。一个容易忽略的前提是标准式隐含单位负反馈和线性时不变假设。如果实验中系统处于开环测量状态或者输入幅值大到进入饱和区模型的适用性就要重新评估。后面第 3.3 节会专门讨论这一点。2.2 欠阻尼响应解析式与四项时域指标的推导当 0 ζ 1 时系统有一对共轭复根单位阶跃响应的完整表达式是y(t) 1 - [e^(-ζωn·t) / √(1-ζ²)] · sin(ωd·t φ)其中ωd ωn·√(1-ζ²) φ arctan(√(1-ζ²) / ζ)ωd 是阻尼振荡频率它决定了曲线相邻两个波峰之间的距离。由这个式子上包络线和三角函数的极值条件可以推出四个经典时域指标指标公式含义峰值时间 tpπ / ωd第一次到达最大值的时间超调量 Mpexp(-ζπ/√(1-ζ²)) × 100%峰值超出稳态值的百分比调节时间 ts4 / (ζωn)2% 容差曲线进入并保持误差带上升时间 tr(π - φ) / ωd首次从 0 上升到稳态值注意ts 的 4/(ζωn) 是包络线近似不是解析解。如果报告要求 5% 容差则换成 3/(ζωn)。同一系统按两种容差读数ts 差出约 33%报告中必须写明。为了快速核对数值可以用一段 Python 计算import numpy as np zeta 0.5 # 阻尼比 wn 10.0 # 自然频率 rad/s wd wn * np.sqrt(1 - zeta**2) tp np.pi / wd Mp np.exp(-zeta * np.pi / np.sqrt(1 - zeta**2)) * 100 ts 4 / (zeta * wn) # 2% 容差 print(ftp {tp:.4f} s) print(fMp {Mp:.2f} %) print(fts {ts:.4f} s)这组指标只对 0 ζ 1 成立。ζ 接近 1 时振荡周期趋近无穷大tp 的“峰”不再明显ζ 小于 0.2 时系统振荡次数多实验中数字示波器的采样率就开始影响读数精度。后面分析实验数据时先判断响应属于哪个阻尼区间是比直接套公式更重要的一步。2.3 阻尼比对响应形态的影响与实验可观测边界把 ζ 分成四个区间看实验现象完全不同ζ 区间特征根分布阶跃响应形态实验可见现象ζ 0纯虚根等幅振荡曲线不衰减数字示波器上呈稳定正弦0 ζ 1共轭复根衰减振荡有超调峰值、包络线、次峰依次可见ζ 1重实根无超调、最快收敛临界状态元件参数极难精确复现ζ 1两个负实根单调上升无明显超调tp 和 Mp 指标失去意义实验开始时先用阶跃信号扫一版肉眼看曲线形态。如果观察到单调上升且无回冲说明系统落在过阻尼区强行按欠阻尼公式反推 ζ 会算出虚数来。这样一种“先看形态、再套公式”的习惯能省掉后面大量对不上的时间。3. 用 MATLAB/Simulink 复现二阶系统时域曲线并提取指标3.1 step 与 stepinfo 的最小验证脚本做实验前先在 MATLAB 里跑一遍理论曲线是确认后续读数算法是否可靠的最快路径。下面这段脚本是从零开始解析响应曲线并提取 tp、Mp、ts再和 MATLAB 自带stepinfo的结果对照% 二阶系统时域分析最小仿真脚本 zeta 0.4; % 阻尼比 wn 10; % 自然频率 rad/s G tf([wn^2], [1, 2*zeta*wn, wn^2]); t 0:1e-4:2; % 仿真 2 秒步长 0.1 ms y step(G, t); % 单位阶跃响应 % 提取峰值时间和超调量 [ymax, idx] max(y); tp t(idx); Mp (ymax - 1) * 100; % 稳态值为 1 % 提取调节时间最后一次越过 2% 误差带的时刻 idx_ts find(abs(y - 1) 0.02, 1, last); ts t(idx_ts); % 与 MATLAB 自带函数对照 info stepinfo(G); fprintf(stepinfo: tp%.4f, Mp%.2f%%, ts%.4f\n, ... info.PeakTime, info.Overshoot, info.SettlingTime); fprintf(手动提取: tp%.4f, Mp%.2f%%, ts%.4f\n, tp, Mp, ts);参数说明tf([wn^2], [1, 2*zeta*wn, wn^2])第一个向量是分子系数第二个是分母系数注意分母从 s² 项开始写顺序不能错。t 0:1e-4:2决定峰值读数的分辨率。ζ0.4、ωn10 时 tp 在 0.34s 附近0.1ms 步长带来的误差不到 0.03%够用。如果 ζ 很小振荡周期变长步长要再缩一个量级。find(..., 1, last)返回的是最后一次越过 2% 误差带的时刻比“第一次进入误差带”更贴近运行到最终调节时间的教科书定义。手动画线时容易把第一次越过 0.98 当成 ts两者之间会差出一个振荡周期。stepinfo输出的 Overshoot 已经是百分比形式。它内部同样依赖步进求解精度所以步长太粗时也会偏离理论值。提示使用stepinfo前先确认系统稳态值为 1。如果传递函数分子是 K稳态值不是 1超调量结果会整体偏移先用dcgain归一化再交给函数。3.2 Simulink 模型搭建与滚动实验仿真通过后再搭 Simulink 模型用途是快速改参数看曲线形态变化。常见做法是放四个模块Step 信号源、Transfer Fcn、Scope、To Workspace。配置项推荐值作用Step time0阶跃在 0 时刻接入Initial value0零初值条件Final value1单位阶跃Transfer Fcn Numerator[wn^2]增益补偿稳态值为 1Transfer Fcn Denominator[1, 2zetawn, wn^2]标准二阶分母Solverode45默认自适应步长足够Max step size1e-3防止峰值被大步长跳过模型中 To Workspace 输出 y 和 tout方便把数据取回工作区做指标提取。Scope 只用来观察不能直接导出数据——这一步是很多人写实验报告时才发现的坑。在 Simulink 里反复改 ζ 从 0.2 到 0.8可以直观看到峰值逐渐变矮、振荡次数减少。建议每次改完把 y 存成不同的数组变量比如y_zeta02、y_zeta05避免覆盖后还要重新仿真。3.3 噪声滤波和线性边界对读数的影响实测曲线不会像仿真那么干净。传感器噪声和示波器量化误差会让峰值附近出现毛刺直接影响max(y)的结果。实验室常用滑动平均做预处理% 滑动平均平滑实测曲线 y_smooth movmean(y, 15); % 窗口设为 15 个采样点 [ymax, idx] max(y_smooth);窗口越大曲线越平但峰值时间会被人为滞后。实测信号采样率如果是 1kHz15 点窗口对应 15ms 的延迟对 tp 在 300ms 量级的系统误差约 5%尚可接受如果 tp 本来就短窗口要缩到 5 以内。还需要确认系统处于线性区。把阶跃幅值从 1V 降到 0.5V再跑一次看峰值附近形态是否成比例。超调百分比不变说明线性假设成立超调明显变小甚至消失说明系统里存在饱和或死区此时整条曲线应该重新在小信号下测量。4. 从实验曲线反推 ωn 与 ζ 并核对报告结论4.1 用超调量和峰值时间反向求系统参数时域分析实验报告里最实用的操作是根据实测曲线反向求阻尼比和自然频率。由超调量公式反解 ζ令 Mp_frac Mp% / 100 ζ sqrt( ln²(Mp_frac) / (π² ln²(Mp_frac)) )再由峰值时间反推 ωdωd π / tp ωn ωd / √(1 - ζ²)把超调量转成小数再取对数是因为公式里的 Mp 指百分比除以 100。这个转换错误是实验报告里最常出现的低级失误。算出来的 ζ 和 ωn 还可以继续用来估算 ts和曲线上的实测值对照。下面是处理实测读数的一段 MATLAB 代码% 根据实测曲线反推二阶系统参数 Mp_pct 16.3; % 从曲线上读出的超调量 % tp_meas 0.31; % 峰值时间 s Mp_frac Mp_pct / 100; zeta sqrt(log(Mp_frac)^2 / (pi^2 log(Mp_frac)^2)); wd pi / tp_meas; % 阻尼振荡频率 wn wd / sqrt(1 - zeta^2); % 自然频率 ts_est 4 / (zeta * wn); % 2% 容差调节时间 fprintf(zeta %.3f\n, zeta); fprintf(wn %.3f rad/s\n, wn); fprintf(ts %.3f s\n, ts_est);注意 log 在 MATLAB 里默认是自然对数Python 里要用 math.log不要写成 log10。4.2 一组可查表的算例用三组不同阻尼状态做完整换算结果如下超调量 Mp%峰值时间 tp(s)ζ 计算值ωn 计算值(rad/s)ts 估算值(s)16.3%0.310.50011.700.68425.4%0.240.40014.290.7009.5%0.420.6009.350.713三组数据的 ts 估算值非常接近原因是 ts 正比于 1/(ζωn)而 tp 又反比于 ωd两个方向的变化彼此补偿。这说明实验报告里只写调节时间不写阻尼比会掩盖掉系统在 ζ 上的巨大差异。反过来如果你做实验时发现不管怎么调参数 ts 都差不多也要警惕是不是类似补偿关系把差异抹平了。4.3 理论值与实测值之间的差异来源报告结论与理论曲线不一致通常可以从四个方向找原因采样分辨率峰值时间是离散采样序列里的最大值对应时刻实际真实峰值可能落在两次采样之间误差最多可达半个采样周期。容差定义2% 和 5% 误差带对应 ts 公式系数一个用 4 一个用 3报告里如果漏写容差复核的人会按错误公式反推。系统阶次偏高被测对象可能不是纯二阶额外小惯性环节会让响应边沿变缓超调量偏小此时反推出的 ζ 偏大。可先对比响应上升段斜率判断是否存在明显的高频环节。激励条件输入幅值过大使系统进入非线性区响应曲线头部被限幅削平超调量读数失真。小信号重测是对这一项最直接的检验。写实验报告时建议把以上差异来源列在结论前而不是单纯写“实测与理论基本吻合”。评阅人更看重你有没有解释清楚误差去向。5. 用重建曲线验证二阶系统参数提取是否正确5.1 重建传递函数并与原始曲线叠加对比有一个容易被忽略但非常实用的验证方法把反推出来的 ζ 和 ωn 放回传递函数重新算一次阶跃响应再把这条重建曲线和原始实测曲线叠在同一张图里。重合度高的反推才可信只靠单一指标对上号往往掩盖了模型结构错误。% 重建二阶系统并与原始曲线对比 zeta_est zeta; % 第 4 节反推的阻尼比 wn_est wn; % 第 4 节反推的自然频率 G_est tf([wn_est^2], [1, 2*zeta_est*wn_est, wn_est^2]); t 0:1e-4:2; y_est step(G_est, t); figure; plot(t, y, k-, LineWidth, 2); hold on; plot(t, y_est, r--, LineWidth, 1.2); legend(实测响应, 重建二阶系统, Location, southeast); xlabel(时间 (s)); ylabel(输出 y(t)); grid on;如果重建曲线在峰值和振荡周期上都能贴合原始曲线说明二阶模型假设成立如果峰值对上了但振荡频率差一截多半是 ωn 换算错了如果周期对得上但超调量偏差很大问题出在 ζ 或稳态值归一化上。进一步量化可以用误差均方根rmse sqrt(mean((y - y_est).^2));rmse 在稳态值 1 的量级下小于 0.05整条曲线的拟合已经足够好可以直接把结果写进实验报告。5.2 三条自查规则容差、峰值、线性最后给三条可以快速套用的自查规则调节时间先定容差。报告写 2% 容差就用 4/(ζωn)写 5% 就用 3/(ζωn)两条不能同时出现在一份报告里。超调量只认第一次峰值。后续振荡产生的局部极值如果超过第一次峰值说明存在测量毛刺或非线性因素不应直接计入 Mp。反推 ζ 前先做减幅验证。把输入幅值减半再测一次超调百分比不变才说明系统处于线性区反推的 ζ 才有意义。重建曲线的脚本可以直接做成一个函数文件输入实测 y 和 t输出 ζ、ωn、rmse实验收尾时把三组数据都跑一遍保留 rmse 最小的那组结果放进报告附录参数上报才有底气。本文还有配套的精品资源点击获取