1

我正在尝试为 Python 中的阶跃响应确定以下阶跃特征:

  • 上升时间
  • 稳定时间
  • 沉降最小
  • 沉降最大值
  • 过冲
  • 下冲
  • 顶峰
  • 高峰时段

Matlab 为我提供了函数stepinfo,但我无法在 Python 中找到合适的替代方法。我确实尝试使用 numpy 和 scipy 自行开发,但我还没有多少运气,我缺乏信号处理方面的知识。

我可以在互联网上找到的大多数信息看起来都相当复杂,但我确实想了解更多相关信息。如果有人可以向我推荐一本好书或其他资源以从中了解更多信息,我将不胜感激!谢谢!

这是我目前的步骤响应:

阶跃响应

4

2 回答 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])

然后,您需要使用 Signal Processing 部分中的 numpy 函数来获取您想要的其他信息。

于 2014-07-11T14:24:27.257 回答
0

你不能只实现公式吗?(假设这是一个二阶系统/有两个主极点,可以近似为二阶)

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

对于上升和稳定时间,有几种不同的近似值,因此互联网是您的朋友。

您还可以计算出阻尼频率(根据绘图数据的最大值和最小值),并使用它来计算自然频率:

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

有一些公式将这些不同的数量联系起来,这取决于你所知道的。

于 2014-07-12T00:17:55.490 回答