当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。