scipy.signal.

cont2discrete#

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

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

參數:
system描述系統的元組,或是 lti 的實例

以下說明元組中的元素數量以及其解釋

  • 1: (lti 的實例)

  • 2: (num, den)

  • 3: (zeros, poles, gain)

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

dtfloat

離散化時間步長。

methodstr,可選

要使用哪種方法

  • gbt:廣義雙線性轉換

  • bilinear:Tustin 近似法(“gbt”,alpha=0.5)

  • euler:Euler(或前向差分)法(“gbt”,alpha=0)

  • backward_diff:後向差分(“gbt”,alpha=1.0)

  • zoh:零階保持(預設)

  • foh:一階保持(版本新增:1.3.0

  • impulse:等效脈衝響應(版本新增:1.3.0

alphafloat,介於 [0, 1] 之間,可選

廣義雙線性轉換的權重參數,僅應在使用 method=“gbt” 時指定,否則將被忽略

回傳:
sysd包含離散系統的元組

根據輸入類型,輸出將會是以下形式

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

  • (zeros, poles, gain, dt),用於零點-極點-增益輸入

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

註解

預設情況下,此常式使用零階保持(zoh)方法來執行轉換。或者,可以使用廣義雙線性轉換,其中包括常見的 Tustin 雙線性近似法、Euler 方法技術或後向差分技術。

零階保持(zoh)方法基於 [1],廣義雙線性近似法基於 [2][3],一階保持(foh)方法基於 [4]

參考文獻

[3]

G. Zhang、X. Chen 和 T. Chen,《透過廣義雙線性轉換進行數位重新設計》,Int. J. Control,第 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 版。Menlo Park, Calif: 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()
../../_images/scipy-signal-cont2discrete-1.png