这是7年前在这个帖子中提出的问题:
How to define LTI systems with Time delay in Scipy?
答案是过时的,或者至少我不知道如何让它发挥作用,我想知道目前是否有办法做到这一点。
我想创建一个类似this的传递函数,其中s
等于时间延迟0.1。
在MatLab中,我会做这样的事情:H=tf(1,'InputDelay',0.1);
s=tf('s');
G=1/(s+1);
Q=1+0.5*s+2/s;
这样我就可以按如下方式使用传递函数进行操作:
M=feedback(Q*G,H);
M=minreal(M);
display(M);
我想知道在Python中是否有类似的东西。这样我就不必使用符号表达式来限制代码的多功能性。
对于符号表达式,它看起来如下所示:
s = sym.symbols('s')
G = 1/(s+1)
Q = 1+0.5*s+2/s
H = sym.exp(-0.1*s)
# Cálculo de la función de transferencia global
M = Q*G/(1+Q*G*H)
M = sym.simplify(M)
sym.pprint(M)
我想过使用麻木或症状经验,但都不起作用:
s = ct.tf('s')
H = np.exp(-0.1*s)
产出:TypeError: loop of ufunc does not support argument 0 of type TransferFunction which has no callable exp method
Sympy给出了这样的信息:SympifyError: Sympify of expression 'could not parse '-0.1 s------ 1'' failed, because of exception being raised: SyntaxError: invalid syntax (<string>, line 1)
我已经用谷歌搜索了我能想到的一切,但找不到任何关于这方面的文档,对不起,我的无知和糟糕的英语。提前谢谢您!
1条答案
按热度按时间hujrc8aj1#
据我所知,目前还没有得到广泛支持的适用于Python的控件库,其支持延迟的方式与MatLab控件工具箱的方式相同。我和我的学生已经致力于解决这个问题已经有一段时间了,希望今年能把它打包发布到Pypi上。
我们的代码所在的存储库是here,
InternalDelay.py
中定义了允许使用内部延迟表示进行各种操作的对象。您的示例有一个小问题,即您的Q在物理上是不可实现的,这会导致我们的库中出现一些错误。
以下代码将为您的闭环系统生成阶跃响应,显示添加延迟的效果。我还只使用了PI控制,而不是PID,以保持控制器的物理可实现性。