lsim

Постройте моделируемую временную характеристику динамической системы на произвольные входы; симулированные отклики

Описание

Графики отклика

пример

lsim(sys,u,t) строит графики моделируемой временной характеристики динамической модели системы sys в историю входов (t, u). Векторная t задает временные выборки для симуляции. Для систем с одним входом входной сигнал u - вектор той же длины, что и t. Для мультивходов, u массив с таким количеством строк, сколько существует временных выборок (length(t)) и столько столбцов, сколько входов для sys.

пример

lsim(sys,u,t,x0) далее задает вектор x0 значений начального состояния, когда sys является моделью пространства состояний.

lsim(sys,u,t,x0,method) задает, как lsim интерполирует входные значения между выборками, когда sys является моделью в непрерывном времени.

пример

lsim(sys1,sys2,...,sysN,u,t,___) моделирует отклики нескольких динамических систем на одну и ту же историю входных параметров и строит графики этих откликов на одной фигуре. Все системы должны иметь одинаковое количество входов и выходов. Можно также использовать x0 и method входные параметры при вычислении откликов нескольких моделей.

пример

lsim(sys1,LineSpec1,...,sysN,LineSpecN,___) задает цвет, стиль линии и маркер для каждой системы на графике. Когда вам нужны дополнительные опции индивидуальной настройки графика, используйте lsimplot вместо этого.

Данные отклика

пример

y = lsim(sys,u,t) возвращает отклик системы y, отобранные в одно и то же время t как вход. Для систем с одним выходом, y - вектор той же длины, что и t. Для мультивыходов, y массив, имеющий столько строк, сколько временных выборок (length(t)) и столько столбцов, сколько выходов в sys. Этот синтаксис не генерирует график.

y = lsim(sys,u,t,x0) далее задает вектор x0 значений начального состояния, когда sys является моделью пространства состояний.

y = lsim(sys,u,t,x0,method) задает, как lsim интерполирует входные значения между выборками, когда sys является моделью в непрерывном времени.

пример

[y,tOut,x] = lsim(___) возвращает траектории состояний x, когда sys является моделью пространства состояний. x массив с таким количеством строк, сколько существует временных выборок и столько столбцов, сколько состояний в sys. Этот синтаксис также возвращает временные выборки, используемые для симуляции в tOut.

Инструмент линейной симуляции

lsim(sys) открывает инструмент линейной симуляции. Для получения дополнительной информации об использовании этого инструмента для линейного анализа смотрите Работа с инструментом линейной симуляции (Control System Toolbox).

Примеры

свернуть все

Рассмотрите следующую передаточную функцию.

sys = tf(3,[1 2 3])
sys =
 
        3
  -------------
  s^2 + 2 s + 3
 
Continuous-time transfer function.

Чтобы вычислить ответ этой системы на произвольный входной сигнал, предоставьте lsim с вектором времени t при котором необходимо вычислить ответ и вектор u содержащих соответствующие значения сигналов. Для образца постройте график отклика системы к шаговому сигналу, который начинается с 0 в момент времени t = 0, пандусы от 0 в t = 1 до 1 в t = 2, и затем держится стабильно при 1. Определите t и вычислите значения u.

t = 0:0.04:8;  % 201 points
u = max(0,min(t-1,1));

Использование lsim без выходного аргумента для построения графика отклика системы к сигналу.

lsim(sys,u,t)
grid on

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Driving inputs, sys.

На график показан приложенный вход (u,t) серым цветом и системной характеристикой синего цвета.

Использование lsim с выходным аргументом для получения симулированного отклика данных.

y = lsim(sys,u,t);
size(y)
ans = 1×2

   201     1

Векторная y содержит симулированный отклик в соответствующее время в t.

Использование gensig (Control System Toolbox), чтобы создать периодические входные сигналы, такие как синусоиды и квадратные волны для использования с lsim. Симулируйте ответ на квадратную волну следующей модели пространства состояний SISO.

