本文简要介绍 python 语言中 scipy.signal.lsim2
的用法。
用法:
scipy.signal.lsim2(system, U=None, T=None, X0=None, **kwargs)#
使用 ODE 求解器
scipy.integrate.odeint
模拟 continuous-time 线性系统的输出。- system:
lti
类的实例或说明系统的元组。 下面给出元组中元素的数量和解释:
1:(
lti
的实例)2:(数字,书房)
3:(零点、极点、增益)
4:(A、B、C、D)
- U: 数组(一维或二维),可选
说明每个时间 T 的输入的输入数组。在给定时间之间使用线性插值。如果有多个输入,则 rank-2 数组的每一列代表一个输入。如果未给出 U,则假定输入为零。
- T: 数组(一维或二维),可选
定义输入和期望输出的时间步长。默认值是间隔 [0,10.0] 上的 101 个均匀分布的点。
- X0: 数组 (1D),可选
状态向量的初始条件。如果没有给出 X0,则初始条件假定为 0。
- kwargs: dict
额外的关键字参数被传递给函数 odeint。有关详细信息,请参阅下面的注释。
- system:
- T: 一维ndarray
输出的时间值。
- yout: ndarray
系统的响应。
- xout: ndarray
state-vector 的 time-evolution。
参数 ::
返回 ::
注意:
该函数使用
scipy.integrate.odeint
来求解系统的微分方程。赋予lsim2
的其他关键字参数将传递给scipy.integrate.odeint
。有关参数的完整列表,请参阅scipy.integrate.odeint
的文档。由于
lsim2
现已弃用,建议用户切换到更快、更准确的lsim
函数。lsim
不支持scipy.integrate.odeint
的关键字参数,但通常不需要。如果 (num, den) 为
system
传入,则分子和分母的系数应按 index 降序指定(例如s^2 + 3s + 5
将表示为[1, 3, 5]
)。例子:
我们将使用
lsim2
来模拟应用于信号的模拟贝塞尔滤波器。>>> import numpy as np >>> from scipy.signal import bessel, lsim2 >>> import matplotlib.pyplot as plt
创建一个截止频率为 12 Hz 的 low-pass Bessel 滤波器。
>>> b, a = bessel(N=5, Wn=2*np.pi*12, btype='lowpass', analog=True)
生成应用过滤器的数据。
>>> t = np.linspace(0, 1.25, 500, endpoint=False)
输入信号是三个正弦曲线的总和,频率分别为 4 Hz、40 Hz 和 80 Hz。滤波器应该主要消除 40 Hz 和 80 Hz 分量,只留下 4 Hz 信号。
>>> u = (np.cos(2*np.pi*4*t) + 0.6*np.sin(2*np.pi*40*t) + ... 0.5*np.cos(2*np.pi*80*t))
使用
lsim2
模拟滤波器。>>> tout, yout, xout = lsim2((b, a), U=u, T=t)
绘制结果。
>>> plt.plot(t, u, 'r', alpha=0.5, linewidth=1, label='input') >>> plt.plot(tout, yout, 'k', linewidth=1.5, label='output') >>> plt.legend(loc='best', shadow=True, framealpha=1) >>> plt.grid(alpha=0.3) >>> plt.xlabel('t') >>> plt.show()
在第二个示例中,我们模拟双积分器
y'' = u
,输入常量u = 1
。我们将使用积分器的状态空间表示。>>> from scipy.signal import lti >>> A = np.array([[0, 1], [0, 0]]) >>> B = np.array([[0], [1]]) >>> C = np.array([[1, 0]]) >>> D = 0 >>> system = lti(A, B, C, D)
t 和 u 定义要模拟的系统的时间和输入信号。
>>> t = np.linspace(0, 5, num=50) >>> u = np.ones_like(t)
计算模拟,然后绘制y.正如预期的那样,该图显示了曲线
y = 0.5*t**2
.>>> tout, y, x = lsim2(system, u, t) >>> plt.plot(t, y) >>> plt.grid(alpha=0.3) >>> plt.xlabel('t') >>> plt.show()
相关用法
- Python SciPy signal.lsim用法及代码示例
- Python SciPy signal.lfilter用法及代码示例
- Python SciPy signal.lfilter_zi用法及代码示例
- Python SciPy signal.lp2hp用法及代码示例
- Python SciPy signal.lti用法及代码示例
- Python SciPy signal.lp2bs_zpk用法及代码示例
- Python SciPy signal.lp2bp_zpk用法及代码示例
- Python SciPy signal.lp2bs用法及代码示例
- Python SciPy signal.lp2bp用法及代码示例
- Python SciPy signal.lp2hp_zpk用法及代码示例
- Python SciPy signal.lp2lp_zpk用法及代码示例
- Python SciPy signal.lp2lp用法及代码示例
- Python SciPy signal.lombscargle用法及代码示例
- Python SciPy signal.czt_points用法及代码示例
- Python SciPy signal.chirp用法及代码示例
- Python SciPy signal.residue用法及代码示例
- Python SciPy signal.iirdesign用法及代码示例
- Python SciPy signal.max_len_seq用法及代码示例
- Python SciPy signal.kaiser_atten用法及代码示例
- Python SciPy signal.oaconvolve用法及代码示例
- Python SciPy signal.hilbert用法及代码示例
- Python SciPy signal.ricker用法及代码示例
- Python SciPy signal.group_delay用法及代码示例
- Python SciPy signal.cheb2ord用法及代码示例
- Python SciPy signal.get_window用法及代码示例
注:本文由纯净天空筛选整理自scipy.org大神的英文原创作品 scipy.signal.lsim2。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。