我正在寻找一种模拟各种输入信号的信号输出的方法。更确切地说,我有一个由传递函数H定义的系统,它接受一个输入并具有一个输出。我生成了几个信号(存储在numpy数组中)。我想做的是获得系统的响应,对每个输入信号没有使用for循环。有办法继续吗?下面是我到目前为止编写的代码。
from __future__ import division
import numpy as np
from scipy import signal
nbr_inputs = 5
t_in = np.arange(0,10,0.2)
dim = (nbr_inputs, len(t_in))
x = np.cumsum(np.random.normal(0,2e-3, dim), axis=1)
H = signal.TransferFunction([1, 3, 3], [1, 2, 1])
t_out, y, _ = signal.lsim(H, x[0], t_in) # here, I would just like to simply write x
感谢您的帮助
答案 0 :(得分:0)
这不是一个MIMO系统,它是一个SISO系统,但你有多个输入。
您可以创建一个MIMO系统并同时应用所有输入,这些输入将逐个通道同时计算。此外,您还不能将scipy.signal.lsim
用于MIMO系统。你可以使用其他选项,例如python-control
(如果你有slycot
扩展名,否则再没有MIMO)或harold
如果你有Python 3.6或更高版本(免责声明:我是作者)。
import numpy as np
from harold import *
import matplotlib.pyplot
nbr_inputs = 5
t_in = np.arange(0,10,0.2)
dim = (nbr_inputs, len(t_in))
x = np.cumsum(np.random.normal(0,2e-3, dim), axis=1)
# Forming a 1x5 system, common denominator will be completed automatically
H = Transfer([[[1, 3, 3]]*nbr_inputs], [1, 2, 1])
关键字per_channel=True
将第一个输入应用于第一个通道,将第二个输入应用于第二个,依此类推。否则返回组合响应。你可以通过玩它来检查形状,看看我的意思。
# Notice it is x.T below -> input shape = <num samples>, <num inputs>
y, t = simulate_linear_system(H, x.T, t_in, per_channel=True)
plt.plot(t, y)
这给出了