當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


Python SciPy signal.cont2discrete用法及代碼示例

本文簡要介紹 python 語言中 scipy.signal.cont2discrete 的用法。

用法:

scipy.signal.cont2discrete(system, dt, method='zoh', alpha=None)#

將連續狀態空間係統轉換為離散狀態空間係統。

參數

system 說明係統的元組或 lti 的實例

下麵給出元組中元素的數量和解釋:

  • 1: (instance of lti)

  • 2: (num, den)

  • 3: (zeros, poles, gain)

  • 4: (A, B, C, D)

dt 浮點數

離散化時間步長。

method str,可選

使用哪種方法:

  • gbt: generalized bilinear transformation

  • bilinear: Tustin’s approximation (“gbt” with alpha=0.5)

  • euler: Euler (or forward differencing) method (“gbt” with alpha=0)

  • backward_diff: Backwards differencing (“gbt” with alpha=1.0)

  • zoh: zero-order hold (default)

  • foh: first-order hold (versionadded: 1.3.0)

  • impulse: equivalent impulse response (versionadded: 1.3.0)

alpha 在 [0, 1] 內浮點數,可選

廣義雙線性變換加權參數,隻能用method=”gbt”指定,否則忽略

返回

sysd 包含離散係統的元組

根據輸入類型,輸出將采用以下形式

  • (num, den, dt) 用於傳遞函數輸入

  • zeros-poles-gain 輸入的(零點、極點、增益、dt)

  • (A, B, C, D, dt) 用於狀態空間係統輸入

注意

默認情況下,例程使用Zero-Order Hold (zoh) 方法來執行轉換。或者,可以使用廣義雙線性變換,包括常見的 Tustin 雙線性近似、歐拉方法技術或反向差分技術。

Zero-OrderHold(zoh)方法基於[1],廣義雙線性近似基於[2]和[3],First-OrderHold(foh)方法基於[4]。

參考

[3]

G.Zhang、X.Chen 和 T.Chen,通過廣義雙線性變換進行數字重新設計,Int。 J.控製,卷。 82、沒有。 4,第 741-754 頁,2009 年。(https://www.mypolyuweb.hk/~magzhang/Research/ZCC09_IJC.pdf)

[4]

G. F. Franklin、J. D. Powell 和 M. L. Workman,動態係統的數字控製,第 3 版。加利福尼亞州門洛帕克:Addison-Wesley,第 204-206 頁,1998 年。

例子

我們可以將連續狀態空間係統轉換為離散狀態空間係統:

>>> import numpy as np
>>> import matplotlib.pyplot as plt
>>> from scipy.signal import cont2discrete, lti, dlti, dstep

定義連續狀態空間係統。

>>> A = np.array([[0, 1],[-10., -3]])
>>> B = np.array([[0],[10.]])
>>> C = np.array([[1., 0]])
>>> D = np.array([[0.]])
>>> l_system = lti(A, B, C, D)
>>> t, x = l_system.step(T=np.linspace(0, 5, 100))
>>> fig, ax = plt.subplots()
>>> ax.plot(t, x, label='Continuous', linewidth=3)

使用多種方法將其轉換為離散狀態空間係統。

>>> dt = 0.1
>>> for method in ['zoh', 'bilinear', 'euler', 'backward_diff', 'foh', 'impulse']:
...    d_system = cont2discrete((A, B, C, D), dt, method=method)
...    s, x_d = dstep(d_system)
...    ax.step(s, np.squeeze(x_d), label=method, where='post')
>>> ax.axis([t[0], t[-1], x[0], 1.4])
>>> ax.legend(loc='best')
>>> fig.tight_layout()
>>> plt.show()
scipy-signal-cont2discrete-1.png

相關用法


注:本文由純淨天空篩選整理自scipy.org大神的英文原創作品 scipy.signal.cont2discrete。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。