cont2discrete#
- scipy.signal.cont2discrete(system, dt, method='zoh', alpha=None)[源代码]#
将连续状态空间系统转换为离散状态空间系统。
- 参数:
- system一个描述系统的元组或
lti
的实例 以下说明元组中的元素数量及其解释
1: (
lti
的实例)2: (num, den)
3: (zeros, poles, gain)
4: (A, B, C, D)
- dt浮点数
离散化时间步长。
- method字符串,可选
要使用的方法
gbt: 广义双线性变换
bilinear: Tustin 近似(alpha=0.5 时的“gbt”)
euler: 欧拉(或前向差分)法(alpha=0 时的“gbt”)
backward_diff: 后向差分(alpha=1.0 时的“gbt”)
zoh: 零阶保持(默认)
foh: 一阶保持 (版本新增: 1.3.0)
impulse: 等效冲激响应 (版本新增: 1.3.0)
- alpha浮点数,范围 [0, 1],可选
广义双线性变换的加权参数,只应在 method=”gbt” 时指定,否则将被忽略
- system一个描述系统的元组或
- 返回:
- sysd包含离散系统的元组
根据输入类型,输出将采用以下形式
(num, den, dt) (针对传递函数输入)
(zeros, poles, gain, dt) (针对零极增益输入)
(A, B, C, D, dt) (针对状态空间系统输入)
说明
默认情况下,该例程使用零阶保持(zoh)方法执行转换。此外,也可以使用广义双线性变换,其中包括常见的 Tustin 双线性近似、欧拉方法或后向差分技术。
零阶保持(zoh)方法基于 [1],广义双线性近似基于 [2] 和 [3],一阶保持(foh)方法基于 [4]。
参考文献
[3]G. Zhang, X. Chen, and T. Chen, Digital redesign via the generalized bilinear transformation, Int. J. Control, vol. 82, no. 4, pp. 741-754, 2009. (https://www.mypolyuweb.hk/~magzhang/Research/ZCC09_IJC.pdf)
[4]G. F. Franklin, J. D. Powell, and M. L. Workman, Digital control of dynamic systems, 3rd ed. Menlo Park, Calif: Addison-Wesley, pp. 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()