A = [-3 -1.5; 5 0];
B = [1; 0];
C = [0.5 1.5];
D = 0;
sys = ss(A,B,C,D);

В данном примере создайте квадратную волну с периодом 10 с и длительностью 20 с.

[u,t] = gensig("square",10,20);

gensig возвращает вектор t временных шагов и вектора u содержащий соответствующие значения входного сигнала. (Если вы не задаете шаг расчета для t, затем gensig генерирует 64 выборки за период.) Используйте их с lsim и постройте график отклика системы.

lsim(sys,u,t)
grid on

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Driving inputs, sys.

На график показана приложенная квадратная волна серого цвета и отклика системы синего цвета. Функции lsim с выходным аргументом для получения значений отклика в каждой точке в t.

[y,~] = lsim(sys,u,t);

Когда вы симулируете ответ системы дискретного времени, временной вектор t должен иметь форму Ti:dT:Tf, где dT - шаг расчета модели. Симулируйте ответ следующей передаточной функции в дискретном времени на вход шага наклона.

sys = tf([0.06 0.05],[1 -1.56 0.67],0.05);

Эта передаточная функция имеет шаг расчета 0,05 с. Используйте тот же шаг расчета, чтобы сгенерировать временной вектор t и усиленный сигнал шага u.

t = 0:0.05:4;  
u = max(0,min(t-1,1));

Постройте график отклика системы.

lsim(sys,u,t)

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Driving inputs, sys.

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

[u,t] = gensig("sine",1,4,0.05);

Постройте график отклика системы.

lsim(sys,u,t)

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Driving inputs, sys.

lsim позволяет вам построить график симулированных откликов нескольких динамических систем на одной оси. Для образца сравните реакцию системы с обратной связью с ПИ-контроллером и ПИД-регулятором. Создайте передаточную функцию системы и настройте контроллеры.

H = tf(4,[1 10 25]);
C1 = pidtune(H,'PI');
C2 = pidtune(H,'PID');

Сформируйте системы с обратной связью.

sys1 = feedback(H*C1,1);
sys2 = feedback(H*C2,1);

Постройте график откликов обеих систем на квадратную волну с периодом 4 с.

[u,t] = gensig("square",4,12);
lsim(sys1,sys2,u,t)
grid on
legend("PI","PID")

Figure contains an axes. The axes contains 3 objects of type line. These objects represent Driving inputs, PI, PID.

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

 lsim(sys1,"r--",sys2,"b",u,t)
 grid on
 legend("PI","PID")

Figure contains an axes. The axes contains 3 objects of type line. These objects represent Driving inputs, PI, PID.

Первый LineSpec «r--" задает штриховую красную линию для отклика с ПИ-контроллером. Вторая LineSpec «b" задает сплошную синюю линию для отклика с ПИД-регулятором. Легенда отражает указанные цвета и стили линии. Для получения дополнительных опций индивидуальной настройки графика используйте lsimplot.

В системе MIMO в каждый временной шаг t, а вход u(t) - вектор, длина которого является количеством входов. Как использовать lsim, вы задаете u как матрица с размерностями Nt-by- Nu, где Nu количество системных входов и Nt - длина t. Другими словами, каждый столбец u - входной сигнал, приложенный к соответствующему системному входу. Например, чтобы симулировать систему с четырьмя входами для 201 временного шага, предоставьте u как матрица четырех столбцов и 201 строка, где каждая строка u(i,:) - вектор входа значений в i1й временной шаг; каждый столбец u(:,j) - сигнал, приложенный к jth-й вход.

Точно так же выходные y(t) вычисляется по lsim является матрицей, столбцы которой представляют сигнал на каждом выходе системы. Когда вы используете lsim для построения графика симулированного отклика, lsim предоставляет отдельные оси для каждого выхода, представляющие отклику системы в каждом канале выхода к входу u(t) применяется на всех входах.

