scipy.signal.

TransferFunction#

class scipy.signal.TransferFunction(*system, **kwargs)[原始碼]#

線性時不變系統類別,採用傳遞函數形式。

將系統表示為連續時間傳遞函數 \(H(s)=\sum_{i=0}^N b[N-i] s^i / \sum_{j=0}^M a[M-j] s^j\) 或離散時間傳遞函數 \(H(z)=\sum_{i=0}^N b[N-i] z^i / \sum_{j=0}^M a[M-j] z^j\),其中 \(b\) 是分子 num 的元素,\(a\) 是分母 den 的元素,且 N == len(b) - 1, M == len(a) - 1TransferFunction 系統繼承了來自 ltidlti 類別的額外功能,具體取決於使用的系統表示法。

參數:
*system: 參數

TransferFunction 類別可以使用 1 或 2 個參數實例化。以下說明輸入參數的數量及其解讀

dt: 浮點數, 選項性

離散時間系統的取樣時間 [秒]。預設為 None (連續時間)。必須指定為關鍵字引數,例如,dt=0.1

註解

變更不屬於 TransferFunction 系統表示法一部分的屬性(例如 ABCD 狀態空間矩陣)非常沒有效率,並可能導致數值不準確。最好先轉換為特定的系統表示法。例如,在存取/變更 A、B、C、D 系統矩陣之前,先呼叫 sys = sys.to_ss()

如果為 *system 傳入 (分子, 分母),則分子和分母的係數都應以指數遞減的順序指定(例如,s^2 + 3s + 5z^2 + 3z + 5 將表示為 [1, 3, 5]

範例

建構傳遞函數 \(H(s) = \frac{s^2 + 3s + 3}{s^2 + 2s + 1}\)

>>> from scipy import signal
>>> num = [1, 3, 3]
>>> den = [1, 2, 1]
>>> signal.TransferFunction(num, den)
TransferFunctionContinuous(
array([1., 3., 3.]),
array([1., 2., 1.]),
dt: None
)

建構取樣時間為 0.1 秒的傳遞函數 \(H(z) = \frac{z^2 + 3z + 3}{z^2 + 2z + 1}\)

>>> signal.TransferFunction(num, den, dt=0.1)
TransferFunctionDiscrete(
array([1., 3., 3.]),
array([1., 2., 1.]),
dt: 0.1
)
屬性:
den

TransferFunction 系統的分母。

dt

傳回系統的取樣時間,None 代表 lti 系統。

num

TransferFunction 系統的分子。

poles

系統的極點。

zeros

系統的零點。

方法

to_ss()

將系統表示法轉換為 StateSpace

to_tf()

傳回目前 TransferFunction 系統的副本。

to_zpk()

將系統表示法轉換為 ZerosPolesGain