В этом примере показано, как использовать команду «Надежный Toolbox™ управления» ucover для моделирования семейства ответов LTI как неопределенной системы. Эта команда полезна для подгонки неопределенной модели к набору частотных откликов, представляющих изменчивость системы, или для уменьшения сложности существующей неопределенной модели для облегчения синтеза надежных контроллеров с musyn.
В этом первом примере мы имеем семейство моделей, описывающих поведение установки при различных рабочих условиях. Номинальная модель завода является нестабильной системой первого порядка.
Pnom = tf(2,[1 -2])
Pnom =
2
-----
s - 2
Continuous-time transfer function.
Другие модели являются вариациями Pnom. Все они имеют один нестабильный полюс, но расположение этого полюса может изменяться в зависимости от условий работы.
p1 = Pnom*tf(1,[.06 1]); % extra lag p2 = Pnom*tf([-.02 1],[.02 1]); % time delay p3 = Pnom*tf(50^2,[1 2*.1*50 50^2]); % high frequency resonance p4 = Pnom*tf(70^2,[1 2*.2*70 70^2]); % high frequency resonance p5 = tf(2.4,[1 -2.2]); % pole/gain migration p6 = tf(1.6,[1 -1.8]); % pole/gain migration
Чтобы применить надежные инструменты управления, мы можем заменить этот набор моделей одной неопределенной моделью растения, диапазон поведения которой включает p1 через p6. Это одно использование команды ucover. Эта команда принимает массив моделей LTI Parray и номинальная модель Pnom и моделирует разницу Parray-Pnom как мультипликативная неопределенность в динамике системы.
Поскольку ucover ожидает массив моделей, используйте stack команда для сбора моделей установки p1 через p6 в один массив.
Parray = stack(1,p1,p2,p3,p4,p5,p6);
Далее используйте ucover чтобы «покрыть» диапазон поведения Parray с неопределенной моделью формы
P = Pnom * (1 + Wt * Delta)
где вся неопределенность сосредоточена в «немодированной динамике» Delta (a ultidyn объект). Потому что выигрыш Delta равномерно ограничен 1 на всех частотах, «формирующий» фильтр Wt используется для определения того, как относительная величина неопределенности изменяется с частотой. Этот фильтр также называют функцией взвешивания неопределенности.
Попробуйте использовать фильтр 4-го порядка Wt для этого примера:
orderWt = 4;
Parrayg = frd(Parray,logspace(-1,3,60));
[P,Info] = ucover(Parrayg,Pnom,orderWt,'InputMult');
Результирующая модель P - объект с одним входом и одним выходом в неопределенном состоянии-пространстве (USS) с номинальным значением Pnom.
P
P =
Uncertain continuous-time state-space model with 1 outputs, 1 inputs, 5 states.
The model uncertainty consists of the following blocks:
Parrayg_InputMultDelta: Uncertain 1x1 LTI, peak gain = 1, 1 occurrences
Type "P.NominalValue" to see the nominal value, "get(P)" to see all properties, and "P.Uncertainty" to interact with the uncertain elements.
tf(P.NominalValue)
ans =
2
-----
s - 2
Continuous-time transfer function.
График величины Бода подтверждает, что формирующий фильтр Wt «охватывает» относительные изменения в поведении растений. В зависимости от частоты уровень неопределенности составляет 30% при 5 рад/сек (-10dB = 0,3), 50% при 10 рад/сек и 100% после 29 рад/сек.
Wt = Info.W1; bodemag((Pnom-Parray)/Pnom,'b--',Wt,'r'); grid title('Relative Gaps vs. Magnitude of Wt')

