Python中的Stepinfo

2 投票
2 回答
7392 浏览
提问于 2025-04-18 12:56

我正在尝试在Python中确定以下步骤响应的特性:

  • 上升时间(RiseTime)
  • 稳定时间(SettlingTime)
  • 稳定最小值(SettlingMin)
  • 稳定最大值(SettlingMax)
  • 超调(Overshoot)
  • 欠调(Undershoot)
  • 峰值(Peak)
  • 峰值时间(PeakTime)

在Matlab中,我可以使用一个叫做 stepinfo 的函数,但在Python中我找不到合适的替代方法。我尝试用numpy和scipy自己写一个,但到目前为止运气不太好,因为我对信号处理的知识还不够。

我在网上找到的大部分信息看起来都比较复杂,但我很想了解更多。如果有人能推荐一本好书或其他学习资源,我会非常感激!谢谢!

这是我目前得到的步骤响应:

step response

2 个回答

0

你可以直接用公式来计算吗?(假设这是一个二阶系统,或者说有两个主要的极点,可以近似看作二阶)

%OS = 100 \cdot e^{\left ({\frac{-\zeta \pi}{\sqrt{1-\zeta^2}}}\right)}

关于上升时间和稳定时间,有几种不同的近似方法,所以上网查查会很有帮助。

你还可以通过你的数据图中的最大值和最小值来找出阻尼频率,然后用这个来计算自然频率:

\omega_d = \omega_n \cdot (\sqrt{1-\zeta^2})

有一些公式可以用来关联这些不同的量,具体取决于你已经知道了什么。

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库中信号处理部分的函数,来获取你想要的其他信息。

撰写回答