scipy.signal.cont2discrete

scipy.signal.cont2discrete(system, dt, method='zoh', alpha=None)[源代码]

将连续状态空间系统转化为离散状态空间系统。

参数
系统 :描述系统的元组或 lti描述系统的元组或

下面给出了元组中的元素数量和解释:

  • 1:(实例 lti )

  • 2:(Num,DEN)

  • 3:(零、极、增益)

  • 4:(A、B、C、D)

dt浮动

离散化时间步长。

method字符串,可选

使用哪种方法:

  • GBT:广义双线性变换

  • 双线性:Tustin近似(“GBT”,Alpha=0.5)

  • Euler:Euler(或正向差分)方法(“GBT”,alpha=0)

  • backward_diff:向后差分(“GBT”,alpha=1.0)

  • ZOH:零阶保持(默认)

  • FOH:一阶等待( 添加的版本:1.3.0 )

  • 脉冲:等效脉冲响应( 添加的版本:1.3.0 )

alpha漂浮在 [0, 1] ,可选

广义双线性变换加权参数,该参数只能用method=“GBT”指定,否则将被忽略

退货
sysd包含离散系统的元组

根据输入类型,输出将采用以下形式

  • (Num,DEN,DT)用于传递函数输入

  • (零、极、增益、DT)用于零极增益输入

  • (A,B,C,D,DT)用于状态空间系统输入

注意事项

默认情况下,该例程使用零阶保持(ZOH)方法来执行转换。或者,可以使用广义双线性变换,其包括常见的塔斯汀双线性近似、欧拉法技术或向后差分技术。

零阶保持(ZOH)方法基于 [1], 广义双线性近似基于 [2][3], 一阶保持(FOH)方法基于 [4].

参考文献

1

https://en.wikipedia.org/wiki/Discretization#Discretization_of_linear_state_space_models

2

http://techteach.no/publications/discretetime_signals_systems/discrete.pdf

3

张国荣,陈晓华,陈庭中,基于广义双线性变换的数字再设计,国际。J.控制,第一卷。82,第4期,第741-754页,2009年。(https://www.mypolyuweb.hk/~magzhang/Research/ZCC09_IJC.pdf)

4

富兰克林、鲍威尔、沃克曼,“动态系统的数字控制”,第3版。门洛帕克,加利福尼亚州:艾迪生-卫斯理出版社,第204-206页,1998年。

示例

我们可以将连续状态空间系统转换为离散状态空间系统:

>>> 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()
../../_images/scipy-signal-cont2discrete-1.png