Рассмотрим модель пространства состояний с двумя входами, тремя выходами со следующими матрицами пространства состояний.

A = [-1.5  -0.2   1.0;
     -0.2  -1.7   0.6;
      1.0   0.6  -1.4];
  
B = [ 1.5  0.6;
     -1.8  1.0;
      0    0  ];

C = [ 0    -0.5 -0.1;
      0.35 -0.1 -0.15
      0.65  0    0.6];
  
D = [ 0.5  0;
      0.05 0.75
      0    0];

sys = ss(A,B,C,D);

Постройте график отклика sys к квадратной волне периода 4 с, приложенной к первому входу sys и импульс, приложенный ко второму входу каждые 3 с. Для этого создайте векторы-столбцы, представляющую квадратную волну и импульсный сигнал, используя gensig. Затем сложите столбцы в матрицу входа. Чтобы убедиться, что два сигнала имеют одинаковое количество выборок, задайте одно и то же время окончания и шаг расчета.

Tf = 10;
Ts = 0.1;
[uSq,t] = gensig("square",4,Tf,Ts);
[uP,~] = gensig("pulse",3,Tf,Ts);
u = [uSq uP];
lsim(sys,u,t)

Figure contains 3 axes. Axes 1 contains 3 objects of type line. These objects represent Driving inputs, sys. Axes 2 contains 3 objects of type line. These objects represent Driving inputs, sys. Axes 3 contains 3 objects of type line. These objects represent Driving inputs, sys.

Каждая ось показывает ответ одного из трех системных выходов на сигналы u применяется на всех входах. Каждый график также показывает все входные сигналы в сером цвете.

По умолчанию lsim моделирует модель, предполагая, что все состояния равны нулю в начале симуляции. При симуляции отклика модели пространства состояний используйте необязательную x0 входной параметр для задания ненулевых значений начального состояния. Рассмотрим следующую модель пространства состояний SISO в двух состояниях.

A = [-1.5 -3;
      3   -1];
B = [1.3; 0];
C = [1.15 2.3];
D = 0;
          
sys = ss(A,B,C,D);

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

x0 = [-0.2 0.3];
t = 0:0.05:8;
u = zeros(length(t),1);
u(t>=2) = 1;
lsim(sys,u,t,x0)
grid on

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Driving inputs, sys.

Первая половина графика показывает свободное развитие системы от начальных значений состояния [-0.2 0.3]. В t = 2 существует изменение шага на входе, и график показывает отклик системы к этому новому сигналу, начиная со значений состояния в то время.

Когда вы используете lsim с выходными аргументами он возвращает симулированному отклику данные в массив. Для системы SISO данные отклика возвращаются как вектор-столбец той же длины, что и t. Например, извлеките ответ системы SISO на квадратную волну. Создайте квадратную волну с помощью gensig.

sys = tf([2 5 1],[1 2 3]);
[u,t] = gensig("square",4,10,0.05);
[y,t] = lsim(sys,u,t);
size(y)
ans = 1×2

   201     1

Векторная y содержит симулированный отклик на каждом временном шаге в t. (lsim возвращает временной вектор t как удобство.)

Для системы MIMO данные отклика возвращаются в массиве размерностей N-на-Ny-на-Nu, где Ny и Nu являются количеством выходов и входов динамической системы. Например, рассмотрим следующую модель пространства состояний, представляющую систему с тремя состояниями с двумя входами и тремя выходами.

A = [-1.5  -0.2   1.0;
     -0.2  -1.7   0.6;
      1.0   0.6  -1.4];
  
B = [ 1.5  0.6;
     -1.8  1.0;
      0    0  ];

C = [ 0   -0.1 -0.2;
      0.7 -0.2 -0.3
     -0.65 0   -0.6];
  
D = [ 0.1  0;
      0.1  1.5
      0    0];

sys = ss(A,B,C,D);

