在主题中,我使用python / numpy / scipy进行一些数据分析,我想为离散系统创建一个LTI类对象,指定(num,den,dt)或(零) ,极点,增益,dt),甚至(A,B,C,D,dt),但文档从未提及如何做到这一点。
然而像dsim / dstep / dimpulse这样的函数将采用LTI对象并用它做事,所以我想这是可能的。一旦我拥有它,我想做一些事情,比如从一个表示转换为另一个表示(num / den - > zpk - > A,B,C,D),绘制Bode图等等。
另外,我完全不清楚(num,den,dt)表示是否会使用z或z ^ -1的系数,因为我认为没有明确的标准。
答案 0 :(得分:2)
似乎scipy.signal.lti
类仅适用于连续时间系统。检查例如scipy.signal.dstep
的文档,可以得到:
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,我得到:
TypeError: object of type 'lti' has no len()
所以显然dlsim
期望system
参数是一个元组。
答案 1 :(得分:0)
我认为scipy中存在一些不一致之处。一方面,您可以使用以下内容定义lti系统:
>> sys = sig.lti([1],[1,1])
该系统的类型是:
>> type(sys)
scipy.signal.ltisys.lti
scipy.signal.ltisys下的模拟系统的许多程序适用于这些类型的系统,但对于那些在平面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])
signal.tf2ss创建的对象只是一个带有状态空间矩阵的元组。要么我不理解它(我碰巧在python中没那么多经验)或者它非常混乱。