问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

基于MWorks的采样控制系统动态响应分析——离散传递函数与阶跃响应特性详解

创作时间:
作者:
@小白创作中心

基于MWorks的采样控制系统动态响应分析——离散传递函数与阶跃响应特性详解

引用
CSDN
1.
https://m.blog.csdn.net/GggKooK/article/details/146210335

本文将详细介绍如何使用MWorks软件进行采样控制系统的动态响应分析。通过一个具体的单位阶跃输入案例,演示了离散传递函数的推导、代码实现、结果分析等关键步骤。

一、问题背景

在采样控制系统中,分析系统的动态响应(如超调量、调节时间等)是评估系统性能的关键。本文以单位阶跃输入下的离散传递函数为例,结合MWorks的ControlSystems和Plots工具包,详细演示如何通过代码实现动态响应分析。

二、离散传递函数推导

题目:如图一所示的采样控制系统,设K=1,T=1,单位阶跃输人,求系统的动态响应。

根据题目描述,系统参数为 K=1,T=1。假设原连续系统为:

通过零阶保持器(ZOH)离散化后,离散传递函数为:

对应分子分母系数:

分子(Numerator):[0.632,0]

分母(Denominator):[1,−0.736,0.368]

三、MWorks代码解析与实现

1.加载工具包

using ControlSystems
using Plots

ControlSystems:用于定义和仿真控制系统

Plots:用于绘制响应曲线,支持多种绘图风格

2.定义离散传递函数

num = [0.632, 0]    # 分子多项式 0.632z + 0
den = [1, -0.736, 0.368]  # 分母多项式 z² - 0.736z + 0.368
sys = tf(num, den, 1.0)    # 创建离散系统,采样时间 T=1.0

tf(num, den, Ts):创建离散传递函数,Ts=1.0 表示采样时间为1秒

分子分母对齐:注意多项式系数按降幂排列,例如 z²对应 den[1]

3.计算阶跃响应

k = 0:50            # 时间序列 0到50个采样周期
y, t = step(sys, k) # 计算阶跃响应
y_vec = vec(y')     # 将响应数据转为向量格式

step(sys, k):计算系统 sys 在时间序列 k 上的单位阶跃响应

vec(y'):将矩阵数据转为向量,便于后续绘图和分析

4.绘制响应曲线

p = plot(k, y_vec,
    xlabel="k", ylabel="y(k)",
    title="Unit Step Response",
    grid=true, gridstyle=:dash,
    linewidth=2, label="Response",
    ylims=(0,1.5), xlims=(0,50),
    seriestype=:steppost)  # 阶梯式绘图模拟离散信号
# 添加自定义网格线
for yi in 0:0.2:1.4
    hline!(p, [yi], color=:gray, style=:dash, label="")
end
for xi in 0:5:50
    vline!(p, [xi], color=:gray, style=:dash, label="")
end
# 添加参考线
hline!(p, [1.0], color=:red, linestyle=:dash, label="Reference")
display(p)

seriestype=:steppost:阶梯图更符合离散系统的采样特性

网格线增强:通过循环添加水平和垂直虚线网格,提升可读性

参考线:红色虚线标记稳态值(1.0)

5.分析系统特性

peak = maximum(y_vec)                     # 峰值
steady_state = y_vec[end]                 # 稳态值
overshoot = (peak - steady_state)/steady_state * 100  # 超调量百分比
# 计算调节时间(±2%误差带)
settling_idx = findfirst(abs.(y_vec .- steady_state) .< 0.02*steady_state)
println("峰值: ", round(peak, digits=4))
println("稳态值: ", round(steady_state, digits=4))
println("超调量: ", round(overshoot, digits=2), "%")
println("调节时间: ≈", settling_idx, "个采样周期")

findfirst:查找首次进入±2%误差带的时间点。

超调量公式:

四、运行结果与结论

系统传递函数:

0.632z

G(z) = ----------------

z² - 0.736z + 0.368

系统响应特性:

峰值:1.2069

稳态值:1.0

超调量:20.69%

调节时间:≈ 5 个采样周期

结果解读:

超调量 20.69%:系统存在适度超调,表明动态响应较快但存在振荡

调节时间 5个周期:系统在5秒内进入稳态,动态性能良好

稳定性验证:计算系统极点 z = 0.368 ± 0.316i(模长≈0.48),位于单位圆内,系统稳定

运行结果图像:

时域特性改进:

对于存在20.69%超调量的系统,工程上可通过:增加阻尼比,调整控制器参数;改变采样周期,权衡响应速度与超调量;使用先进控制策略:Smith预估器、模糊控制等

五、总结

本文通过MWorks完整演示了采样控制系统的动态响应分析流程,涵盖离散传递函数建模、阶跃响应仿真、可视化及性能指标计算。读者可基于此框架扩展至更复杂的控制系统设计(如电机控制、数字滤波器设计),并通过调整参数优化系统动态性能。

附录:完整程序

using ControlSystems
using Plots
# 定义离散传递函数参数
num = [0.632, 0]              # 0.632z
den = [1, -0.736, 0.368]      # z² - 0.736z + 0.368
sys = tf(num, den, 1.0)       # 采样时间为1.0
# 创建时间向量
k = 0:50
# 计算阶跃响应
y, t = step(sys, k)
# 确保数据是向量形式
y_vec = vec(y')
# 创建图形
p = plot(
    k, y_vec,
    xlabel="k",
    ylabel="y(k)",
    title="Unit Step Response",
    grid=true,
    gridstyle=:dash,
    linewidth=2,
    label="Response",
    ylims=(0, 1.5),
    xlims=(0, 50),
    seriestype=:steppost  # 使用阶梯式绘图
)
# 添加水平网格线
for yi in 0:0.2:1.4
    hline!(p, [yi], color=:gray, style=:dash, label="")
end
# 添加垂直网格线
for xi in 0:5:50
    vline!(p, [xi], color=:gray, style=:dash, label="")
end
# 添加参考线
hline!(p, [1.0], color=:red, linestyle=:dash, label="Reference")
# 显示图形
display(p)
# 计算系统特性
peak = maximum(y_vec)
steady_state = y_vec[end]
overshoot = (peak - steady_state) / steady_state * 100
# 计算调节时间(在±2%范围内)
settling_idx = findfirst(abs.(y_vec[2:end] .- steady_state) .< 0.02 * steady_state)
# 打印系统信息
println("\n系统传递函数:")
println("       0.632z")
println("G(z) = ----------------")
println("       z² - 0.736z + 0.368")
println("\n系统响应特性:")
println("峰值:", round(peak, digits=4))
println("稳态值:", round(steady_state, digits=4))
println("超调量:", round(overshoot, digits=2), "%")
if !isnothing(settling_idx)
    println("调节时间:≈ ", settling_idx, " 个采样周期")
end
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号