专栏
标签
margin函数
一般问题
发布于 2026-01-30 11:11:14
查看 16过去150天

用margin计算裕度:
using ControlSystems

步骤2.1:定义系统传递函数(以连续时间系统为例)

num = [1.0] # 分子系数,例如 K=1
den = [1.0, 1.0, 0.0] # 分母系数,对应 s(s+1)
sys = tf(num, den) # 创建传递函数模型

步骤2.2:计算稳定裕度

使用margin函数计算增益裕度和相位裕度

gm, pm, wcg, wcp = margin(sys) # gm: 增益裕度(dB), pm: 相位裕度(度), wcg/wcp: 对应频率

步骤2.3:输出结果

println("增益裕度 (GM): ", gm, " dB")
println("相位裕度 (PM): ", pm, " 度")
println("增益交越频率 (Wcg): ", wcg, " rad/s")
println("相位交越频率 (Wcp): ", wcp, " rad/s")
结果如下:
julia> println("增益裕度 (GM): ", gm, " dB")
增益裕度 (GM): [NaN;;] dB

julia> println("相位裕度 (PM): ", pm, " 度")
相位裕度 (PM): [Inf;;] 度

julia> println("增益交越频率 (Wcg): ", wcg, " rad/s")
增益交越频率 (Wcg): [0.7863810025174541;;] rad/s

julia> println("相位交越频率 (Wcp): ", wcp, " rad/s")
相位交越频率 (Wcp): [51.819162097635825;;] rad/s
请问如何理解?用bodeplot绘制频率特性:
using Plots
bodeplot(sys) # 绘制Bode图
结果如下:
plot_1.svg

所属专栏:工具箱
产品信息:控制器设计工具箱
控制工程
采纳的回答
发布于 2026-01-30 18:09:06

明白了,是输出顺序不对。不应该是
gm, pm, wcg, wcp = margin(sys) # gm: 增益裕度(dB), pm: 相位裕度(度), wcg/wcp: 对应频率
应该是
wcg, gm, wcp, pm = margin(sys) # gm: 增益裕度(dB), pm: 相位裕度(度), wcg/wcp: 对应频率

全部回答 3

发布于 2026-01-30 13:44:42

您好,请问您的具体问题是什么?

发布于 2026-01-30 15:59:06

您好,您可以使用 TyControlSystems 来进行运算,计算结果为

(gm = [Inf;;], pm = [51.82730446630459;;], wgm = [Inf;;], wpm = [0.786151036241964;;])
发布于 2026-01-30 18:09:06

明白了,是输出顺序不对。不应该是
gm, pm, wcg, wcp = margin(sys) # gm: 增益裕度(dB), pm: 相位裕度(度), wcg/wcp: 对应频率
应该是
wcg, gm, wcp, pm = margin(sys) # gm: 增益裕度(dB), pm: 相位裕度(度), wcg/wcp: 对应频率

用户
和原帖交流更多问题细节吧,去
我要发帖 我要发帖
资料中心 资料中心
查看更多>
热门帖子 热门帖子
主要贡献者 主要贡献者
过去7天