python control控制系统库

python control控制系统库

参考:Docs » Python Control Systems Library

系统创建

control.tf(num, den) 传递函数方式

control.tf([1,2],[3,4])		# 方式1 通过分子分母系数创建
s = control.tf('s')			# 方式2 先创建传递函数为s
sys = (s+2)/(s**2+3*s+4)			# 再通过s的运算创建

②control.ss(A, B, C, D) 状态空间方式
③control.frd(‘响应’, ‘频率’) 频率响应方式
个人理解这种方式,是用测量得到的源数据做为输入

系统互连

control.series(sys1, sys2,…) 系统串联
control.parallel(sys1, sys2,…) 系统并联
control.feedback(sys1, sys2) 负反馈连接,sys1是前向通路,sys2是反馈通路
④control.negate(sys1) 系统取反,即-sys1

复频域绘图

伯德图

control.bode_plot(syslist) 绘制伯德图/波特图(幅频+相频曲线)
参数:
omega=np.logspace(start=-1,stop=1,num=200) 自定义频率范围
dB=1 幅度以对数坐标显示
Hz=1 频率以Hz为单位,默认为弧度rad/s
magrins=1 显示增益相位裕量

# 绘制一个低通加一个高通并联系统的伯德图
import control as ctrl
import matplotlib.pyplot as plt
import math

pi = math.pi
sys1 = ctrl.tf(10*2*pi,[1,10*2*pi])		# 低通,截止频率10,注意默认为弧度制
sys2 = ctrl.tf([1,0],[1,100*2*pi])		# 高通,截止频率100
sys3 = ctrl.parallel(sys1,sys2)			# 两系统并联
ctrl.bode_plot(sys3,dB=1,Hz=1)			# 绘制伯德图
plt.show()

伯德图

奈奎斯特图

control.nyquist_plot(syslist) 绘制奈奎斯特图 / H轨迹图(H contour)
伯德图的不足:只考虑到了s=jw的情况,即s只在正虚轴的情况;
而其他情况(σ≠0和负虚轴)可以用奈奎斯特图分析。(傅里叶到拉普拉斯变换)

了解奈奎斯特图需要了解的基础知识。。。
开环闭环系统:考虑到一个反馈系统如下:
负反馈框图

开环传递函数(环路增益)闭环传递函数闭环传递函数的分母项
G ( s ) ∗ H ( s ) G(s)*H(s) G(s)H(s) G ( s ) 1 + G ( s ) ∗ H ( s ) \frac {G(s)} {1+G(s)*H(s)} 1+G(s)H(s)G(s) 1 + G ( s ) ∗ H ( s ) 1+G(s)*H(s) 1+G(s)H(s)

这个分母项 1+G(s)*H(s) 的特性:
✱它的极点 = 开环传递函数(环路增益)的极点
✱它的零点 = 闭环传递函数的极点

所以通过研究1+G(s)*H(s)的零极点,就可推断出开环和闭环系统的极点。(当然你也可以直接研究闭环传递函数,但是计算起来确实要比1+G(s)*H(s)要复杂一点)

柯西幅角原理
若s的封闭轨迹为顺时针方向(这个轨迹可以是s平面的任意区域,不再限定在正虚轴,即伯德图对应的轨迹),且包围H(s)的P个极点和Z个零点,那么H(s)的H轨迹图将以相同的方向绕原点旋转Z-P圈 。

参考:拉扎维,模块CMOS集成电路设计,第二版,10.8.2~10.8.4

常规的系统稳定性判据:极点位于s平面的左半平面;反过来想,如果构建一个s在右半平面的轨迹,如果不包含极点,也可以判定系统是稳定的。

综合上述:
如果闭环系统稳定:s取右半平面区域对应的H轨迹图:不包含闭环系统极点 ≡ 不包含1+G(s)*H(s)的零点 ≡ G(s)*H(s)不包含(-1,0)点

所以,可以通过开环系统(也即环路增益)G(s)*H(s)的H轨迹图是否通过(-1,0)这个点来判定闭环系统是否稳定。

# 绘制开环函数为典型二阶系统的奈奎斯特图
import control as ctrl
import matplotlib.pyplot as plt

sys4 = ctrl.tf(100,[1,2*(-0.1)*10,100])	# 阻尼比-0.1,自然谐振频率10
ctrl.nyquist_plot(sys4)
plt.show()

奈奎斯特图
这个图没有过(-1,0)这个点,所以尽管开环系统不稳定(因为阻尼比为负),但闭环系统是稳定的。(但最好不要太接近这个点)

根轨迹图

control.root_locus(syslist) 绘制奈奎斯特图
假设一个系统的反馈量为常数:
反馈系统2
当K从0变化到∞时,闭环系统的(稳定性)极点(也就是1+KH(s)=0的根)也随着变化,也就是所谓的根轨迹图。
假设H(s)=N(s)/D(s)
1+K
H(s)=0 可以化简为 D(s)+K*N(s)=0
当K=0时,即D(s)=0,代表前向系统极点;(K=0代表反馈断开,电路系统中代表前向放大器)
当K=∞时,即N(s)=0,代表前向系统零点;(电路系统中反馈一般是无源器件分压,K=0➞1,K=1时为单位增益放大器,此时电路带宽=GBW,判断相位裕量的频点最高,此时相位裕量最小,虽然电路中K>1不常见,但可以通过此,预见闭环系统的极点变化的趋势)
所以随着K从0变化到∞,闭环系统的极点变化规律为:从前向系统H(s)的极点指向前向系统H(s)的零点。

# 绘制根轨迹图,
import control as ctrl
import matplotlib.pyplot as plt

s = ctrl.tf('s')
sys5 = (s+100)/(s*s*s+60*s*s+1100*s+6000)	#(s+100)/((s+10)*(s+20)*(s+30))
ctrl.root_locus(sys5)
plt.show()

根轨迹图如下:
根轨迹图
从图中可以看到,随着K的增加,闭环系统的极点跑到了右半平面,系统会变得不稳定。

零极点图

④control.pzmap(sys)
就简单显示零极点位置图

时域响应

control.step_response(sys) 阶跃响应
control.impulse_response(sys) 冲激响应
③ 其它时域响应待研究


阶跃和冲激响应

import control as ctrl
import matplotlib.pyplot as plt

sys6 = ctrl.tf(1,[1,0.2,1])	# 二阶系统,自然谐振频率为1,阻尼比为0.1,衰减振荡
t1,y1 = ctrl.step_response(sys6)
t2,y2 = ctrl.impulse_response(sys6)

plt.subplot(121)
plt.plot(t1, y1)
plt.title('step response')
plt.ylabel('Amplitude')
plt.xlabel('time (s)')
plt.grid(1)
 
plt.subplot(122)
plt.plot(t2, y2)
plt.title('impulse response')
plt.ylabel('Amplitude')
plt.xlabel('time (s)')
plt.grid(1)

plt.show()
  • 11
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值