Python中的Stepinfo
我正在尝试在Python中确定以下步骤响应的特性:
- 上升时间(RiseTime)
- 稳定时间(SettlingTime)
- 稳定最小值(SettlingMin)
- 稳定最大值(SettlingMax)
- 超调(Overshoot)
- 欠调(Undershoot)
- 峰值(Peak)
- 峰值时间(PeakTime)
在Matlab中,我可以使用一个叫做 stepinfo 的函数,但在Python中我找不到合适的替代方法。我尝试用numpy和scipy自己写一个,但到目前为止运气不太好,因为我对信号处理的知识还不够。
我在网上找到的大部分信息看起来都比较复杂,但我很想了解更多。如果有人能推荐一本好书或其他学习资源,我会非常感激!谢谢!
这是我目前得到的步骤响应:
2 个回答
0
你可以直接用公式来计算吗?(假设这是一个二阶系统,或者说有两个主要的极点,可以近似看作二阶)
关于上升时间和稳定时间,有几种不同的近似方法,所以上网查查会很有帮助。
你还可以通过你的数据图中的最大值和最小值来找出阻尼频率,然后用这个来计算自然频率:
有一些公式可以用来关联这些不同的量,具体取决于你已经知道了什么。
3
这个 讨论 提出了一个实现的方式:
def step_info(t,yout):
print "OS: %f%s"%((yout.max()/yout[-1]-1)*100,'%')
print "Tr: %fs"%(t[next(i for i in range(0,len(yout)-1) if yout[i]>yout[-1]*.90)]-t[0])
print "Ts: %fs"%(t[next(len(yout)-i for i in range(2,len(yout)-1) if abs(yout[-i]/yout[-1])>1.02)]-t[0])
接下来,你需要使用numpy库中信号处理部分的函数,来获取你想要的其他信息。