Извлеките отклики трех выходных каналов на квадратную волну, приложенную к обоим входам.

uM = [u u];
[y,t] = lsim(sys,uM,t);
size(y)
ans = 1×2

   201     3

y(:,j) - вектор-столбец, содержащая ответ на j-ом выходе на квадратную волну, приложенную к обоим входам. То есть y(i,:) является вектором трех значений, выходных значений в i-м временном шаге.

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

[y,t,x] = lsim(sys,uM,t);
size(x)
ans = 1×2

   201     3

Каждая строка x содержит значения состояний [x1,x2,x3] в соответствующее время в t. Другими словами, x(i,:) - вектор состояния в i-м временном шаге. Постройте график значений состояния.

plot(t,x)

Figure contains an axes. The axes contains 3 objects of type line.

Пример Plot Response of Multiple Systems to Same Input показывает, как построить график откликов нескольких отдельных систем на одной оси. Когда у вас есть несколько динамических систем, расположенных в массиве моделей, lsim строит графики всех их ответов сразу.

Создайте массив моделей. В данном примере используйте одномерный массив передаточных функций второго порядка, имеющих различные собственные частоты. Во-первых, предварительно выделите память для массива моделей. Следующая команда создает 1 на 5 строку передаточных функций SISO с нулевым усилением. Первые две размерности представляют выходы модели и входы. Оставшиеся размерности являются измерениями массива. (Для получения дополнительной информации об массивах моделей и их создании см. раздел «Массивы моделей» (Control System Toolbox).)

sys = tf(zeros(1,1,1,5));

Заполните массив.

w0 = 1.5:1:5.5;    % natural frequencies
zeta = 0.5;        % damping constant
for i = 1:length(w0)
   sys(:,:,1,i) = tf(w0(i)^2,[1 2*zeta*w0(i) w0(i)^2]);
end

Постройте график откликов всех моделей в массиве на вход квадратной волны.

[u,t] = gensig("square",5,15);
lsim(sys,u,t)

Figure contains an axes. The axes contains 6 objects of type line. These objects represent Driving inputs, sys.

lsim использует тот же стиль линии для откликов всех записей массива. Один из способов различить записи - использовать SamplingGrid свойство динамических моделей системы связывать каждую запись в массиве с соответствующим w0 значение.

sys.SamplingGrid = struct('frequency',w0);

Теперь, когда вы строите график характеристик в графическом окне MATLAB, можно щелкнуть трассировку, чтобы увидеть, какому значению частоты это соответствует.

Данные оценки нагрузки для оценки модели.

load(fullfile(matlabroot,'toolbox','ident','iddemos','data','dcmotordata'));
z = iddata(y,u,0.1,'Name','DC-motor');

z является iddata объект, который сохраняет данные оценки с одним входом с двумя выходами со шаг расчета 0,1 с.

Оцените модель пространства состояний порядка 4, используя данные оценки z.

[sys,x0] = n4sid(z,4);

sys является оценочной моделью и x0 - предполагаемые начальные состояния.

Симулируйте ответ sys использование тех же входных данных, что и для оценки, и начальных состояний, возвращенных командой оценки.

[y,t,x] = lsim(sys,z.InputData,[],x0);

Здесь, y является отклик системы, t - временной вектор, используемая для симуляции, и x - траектория состояний.

Сравните симулированный отклик y в измеренный отклик z.OutputData для обоих выходов.

subplot(211), plot(t,z.OutputData(:,1),'k',t,y(:,1),'r')
legend('Measured','Simulated')
subplot(212), plot(t,z.OutputData(:,2),'k',t,y(:,2),'r')
legend('Measured','Simulated')

Figure contains 2 axes. Axes 1 contains 2 objects of type line. These objects represent Measured, Simulated. Axes 2 contains 2 objects of type line. These objects represent Measured, Simulated.

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

