python - 使用 scipy.signal.lti 从状态矩阵在 Python 中创建 LTI 系统

标签 python numpy scipy signal-processing

scipy.signal.lti声称能够接受四个数组,ABC,和D,来定义一个系统(除了其他方法)。但是,它给了我一个错误,我找不到说明这一点的例子。

我的代码很简单:

A=np.array([[0,0,1,0],[0,0,0,1],[-2,1,-.02,.01],[1,-2,.01,-.02]])
B=np.array([[0],[0],[-1],[0]])
C=np.array([[0,0,1,0],[0,0,0,1]])
D=np.array([[0],[0]])
sys=scipy.signal.lti(A,B,C,D) #spelled out

错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/opt/local/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/scipy/signal/ltisys.py", line 317, in __init__
    self._update(N)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/scipy/signal/ltisys.py", line 428, in _update
    self.C, self.D)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/scipy/signal/ltisys.py", line 259, in ss2zpk
    return tf2zpk(*ss2tf(A, B, C, D, input=input))
  File "/opt/local/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/scipy/signal/filter_design.py", line 315, in tf2zpk
    z = roots(b)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/numpy/lib/polynomial.py", line 203, in roots
    raise ValueError("Input must be a rank-1 array.")
ValueError: Input must be a rank-1 array.

我在这里错过了什么?矩阵(数组)大小正确。

最佳答案

state-space representation ,您的输入向量 D 的大小为 2,这意味着该控制系统有 2 个输出变量。我相信 scipy.signal.lti 的当前实现不支持这一点。

例如,以下输入和一个输出变量确实有效。

C=np.array([[0,0,1,0]])
D=np.array([[0]])

更多详细信息。问题在于您的原始输入参数,

num, den =  scipy.signal.ss2tf(A, B, C, D)

为分母提供一个一维数组,为分子提供一个二维数组(即其中的几个,因为有多个输出变量)。但是 scipy.signal.tf2zpk(num, den) 期望 numden 都只是多项式(即一维数组)。因此,无法初始化 lte 类。

关于python - 使用 scipy.signal.lti 从状态矩阵在 Python 中创建 LTI 系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29660088/

相关文章:

python - concat 将值转换为 nan 数据

python - 按置信度聚合 2 个 NumPy 数组

python - 尝试安装 Numpy 时出错

python - solve_ivp 从 -x 到 +x

python - Numpy:在每个时间步平均多个数据点

python - 这种对整数进行运算的 numpy 算法偶尔会返回 float ,为什么?

python - 系列数据不断增加

python - 想法如何使用python测量骨架的长度

python - 为什么当我要在 Python 中传递动态函数时遇到问题

python - 在特定位置设置 xticks 标签的最简洁方法