2016-08-08 5 views
0

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

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

Вот код внутри функции 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 

Раньше у меня были проблемы с использованием функции «сс» и «lsim» из-за проблем с генерацией кода, но я должен был решить их с помощью feval и кодировщик .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.

EDIT: Я понял, что проблема связана с тем, что lsim требует входной_сигнал длиной не менее 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, но с выходом.

+0

Было бы хорошо, если бы вы могли обеспечить входной сигнал, который вы используете, чтобы проверить вашу модель. –

+1

У вас есть 3 системы, о чем свидетельствует ваш цикл с 3 независимыми вызовами 'ss' и' lsim'. Вместо этого используйте предоставленный блок Simulink 'State-Space'. В вашем вопросе не рассматривается вопрос о том, почему вы должны использовать функциональный блок Matlab. – Matt

ответ

1

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

enter image description here

+0

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

+0

@leonardovet Вам не нужно lsim в Simulink. Вся идея simulink - дать Matlab сделать симуляцию для вас. – percusse

+0

Спасибо, похоже, работает именно так! –

Смежные вопросы