sys(s)=ω2s2+2s+ω2,ω=62.83.

Симулируйте реакцию этой модели на квадратную волну с периодом 1 с, используя шаг расчета 0,1 с.

w2 = 62.83^2;
sys = tf(w2,[1 2 w2]);

tau = 1;
Tf = 5;
Ts = 0.1;
[u,t] = gensig("square",tau,Tf,Ts);
lsim(sys,u,t)

lsim warning message: The input signal is undersampled.

lsim моделирует модель с помощью заданного входного сигнала, но выдает предупреждение, что входной сигнал занижен. lsim рекомендует шаг расчета, которая генерирует по меньшей мере 64 выборки за период входа u. Чтобы понять, почему эта рекомендация имеет значение, моделируйте sys снова с использованием шага расчета, меньшего рекомендуемого максимума.

figure
Ts2 = 0.01;
[u2,t2] = gensig("square",tau,Tf,Ts2);
lsim(sys,u2,t2)

Этот ответ показывает сильное колебательное поведение, которое скрыто в недостаточно дискретизированной версии.

Входные параметры

свернуть все

Динамическая система, заданная как SISO или MIMO динамическая системная модель или массив динамических системных моделей. Динамические системы, отклики которых можно моделировать, включают:

  • Непрерывные или дискретные числовые модели LTI, такие как tf, zpk, или ss модели.

  • Обобщенные или неопределенные модели LTI, такие как genss или uss модели. (Использование неопределенных моделей требует программного обеспечения Robust Control Toolbox™.)

    • Для настраиваемых блоков системы управления функция оценивает модель по ее текущему значению как для построения графика, так и для возврата данных отклика.

    • Для неопределенных блоков системы управления графики функций номинального значения и случайных выборок модели. Когда вы используете выходные аргументы, функция возвращает данные отклика только для номинальной модели.

  • Разреженные модели пространства состояний, такие как sparss и mechss модели.

  • Идентифицированные модели LTI, такие как idtf, idss, или idproc модели. Для идентифицированных моделей можно также использовать sim команда, которая может вычислить стандартное отклонение траекторий симулированного отклика и состояния. sim может также симулировать все типы моделей с ненулевыми начальными условиями и может симулировать нелинейные идентифицированные модели.

lsim не поддерживает такие модели данных частотной характеристики, как frd, genfrd, или idfrd модели.

Если sys является массивом моделей, графики функций характеристик всех моделей в массиве на тех же осях. См. «Реакция систем в массиве моделей» (Control System Toolbox).

Входной сигнал для симуляции, заданный как вектор для систем с одним входом и массив для систем с мультивходами.

  • Для систем с одним входом, u - вектор той же длины, что и t.

  • Для мультивходов, u массив с таким количеством строк, сколько существует временных выборок (length(t)) и столько столбцов, сколько входов для sys. Другими словами, каждая строка u(i,:) представляет значения, примененные к входам sys во время t(i). Каждый столбец u(:,j) - сигнал, приложенный к jпервый вход sys.

Временные выборки, в которые можно вычислить ответ, заданные как вектор вида 0:dT:Tf. lsim интерпретация команд t с модулями, указанными в TimeUnit свойство модели sys.

Для непрерывных sys, lsim команда использует временной шаг dT для дискретизации модели. Если dT слишком велик относительно динамики системы (пониженная дискретизация), lsim выдает предупреждение, рекомендующее сократить время дискретизации. Дальнейшее обсуждение влияния времени отбора проб на моделирование смотрите в Эффект Шага расчета по симуляции (Control System Toolbox).

Для дискретных sys, временной шаг dT должен равняться шагу расчета sys. Также можно опустить t или установите его равным []. В этом случае, lsim устанавливает t в вектор той же длины, что и u который начинается с 0 с временного шага, равного sys.Ts.

