Аппроксимация нелинейного поведения Используя массив систем LTI

В этом примере показано, как аппроксимировать нелинейное поведение системы как массив взаимосвязанных моделей LTI.

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

О моделях Линейного варьирования параметра (LPV)

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

Чтобы сгенерировать модель LPV, нелинейная модель обрезается и линеаризуется по сетке рабочих точек. С этой целью операционный пробел параметризован небольшим количеством планирования параметров. Эти параметры часто являются подмножеством входных параметров, состояний и выходных переменных нелинейной системы. Важное соображение в создании моделей LPV является идентификацией набора параметра планирования и выбором области значений значений параметров, в которых можно линеаризовать модель.

Мы иллюстрируем этот подход для аппроксимации динамики подачи корпуса.

Передайте динамику корпуса

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

Рисунок 1: динамика Корпуса.

Движущие силы корпуса нелинейны и аэродинамические силы, и моменты зависят от скорости и падения. Модель scdairframeTRIM описывает эти движущие силы.

open_system('scdairframeTRIM')

Пакетная линеаризация через конверт рейса

Используйте скорость и угол установки как планирование параметров; то есть, обрежьте модель корпуса по сетке и значениям. Обратите внимание на то, что это два из пяти выходных параметров scdairframeTRIM модель.

Примите, что падение варьируется между-20 и 20 градусами и что скорость варьируется между 700 и 1 400 м/с. Используйте 15 12 сетка линейно расположенных с интервалами пар для планирования:

nA = 15;   % number of alpha values
nV = 12;   % number of V values
alphaRange = linspace(-20,20,nA)*pi/180;
VRange = linspace(700,1400,nV);
[alpha,V] = ndgrid(alphaRange, VRange);

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

Используйте operspec чтобы задать условие для обрезки, используйте findop вычислить значения для обрезки и и линеаризовать динамику корпуса для получившейся рабочей точки. Смотрите "Обрезку и Линеаризацию Корпуса" пример для деталей.

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

clear op report
for ct = 1:nA*nV
   alpha_ini = alpha(ct);      % Incidence [rad]
   v_ini = V(ct);              % Speed [m/s]

   % Specify trim condition
   opspec(ct) = operspec('scdairframeTRIM');

   % Xe,Ze: known, not steady.
   opspec(ct).States(1).Known = [1;1];
   opspec(ct).States(1).SteadyState = [0;0];

   % u,w: known, w steady
   opspec(ct).States(3).Known = [1 1];
   opspec(ct).States(3).SteadyState = [0 1];

   % theta: known, not steady
   opspec(ct).States(2).Known = 1;
   opspec(ct).States(2).SteadyState = 0;

   % q: unknown, steady
   opspec(ct).States(4).Known = 0;
   opspec(ct).States(4).SteadyState = 1;

end
opspec = reshape(opspec, [nA nV]);

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

Options = findopOptions('DisplayReport','off', ...
	'OptimizerType','lsqnonlin');
Options.OptimizationOptions.Algorithm = 'trust-region-reflective';
[op, report] = findop('scdairframeTRIM',opspec,Options);

op массив содержит рабочие точки, найденные findop это будет использоваться в линеаризации. report массив содержит запись входа, выхода и значений состояния в каждой точке.

Задайте вводы и выводы линеаризации.

io = [linio('scdairframeTRIM/delta',1,'in');...        % delta
   linio('scdairframeTRIM/Airframe Model',1,'out');... % alpha
   linio('scdairframeTRIM/Airframe Model',2,'out');... % V
   linio('scdairframeTRIM/Airframe Model',3,'out');... % q
   linio('scdairframeTRIM/Airframe Model',4,'out');... % az
   linio('scdairframeTRIM/Airframe Model',5,'out')];   % gamma

Пакет - линеаризует модель при условиях для обрезки. Храните информацию смещения линеаризации в info структура.

[G,~,info] = linearize('scdairframeTRIM',op,io, ...
	linearizeOptions('StoreOffsets',true));
G = reshape(G,[nA nV]);
G.u = 'delta';
G.y = {'alpha','V','q','az','gamma'};
G.SamplingGrid = struct('alpha',alpha,'V',V);

G 15 12 массив линеаризовавших моделей объекта управления при 180 условиях рейса. Движущие силы объекта варьируются существенно через конверт рейса, включая планирование местоположений, где локальные движущие силы нестабильны.

bodemag(G(3:5,:,:,:))
title('Variations in airframe dynamics')

Системный блок LPV

Блок LPV System в библиотеке блоков Control System Toolbox™ упрощает симуляцию линейного параметра различные системы. Первичные данные, требуемые блоком, являются массивом системы в пространстве состояний G это было сгенерировано пакетной линеаризацией. Мы увеличиваем это с информацией о вводе/выводе, состоянии, и утверждаем производные смещения от info структура.

