簡體   English   中英

如何在 Python 中指定線性系統中的時間延遲?

[英]How can I specify Time Delays in Linear Systems in Python?

這是7年前在這個帖子中提出的:

如何在 Scipy 中定義具有時間延遲的 LTI 系統?

答案已經過時或者至少我不知道如何讓它工作,我想知道目前是否有辦法做到這一點。

我想創建一個看起來像這樣的傳輸 function,其中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)

Output:

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 控制庫以與 Matlab 控制工具箱相同的方式支持延遲。 我和我的學生已經為此研究了一段時間,並希望將其打包以在今年發布到 pypi。

包含我們代碼的存儲庫在這里,並且允許您正在談論的使用內部延遲表示進行各種操作的對象在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)

例子

python 控制庫有一個名為 control.pade 的 function 給出了延遲的近似值

https://python-control.readthedocs.io/en/latest/generated/control.pade.html

以下網站在第 21 頁給出了其使用示例。

http://techteach.no/python_control/python_control.pdf

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM