В этом примере показано, как использовать команду Robust Control 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
(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
чтобы спроектировать устойчивый контроллер для исходного семейства моделей объекта управления, смотрите, что Одновременная Стабилизация Использует Устойчивое Управление для деталей.
В этом втором примере мы начинаем с подробной неопределенной модели объекта. Эта модель состоит из динамики первого порядка с неопределенным усилением и постоянной времени, последовательно с мягко underdamped резонанс и значительная несмоделированная динамика. Эта модель создается с помощью 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
ultidyn
2 на 2 объект, представляющий несмоделированную динамику и
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
.