Извлеките информацию о смещении.

offsets = getOffsetsForLPV(info);
xOffset = offsets.x;
yOffset = offsets.y;
uOffset = offsets.u;
dxOffset = offsets.dx;

Симуляция модели LPV

Откройте систему scdairframeLPV, который содержит блок LPV System, который был сконфигурирован на основе массива линейной системы G и различные смещения.

open_system('scdairframeLPV')

Входной сигнал был подготовлен на основе желаемой траектории корпуса. Этот u сигнала и соответствующий временной вектор t сохранены в scdairframeLPVsimdata.mat файл. Задайте начальные условия для симуляции.

alpha_ini = 0;
v_ini = 700;
x0 = [0; 700; 0; 0];
sim('scdairframeLPV')

Симуляция показывает хорошую эмуляцию ответа корпуса системой LPV. Мы выбрали очень прекрасный gridding планирования продвижения пробела к большому количеству (180) из линейных моделей. Размеры большого массива могут увеличить затраты на внедрение. Однако преимущество представлений LPV состоит в том, что мы можем настроить сетку планирования (и следовательно количество линейных систем в массиве) на основе:

  • Подпространство планирования заполнено ожидаемой траекторией

  • Уровень точности желаем в приложении

Бывшая информация помогает уменьшать область значений для переменных планирования. Последний помогает выбрать оптимальное разрешение (интервал) выборок на пробеле планирования.

Давайте построим фактическую траекторию планирования переменных в предыдущей симуляции на фоне пробела планирования с координатной сеткой. Выходные параметры регистрировались через их осциллографы (содержавший в блоке Compare Responses scdairframeLPV).

Stable = false(nA,nV);
for ct = 1:nA*nV
   Stable(ct ) = isstable(G(:,:,ct));
end
alpha_trajectory = Alpha_V_Data.signals(1).values(:,1);
V_trajectory = Alpha_V_Data.signals(2).values(:,1);

plot(alpha(Stable)*180/pi,V(Stable),'g.',...
   alpha(~Stable)*180/pi,V(~Stable),'k.',...
   alpha_trajectory,V_trajectory,'r.')
title('Trajectory of scheduling variables')
xlabel('\alpha'); ylabel('V')
legend('Stable locations','Unstable locations','Actual trajectory')

Траекторию, прослеженную в процессе моделирования, отображают красным. Обратите внимание на то, что это пересекает и стабильные области и нестабильные регионы пробела планирования. Предположим, что вы хотите реализовать эту модель на целевом компьютере для входных профилей, похожих на тот, используемый в симуляции выше при использовании наименьшего количества объема памяти. Симуляция предполагает, что траектория в основном остается в области значений на 890 - 1 200 м/с скоростей и-15 к 12 областям значений степени угла установки. Кроме того, можно исследовать увеличение интервала между точками выборки. Предположим, что вы используете только каждую третью выборку по измерению и каждую вторую выборку по измерению. Редуцированный системный массив, соответствующий этим ограничениям, может быть извлечен из G можно следующим образом:

I1 = find(alphaRange>=-15*pi/180 & alphaRange<=12*pi/180);
I2 = find(VRange>=890 & VRange<=1200);
I1 = I1(1:2:end);
I2 = I2(1:3:end);

Gr = G(:,:,I1,I2);
size(Gr)
5x2 array of state-space models.
Each model has 5 outputs, 1 inputs, and 4 states.

Новая сетка выборки, Gr, имеет более экономичный размер 5 2. Симулируйте упрощенную модель и проверяйте ее точность в репродуцирование исходного поведения.

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

cwd = pwd;
cd(tempdir)
lpvblk = 'scdairframeLPV/LPV System';
set_param(lpvblk,...
   'sys','Gr',...
   'uOffset','uOffset(:,:,I1,I2)',...
   'yOffset','yOffset(:,:,I1,I2)',...
   'xOffset','xOffset(:,:,I1,I2)',...
   'dxOffset','dxOffset(:,:,I1,I2)')
sim('scdairframeLPV')
cd(cwd)

Нет никакого значительного сокращения перекрытия между ответом исходной модели и ее прокси LPV.

Модель LPV может служить прокси для исходной системы в ситуациях, где более быстрые симуляции требуются. Линейные системы, используемые моделью LPV, могут также быть получены методами системы идентификации (с дополнительной осторожностью, требуемой обеспечить непротиворечивость состояния через массив). Модель LPV может обеспечить хороший суррогат для инициализации simulink задачи оптимизации проекта и выполнение быстрых симуляций оборудования в цикле.

Смотрите также

|

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте