Как использовать сигнал scipy для систем MIMO - PullRequest
0 голосов
/ 01 июня 2018

Я ищу способ симулировать выходной сигнал для различных входных сигналов.Чтобы быть более точным, у меня есть система, определенная ее передаточной функцией 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

спасибо за вашу помощь

1 Ответ

0 голосов
/ 01 июня 2018

Это не система 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)

Это дает

enter image description here

...