scipy.signal.

状态空间#

class scipy.signal.StateSpace(*system, **kwargs)[源代码][源代码]#

状态空间形式的线性时不变系统。

表示系统为连续时间的一阶微分方程 \(\dot{x} = A x + B u\) 或离散时间的差分方程 \(x[k+1] = A x[k] + B u[k]\)StateSpace 系统根据使用的系统表示,分别从 ltidlti 类继承额外的功能。

参数:
*系统:参数

StateSpace 类可以用1个或4个参数实例化。以下给出了输入参数的数量及其解释:

dt: float, 可选

离散时间系统的采样时间 [s]。默认为 None`(连续时间)。必须指定为关键字参数,例如,``dt=0.1`

属性:
A

StateSpace 系统的 状态矩阵

B

StateSpace 系统的输入矩阵。

C

StateSpace 系统的输出矩阵。

D

StateSpace 系统的 Feedthrough 矩阵。

dt

返回系统的采样时间,lti 系统返回 None

poles

系统的极点。

zeros

系统的零点。

方法

__mul__(other)

后乘另一个系统或一个标量

to_ss()

返回当前 StateSpace 系统的副本。

to_tf(**kwargs)

将系统表示转换为 TransferFunction

to_zpk(**kwargs)

将系统表示转换为 ZerosPolesGain

注释

更改不属于 StateSpace 系统表示的属性(如 zerospoles)的值效率非常低,并且可能导致数值不准确。最好先转换为特定的系统表示。例如,在访问/更改零点、极点或增益之前,调用 sys = sys.to_zpk()

示例

>>> from scipy import signal
>>> import numpy as np
>>> a = np.array([[0, 1], [0, 0]])
>>> b = np.array([[0], [1]])
>>> c = np.array([[1, 0]])
>>> d = np.array([[0]])
>>> sys = signal.StateSpace(a, b, c, d)
>>> print(sys)
StateSpaceContinuous(
array([[0, 1],
       [0, 0]]),
array([[0],
       [1]]),
array([[1, 0]]),
array([[0]]),
dt: None
)
>>> sys.to_discrete(0.1)
StateSpaceDiscrete(
array([[1. , 0.1],
       [0. , 1. ]]),
array([[0.005],
       [0.1  ]]),
array([[1, 0]]),
array([[0]]),
dt: 0.1
)
>>> a = np.array([[1, 0.1], [0, 1]])
>>> b = np.array([[0.005], [0.1]])
>>> signal.StateSpace(a, b, c, d, dt=0.1)
StateSpaceDiscrete(
array([[1. , 0.1],
       [0. , 1. ]]),
array([[0.005],
       [0.1  ]]),
array([[1, 0]]),
array([[0]]),
dt: 0.1
)