Начальные значения состояния для симуляции модели пространства состояний, заданные как вектор, имеющий один вход для каждого состояния в sys. Если вы опускаете этот аргумент, то lsim устанавливает все состояния в нуль в t = 0.

Метод дискретизации для дискретизации моделей в непрерывном времени, указанный как одно из следующего.

  • 'zoh' - Удержание нулевого порядка

  • 'foh' - Удержание первого порядка

Когда sys является моделью в непрерывном времени, lsim вычисляет временную характеристику путем дискретизации модели с помощью шага расчета, равного временному шагу dT = t(2)-t(1) от t. Если вы не задаете метод дискретизации, то lsim автоматически выбирает метод на основе плавности сигнала u. Для получения дополнительной информации об этих двух методах дискретизации смотрите Непрерывно-Дискретные Методы Преобразования (Control System Toolbox).

Стиль линии, цвет и маркер задается как строка или вектор на один, два или три символа. Символы могут появляться в любом порядке. Вам не нужно задавать все три характеристики (стиль линии, маркер и цвет). Например, если вы опускаете стиль линии и задаете маркер, то на графике отображается только маркер и нет линии. Для получения дополнительной информации о настройке этого аргумента смотрите LineSpec входной параметр plot функция.

Пример: 'r--' задает красную штриховую линию

Пример: '*b' задает синие маркеры звездочки

Пример: 'y' задает желтую линию

Выходные аргументы

свернуть все

Симулированные отклики, возвращенные как массив.

  • Для систем с одним входом, y является векторы-столбцы той же длины, что и t.

  • Для мультивыходов, y массив с таким количеством строк, сколько существует временных выборок (length(t)) и столько столбцов, сколько выходов в sys. Таким образом, j-й столбец y, или y(:,j), содержит ответ на j-м выходе на u применяется на всех входах.

Временной вектор используется для симуляции, возвращается как вектор-столбец. Когда вы задаете входной временной вектор t формы 0:dT:Tf, затем tOut = t. Если t почти выравнивается, lsim корректирует шаги расчета для симуляции и возвращает результат в tOut. Для дискретных sysможно опускать t или установите его равным []. В этом случае, lsim устанавливает t в вектор той же длины, что и u который начинается с 0 с временного шага, равного sys.Ts, и возвращает результат в tOut.

Траектории состояний, возвращенные как массив. Когда sys является моделью пространства состояний, x содержит эволюцию состояний sys в ответ на вход. x массив с таким количеством строк, сколько существует временных выборок (length(t)) и столько столбцов, сколько состояний в sys.

Совет

  • Когда вам нужны дополнительные опции индивидуальной настройки графика, используйте lsimplot вместо этого.

Алгоритмы

Для передаточной функции в дискретном времени,

sys(z1)=a0+a1z1++anzn1+b1z1++bnzn,

lsim фильтрует вход на основе рекурсии, связанной с этой передаточной функцией:

y[k]=a0u[k]++anu[kn]b1y[k1]bn[kn].

Для дискретных zpk модели, lsim фильтрует вход через последовательность первого порядка или секций второго порядка. Этот подход избегает формирования полиномов числителя и знаменателя, что может вызвать числовую нестабильность для моделей более высокого порядка.

Для моделей пространства состояний в дискретном времени, lsim распространяет уравнения пространства состояний в дискретном времени,

x[n+1]=Ax[n]+Bu[n],y[n]=Cx[n]+Du[n].

Для систем непрерывного времени, lsim сначала дискретизирует систему, используя c2d, а затем распространяет получившиеся уравнения пространства состояний в дискретном времени. Если вы не задаете обратное с method входной параметр, lsim использует метод дискретизации с задержкой первого порядка, когда входной сигнал является плавным, и удержание с нулевым порядком, когда входной сигнал является прерывистым, например, для импульсов или квадратных волн. Дискретизация шага расчета быть интервалом dT между временными выборками, которые вы поставляете в t.

См. также

Функции

Приложения

Введенный в R2012a