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) - 1M == len(a) - 1TransferFunction 系统根据使用的系统表示,分别继承自 ltidlti 类的额外功能。

参数:
*系统:参数

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

dt: float, 可选

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

属性:
den

TransferFunction 系统的分母。

dt

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

num

TransferFunction 系统的分子。

poles

系统的极点。

zeros

系统的零点。

方法

to_ss()

将系统表示转换为 StateSpace

to_tf()

返回当前 TransferFunction 系统的副本。

to_zpk()

将系统表示转换为 ZerosPolesGain

注释

更改不属于 TransferFunction 系统表示的属性值(如 A, B, C, D 状态空间矩阵)是非常低效的,并且可能导致数值不准确。最好先转换为特定的系统表示。例如,在访问/更改 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
)

构建传递函数 \(H(z) = \frac{z^2 + 3z + 3}{z^2 + 2z + 1}\) ,采样时间为 0.1 秒:

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