【问题标题】:How can I specify Time Delays in Linear Systems in Python?如何在 Python 中指定线性系统的时间延迟?
【发布时间】:2020-06-28 22:26:00
【问题描述】:

这是 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)

我曾想过使用 numpy 或 sympy exp,但都不起作用:

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)

我已经用谷歌搜索了我能想到的所有内容,但找不到任何关于此的文档,对于我的无知和糟糕的英语感到抱歉。 提前谢谢!

【问题讨论】:

    标签: python python-3.x matlab transfer-function python-control


    【解决方案1】:

    据我所知,没有广泛支持的 Python 控制库可以像 Matlab 控制工具箱那样支持延迟。我和我的学生一直在为此研究解决方案,并希望将其打包以在今年发布到 pypi。

    包含我们代码的存储库是here,并且允许使用内部延迟表示进行各种操作的对象在InternalDelay.py 中定义。

    您的示例的一个小问题是您的 Q 在物理上无法实现,这会导致我们的库中出现一些错误。

    以下代码将为您的闭环系统生成阶跃响应,显示添加延迟的效果。我也只使用了 PI 控制而不是 PID 来保持控制器在物理上的可实现性。

    from utils import InternalDelay, tf
    import matplotlib.pyplot as plt
    import numpy as np
    
    s = tf([1, 0], 1)
    G = 1/(s + 1)
    Q = 1 + 2/s
    H = tf(1, 1, deadtime=0.1)
    G = InternalDelay(G)
    Q = InternalDelay(Q)
    H = InternalDelay(H)
    one = InternalDelay(tf(1, 1))
    
    M = Q*G/(one + Q*G)
    Mdelay = Q*G/(one + Q*G*H)
    
    t = np.linspace(0, 10, 5000)
    
    y = M.simulate(lambda t: [1], t)
    ydelay = Mdelay.simulate(lambda t: [1], t)
    
    plt.plot(t, y, t, ydelay)
    plt.legend(['Delay-free', 'Delay=0.1s'])
    plt.axhline(1)
    

    【讨论】:

    • 非常感谢!当您说我的 Q 在物理上不可实现时,您的意思是您的库不接受“发明”或不代表真实模型的 TF?
    • 不,我的意思是像这样的理想 PID 是improper,因此不能用标准状态空间模型表示。
    猜你喜欢
    • 2012-09-09
    • 1970-01-01
    • 1970-01-01
    • 2012-06-19
    • 1970-01-01
    • 2020-11-08
    • 2011-03-26
    • 1970-01-01
    • 2020-11-02
    相关资源
    最近更新 更多