Теперь можно использовать неопределенную модель P для проектирования надежного контроллера для исходного семейства моделей растений см. раздел Одновременная стабилизация с использованием надежного управления для получения подробной информации.
В этом втором примере мы начинаем с детальной неопределенной модели завода. Эта модель состоит из динамики первого порядка с неопределенным усилением и постоянной времени, последовательно с слабо затухающим резонансом и значительной немодированной динамикой. Эта модель создается с помощью ureal и ultidyn команды для указания неопределенных переменных:
gamma = ureal('gamma',2,'Perc',30); % uncertain gain tau = ureal('tau',1,'Perc',30); % uncertain time-constant wn = 50; xi = 0.25; P = tf(gamma,[tau 1]) * tf(wn^2,[1 2*xi*wn wn^2]); % Add unmodeled dynamics and set SampleStateDim to 5 to get representative % sample values of the uncertain model P delta = ultidyn('delta',[1 1],'SampleStateDim',5,'Bound',1); W = makeweight(0.1,20,10); P = P * (1+W*delta)
P =
Uncertain continuous-time state-space model with 1 outputs, 1 inputs, 4 states.
The model uncertainty consists of the following blocks:
delta: Uncertain 1x1 LTI, peak gain = 1, 1 occurrences
gamma: Uncertain real, nominal = 2, variability = [-30,30]%, 1 occurrences
tau: Uncertain real, nominal = 1, variability = [-30,30]%, 1 occurrences
Type "P.NominalValue" to see the nominal value, "get(P)" to see all properties, and "P.Uncertainty" to interact with the uncertain elements.
Набор ступенчатых ответов иллюстрирует изменчивость растений.
step(P,4)
title('Sampled Step Responses of Uncertain System')

Неопределенная модель установки P содержит 3 неопределенных элемента. Для целей конструкции управления часто желательно упростить эту модель неопределенности, приблизительно сохраняя ее общую изменчивость. Это другое использование команды ucover.
Использовать ucover в этом контексте сначала нанесите на карту неопределенную модель P в массив моделей LTI с использованием usample. Эта команда выполняет выборку неопределенных элементов в неопределенной системе и возвращает соответствующие модели LTI, причем каждая модель представляет одно возможное поведение неопределенной системы. В этом примере пример P в 60 точках (генератор случайных чисел затравлен для повторяемости):
rng(0,'twister');
Parray = usample(P,60);
Далее используйте ucover чтобы охватить все варианты поведения в Parray простой моделью неопределенности Usys. Выберите номинальное значение P в качестве центра крышки и используйте фильтр 2-го порядка для моделирования частотного распределения немодулированной динамики.
orderWt = 2;
Parrayg = frd(Parray,logspace(-3,3,60));
[Usys,Info] = ucover(Parrayg,P.NominalValue,orderWt,'InputMult');
График величины Боде показывает, как величина фильтра (красным цветом) «покрывает» относительную изменчивость частотной характеристики растения (синим цветом).
Wt = Info.W1; bodemag((P.NominalValue-Parray)/P.NominalValue,'b--',Wt,'r') title('Relative Gaps (blue) vs. Shaping Filter Magnitude (red)')

Теперь можно использовать упрощенную модель неопределенности Usys для проектирования надежного контроллера для исходной установки см. раздел «Надежное проектирование первого погона» для получения более подробной информации.
В этом третьем примере мы начинаем с 40 частотных откликов системы с 2 входами и 2 выходами. Эти данные были собраны с помощью частотного анализатора при различных рабочих условиях. Номинальная модель с двумя состояниями соответствует наиболее типичной реакции:
A = [-5 10;-10 -5]; B = [1 0;0 1]; C = [1 10;-10 1]; D = 0; Pnom = ss(A,B,C,D);
Данные частотной характеристики загружаются в массив 40 на 1 моделей FRD:
load ucover_demo
size(Pdata)
40x1 array of FRD models. Each model has 2 outputs, 2 inputs, and 120 frequency points.
Постройте график этих данных и наложите номинальную модель.
bode(Pdata,'b--',Pnom,'r',{.1,1e3}), grid legend('Frequency response data','Nominal model','Location','NorthEast')

Поскольку изменчивость откликов является скромной, попробуйте моделировать это семейство частотных откликов с использованием аддитивной модели неопределенности формы
P = Pnom + w * Delta
где Delta является 2 на 2 ultidyn объект, представляющий немодированную динамику и w является скалярной весовой функцией, отражающей частотное распределение неопределенности (изменчивость в Pdata).
Начать с фильтра первого порядка w и сравнить величину w с минимальной величиной неопределенности, необходимой на каждой частоте:
[P1,InfoS1] = ucover(Pdata,Pnom,1,'Additive'); w = InfoS1.W1; bodemag(w,'r',InfoS1.W1opt,'g',{1e-1 1e3}) title('Scalar Additive Uncertainty Model') legend('First-order w','Min. uncertainty amount','Location','SouthWest')

