Использование функции Matlab при ошибке Simulink

Я новичок в Simulink, но мне нужно использовать функцию Matlab.

Я создал блок "MATLAB Function1" с одним входом (сигнал времени, поступающий из другого блока) и одним выходом (три сигнала, заключенные в матрицу, показанную в блоке Scope).

Вот код внутри функционального блока matlab:

function outputSignal  = myFunction(input_signal)
coder.extrinsic('lsim');

time = [1:1:length(input_signal)];

k_dia = [19.5 13 9.9];
k_dia = k_dia*10^-3;

outputSignal = zeros(length(time), length(k_dia));

for j = 1:length(k_dia)
    A = [-k_dia(j) 0; k_dia(j) -k_dia(j)];
    B = [1 0]';
    C = [1 1];
    D = 0;
    sistem = feval('ss', A, B, C, D);
    outputSignal(:,j) = lsim(sistem, input_signal, time);
end
end

Раньше у меня были проблемы с использованием функций "ss" и "lsim" из-за проблем с генерацией кода, но я должен был их решить, используя feval и coder.extrinsic. Теперь у меня есть следующая ошибка:

When simulating the response to a specific input signal, the input data U must be a matrix
of numeric values with at least two rows (samples) and without any NaN or Inf.  

и я не могу понять, по-прежнему ли проблема с этими функциями или я ошибся в том, как использовать функции matlab в simulink.

РЕДАКТИРОВАТЬ: я понял, что проблема была в том, что lsim требуется input_signal по крайней мере длиной 2, в то время как моя система дает вход для функции одного единственного значения на каждом временном шаге. Таким образом, если время составляет 10 шагов, а серия значений, сгенерированных из предыдущего блока, равна [1 2 3 4 5 6 7 8 9 10], я хотел бы иметь в качестве входных данных для моей функции:

  • [1] на шаге 1,
  • [1 2] на шаге 2,
  • [1 2 3] на шаге 3,....
  • [1 2 3 4 5 6 7 8 9 10] на шаге 10.

Конечно, поскольку lsim не работает с одним значением, на шаге 1 я мог бы использовать выходное значение по умолчанию.

Я думаю, что мне нужен блок, который запоминает то, что происходит на временных шагах раньше, что-то вроде блока Scope, но с выводом.

1 ответ

Решение

Поскольку ваши системы не зависят от времени, вы можете создать три отдельные системы пространства состояний, каждая из которых имеет различные матрицы параметров, и предоставить вектор из трех компонентов в качестве входных сигналов, которые я оставил пустыми, потому что я не знаю, откуда вы хотите отправлять.

Другие вопросы по тегам