如何创建scipy.lti公司离散LTI系统的对象?

2024-09-28 22:19:14 发布

您现在位置:Python中文网/ 问答频道 /正文

在主题中,我使用python/numpy/scipy进行一些数据分析,我想为一个离散系统创建一个LTI类的对象,指定(num,den,dt)或(0,poles,gain,dt),甚至(a,B,C,d,dt),但文档中从来没有提到如何做。在

尽管如此,仍然有一些函数,比如dsim/dstep/dimpulse,它们会获取一个LTI对象并用它来做一些事情,所以我想这是可能的。一旦我有了它,我想做一些事情,比如从一个表示转换到另一个表示(num/den->;zpk->;A,B,C,d),绘制Bode图,等等

另外,我完全不清楚一个(num,den,dt)表示是否会使用z或z^-1的系数,因为我不认为有一个明确的标准。在


Tags: 对象函数文档gtnumpy主题dtscipy
2条回答

似乎scipy.signal.lti类只适用于连续时间系统。检查例如^{}的文档,可以得到:

system : a tuple describing the system.
    The following gives the number of elements in the tuple and
    the interpretation.
      * 3: (num, den, dt)
      * 4: (zeros, poles, gain, dt)
      * 5: (A, B, C, D, dt)

因此参数system不能由lti类的对象来实现。虽然scipy.signal.dlsim的文档确实声明它接受LTI实例,但我认为这是错误的。至少在scipy 0.10.0中,我得到:

^{pr2}$

显然,dlsim也希望system参数是元组。在

我认为scipy有点不一致。一方面,您可以使用以下内容定义lti系统:

>> sys = sig.lti([1],[1,1])

该系统的类型为:

^{pr2}$

模拟系统的许多程序scipy.signal.ltisys公司对于这些类型的系统来说工作得很好,但是对于flat scipy中的系统则不是这样。在这里,您还可以使用以下方法定义不同的系统:

sys_ss = scipy.signal.tf2ss([1],[1,2])
sysd_ss = scipy.signal.cont2discrete(sys_ss,1.0/10)
t,y = scipy.signal.dstep(sysd_ss)

要想把它画出来,你可以做一些类似的事情:

plt.plot(t,y[0])

由创建的对象信号.tfss只是一个具有状态空间矩阵的元组。要么我不太理解它(我碰巧没有那么多python经验),要么它相当混乱。在

相关问题 更多 >