Величина w должны точно соответствовать минимальной сумме неопределенности. Понятно, что подгонка первого порядка слишком консервативна и превышает это минимальное количество на большинстве частот. Повторите попытку с помощью фильтра третьего порядка w. Для ускорения повторно используйте данные в InfoS1 чтобы избежать повторного вычисления оптимального масштабирования неопределенности на каждой частоте.
[P3,InfoS3] = ucover(Pnom,InfoS1,3,'Additive'); w = InfoS3.W1; bodemag(w,'r',InfoS3.W1opt,'g',{1e-1 1e3}) title('Scalar Additive Uncertainty Model') legend('Third-order w','Min. uncertainty amount','Location','SouthWest')

Величина w теперь близко соответствует минимальной сумме неопределенности. Среди моделей аддитивной неопределенности, P3 обеспечивает плотное покрытие поведения в Pdata. Обратите внимание, что P3 имеет в общей сложности 8 состояний (2 из номинальной части и 6 из w).
P3
P3 =
Uncertain continuous-time state-space model with 2 outputs, 2 inputs, 8 states.
The model uncertainty consists of the following blocks:
Pdata_AddDelta: Uncertain 2x2 LTI, peak gain = 1, 1 occurrences
Type "P3.NominalValue" to see the nominal value, "get(P3)" to see all properties, and "P3.Uncertainty" to interact with the uncertain elements.
Эту аддитивную модель неопределенности можно уточнить, используя, например, несалярные функции взвешивания неопределенности.
P = Pnom + W1*Delta*W2
где W1 и W2 2 на 2 диагональных фильтра. В этом примере ограничение использования W2=1 и позволяют обоим диагональным элементам W1 быть третьего порядка.
[PM,InfoM] = ucover(Pdata,Pnom,[3;3],[],'Additive');
Сравните две записи W1 с минимальной величиной неопределенности, вычисленной ранее. Обратите внимание, что на всех частотах одна из диагональных записей W1 имеет величину намного меньшую, чем скалярный фильтр w. Это говорит о том, что диагонально взвешенная модель неопределенности дает менее консервативное покрытие семейства частотных характеристик.
bodemag(InfoS1.W1opt,'g*',... InfoM.W1opt(1,1),'r--',InfoM.W1(1,1),'r',... InfoM.W1opt(2,2),'b--',InfoM.W1(2,2),'b',{1e-1 1e3}); title('Diagonal Additive Uncertainty Model') legend('Scalar Optimal Weight',... 'W1(1,1), pointwise optimal',... 'W1(1,1), 3rd-order fit',... 'W1(2,2), pointwise optimal',... 'W1(2,2), 3rd-order fit',... 'Location','SouthWest')

Степень консервативности одного покрытия по сравнению с другим может быть частично количественно определена с учетом двух частотно-зависимых величин:
Fd2s = norm(inv(W1)*w) , Fs2d = norm(W1/w)
Эти величины определяют, насколько одна модель неопределенности должна быть масштабирована для охвата другой. Например, модель неопределенности Pnom + W1*Delta необходимо увеличить на коэффициент Fd2s включить все модели, представленные неопределенной моделью Pnom + w*Delta.
График Fd2s и Fs2d как функция частоты.
Fd2s = fnorm(InfoS1.W1opt*inv(InfoM.W1opt)); Fs2d = fnorm(InfoM.W1opt*inv(InfoS1.W1opt)); semilogx(fnorm(Fd2s),'b',fnorm(Fs2d),'r'), grid axis([0.1 1000 0.5 2.6]) xlabel('Frequency (rad/s)'), ylabel('Magnitude') title('Scale factors relating different covers') legend('Diagonal to Scalar factor',... 'Scalar to Diagonal factor','Location','SouthWest');

Этот график показывает, что:
Fs2d = 1 в большом диапазоне частот, так Pnom+w*Delta включает все варианты поведения, смоделированные Pnom+W1*Delta
В этом же диапазоне частот, Pnom+W1*Delta не включает все поведения, смоделированные Pnom+w*Delta и, по сути, для этого необходимо увеличить его в 1,2-2,6 раза.
В частотном диапазоне [1 20] ни одна из моделей неопределенности не содержит другой, но на всех частотах, делая Pnom+W1*Delta покрытие Pnom+w*Delta требует гораздо меньшего масштабного коэффициента, чем обратное.
Это означает, что Pnom+W1*Delta модель обеспечивает менее консервативное покрытие данных частотной характеристики в Pdata.