Можно создать и анализировать неопределенные модели в пространстве состояний, составленные из неопределенных матриц пространства состояний. В этом примере создайте систему MIMO с параметрической неуверенностью и анализируйте его для устойчивой устойчивости и производительности худшего случая.
Рассмотрите 2D вход, 2D вывод, система с двумя состояниями, модель которой имеет параметрическую неуверенность в матрицах пространства состояний. Сначала создайте неопределенный параметр p
. Используя параметр, сделайте неопределенный A
и матрицы C
. Матрица B
, оказывается, не - сомнительна, несмотря на то, что вы добавите входную неуверенность частотного диапазона в модель позже.
p = ureal('p',10,'Percentage',10); A = [0 p;-p 0]; B = eye(2); C = [1 p;-p 1]; H = ss(A,B,C,[0 0;0 0])
H = Uncertain continuous-time state-space model with 2 outputs, 2 inputs, 2 states. The model uncertainty consists of the following blocks: p: Uncertain real, nominal = 10, variability = [-10,10]%, 2 occurrences Type "H.NominalValue" to see the nominal value, "get(H)" to see all properties, and "H.Uncertainty" to interact with the uncertain elements.
Можно просмотреть свойства неопределенной системы H
с помощью команды get
.
get(H)
NominalValue: [2x2 ss] Uncertainty: [1x1 struct] A: [2x2 umat] B: [2x2 double] C: [2x2 umat] D: [2x2 double] E: [] StateName: {2x1 cell} StateUnit: {2x1 cell} InternalDelay: [0x1 double] InputDelay: [2x1 double] OutputDelay: [2x1 double] Ts: 0 TimeUnit: 'seconds' InputName: {2x1 cell} InputUnit: {2x1 cell} InputGroup: [1x1 struct] OutputName: {2x1 cell} OutputUnit: {2x1 cell} OutputGroup: [1x1 struct] Notes: [0x1 string] UserData: [] Name: '' SamplingGrid: [1x1 struct]
Большинство свойств ведет себя таким же образом как соответствующие свойства объектов ss
. Свойство NominalValue
является самостоятельно объектом ss
.
Модель для H
не включает динамику привода. Сказанный по-другому, модели привода являются усилением единицы для всех частот.
Тем не менее, поведение привода для канала 1 скромно сомнительно (скажите 10%) в низких частотах, и точно не моделируется высокочастотное поведение вне 20 рад/с. Подобные операторы содержат для привода в канале 2, с большей скромной неуверенностью в низкой частоте (скажите 20%), но точность к 45 рад/с.
Используйте объекты ultidyn
Delta1
и Delta2
наряду с формирующий фильтрами W1
и W2
, чтобы добавить эту форму неуверенности частотного диапазона к модели.
W1 = makeweight(.1,20,50); W2 = makeweight(.2,45,50); Delta1 = ultidyn('Delta1',[1 1]); Delta2 = ultidyn('Delta2',[1 1]); G = H*blkdiag(1+W1*Delta1,1+W2*Delta2)
G = Uncertain continuous-time state-space model with 2 outputs, 2 inputs, 4 states. The model uncertainty consists of the following blocks: Delta1: Uncertain 1x1 LTI, peak gain = 1, 1 occurrences Delta2: Uncertain 1x1 LTI, peak gain = 1, 1 occurrences p: Uncertain real, nominal = 10, variability = [-10,10]%, 2 occurrences Type "G.NominalValue" to see the nominal value, "get(G)" to see all properties, and "G.Uncertainty" to interact with the uncertain elements.
Обратите внимание на то, что G
является 2D входом, 2D вывод неопределенная система, с зависимостью от трех неопределенных элементов, Delta1
, Delta2
и p
. Это имеет четыре состояния, два от H
и один каждый от формирующий фильтров W1
и W2
, которые встраиваются в G
.
Можно построить 2-секундный переходной процесс нескольких выборок G
, 10%-я неуверенность в собственной частоте очевидна.
stepplot(G,2)
Можно создать Диаграмму Боде выборок G
. Высокочастотная неуверенность в модели также очевидна. Для ясности запустите Диаграмму Боде вне резонанса.
bodeplot(G,{13 100})
Загрузите контроллер и проверьте, что это 2D вводится и 2D выводится.
load(fullfile(matlabroot,'examples','robust','mimoKexample.mat')) size(K)
State-space model with 2 outputs, 2 inputs, and 9 states.
Можно использовать команду loopsens
, чтобы сформировать все стандартные настройки обратной связи объекта/контроллера, включая чувствительность и дополнительную чувствительность в обоих ввод и вывод. Поскольку G
сомнителен, все системы с обратной связью сомнительны также.
F = loopsens(G,K)
F = struct with fields:
Si: [2x2 uss]
Ti: [2x2 uss]
Li: [2x2 uss]
So: [2x2 uss]
To: [2x2 uss]
Lo: [2x2 uss]
PSi: [2x2 uss]
CSo: [2x2 uss]
Poles: [13x1 double]
Stable: 1
F
является структурой со многими полями. Полюса номинальной системы с обратной связью находятся в F.Poles
, и F.Stable
равняется 1, если номинальная система с обратной связью стабильна. В остающихся 10 полях S
обозначает чувствительность, T
или дополнительную чувствительность и L
для коэффициента усиления разомкнутого контура. Суффиксы i
и o
относятся к вводу и выводу объекта. Наконец, P
и C
относятся к объекту и контроллеру.
Следовательно, Ti
является математически тем же самым как:
Lo
является G*K
, и CSo
является математически тем же самым как
Исследуйте передачу воздействий во входе объекта к объекту, выведенному путем графического вывода ответов F.PSi
. График некоторые выборки наряду с номиналом.
bodemag(F.PSi.NominalValue,'r+',F.PSi,'b-',{1e-1 100})
Можно использовать allmargin
, чтобы исследовать цикл за один раз запасы по амплитуде и фазе и diskmargin
для цикла за один раз находящиеся на диске поля и одновременные многомерные поля. Поля вычисляются для номинальной системы и не отражают модели неуверенности в G
.
Например, исследуйте находящиеся на диске поля для усиления или изменений фазы на объекте выходные параметры и входные параметры. (Для получения общей информации о находящемся на диске граничном анализе, смотрите, что Анализ Устойчивости Использует Дисковые Поля.)
[DMo,MMo] = diskmargin(G*K); [DMi,MMi] = diskmargin(K*G);
Цикл за один раз поля возвращен в массивах структур DMo
и DMi
. Каждый из этих массивов содержит одну запись для каждого из двух каналов обратной связи. Например, исследуйте поля на объекте вывод для второго канала обратной связи.
DMo(2)
ans = struct with fields:
GainMargin: [0.0682 14.6726]
PhaseMargin: [-82.2022 82.2022]
DiskMargin: 1.7448
LowerBound: 1.7448
UpperBound: 1.7448
Frequency: 4.8400
Этот результат говорит вам, что усиление на втором объекте вывод может отличаться факторами между приблизительно 0,07 и приблизительно 14,7 без второго цикла, идущего нестабильный. Точно так же цикл может терпеть изменения фазы при выводе приблизительно до ±82 °.
Структуры MMo
и MMi
содержат поля для параллельных и независимых изменений в обоих каналах. Например, исследуйте многоконтурные поля во входных параметрах объекта.
MMi
MMi = struct with fields:
GainMargin: [0.1186 8.4289]
PhaseMargin: [-76.4682 76.4682]
DiskMargin: 1.5758
LowerBound: 1.5758
UpperBound: 1.5790
Frequency: 5.9828
Этот результат говорит вам, что усиление во входе объекта может отличаться по обоим каналам независимо факторами между приблизительно 1/8 и 8 без системы с обратной связью, идущей нестабильный. Система может терпеть независимые и параллельные изменения фазы выше на приблизительно ±76 °. Поскольку многоконтурные поля принимают взаимодействия цикла во внимание, они имеют тенденцию быть меньшими, чем цикл за один раз поля.
Исследуйте многоконтурные поля на объекте выходные параметры.
MMo
MMo = struct with fields:
GainMargin: [0.1201 8.3290]
PhaseMargin: [-76.3074 76.3074]
DiskMargin: 1.5712
LowerBound: 1.5712
UpperBound: 1.5744
Frequency: 17.3984
Поля на объекте выходные параметры подобны тем во входных параметрах. Этот результат не всегда верен в многоконтурных системах с обратной связью.
Наконец, исследуйте поля против одновременных изменений при вводах и выводах объекта.
MMio = diskmargin(G,K)
MMio = struct with fields:
GainMargin: [0.5676 1.7619]
PhaseMargin: [-30.8440 30.8440]
DiskMargin: 0.5517
LowerBound: 0.5517
UpperBound: 0.5528
Frequency: 9.0688
Когда вы рассматриваете все такие изменения одновременно, поля несколько меньше, чем те при одних только вводах или выводах. Тем не менее, эти числа указывают на обычно устойчивую систему с обратной связью. Система может терпеть значительные одновременные изменения усиления или степень на ±30 ° одновременные изменения фазы во всех каналах ввода и вывода объекта.
С diskmargin
вы определяете различные запасы устойчивости номинальной многоконтурной системы. Эти поля вычисляются только для номинальной системы и не отражают неуверенность, явным образом смоделированную объектами ultidyn
и ureal
. Когда вы работаете с подробной моделью неуверенности, запасы устойчивости, вычисленные diskmargin
, не могут точно отразить, как близко система от того, чтобы быть нестабильным. Можно затем использовать robstab
, чтобы вычислить устойчивый запас устойчивости для заданной неуверенности.
В этом примере используйте robstab
, чтобы вычислить устойчивый запас устойчивости для неопределенной обратной связи, состоявшей из G
и K
. Можно использовать любую из передаточных функций с обратной связью в F = loopsens(G,K)
. У всех них, F.Si, F.To
, и т.д., есть та же внутренняя динамика, и следовательно их свойства устойчивости являются тем же самым.
opt = robOptions('Display','on'); stabmarg = robstab(F.So,opt)
Computing peak... Percent completed: 100/100 System is robustly stable for the modeled uncertainty. -- It can tolerate up to 221% of the modeled uncertainty. -- There is a destabilizing perturbation amounting to 222% of the modeled uncertainty. -- This perturbation causes an instability at the frequency 13.6 rad/seconds.
stabmarg = struct with fields:
LowerBound: 2.2129
UpperBound: 2.2173
CriticalFrequency: 13.6328
Этот анализ подтверждает что предложенный анализ diskmargin
. Система с обратной связью довольно устойчива, с точки зрения устойчивости, к изменениям, смоделированным неопределенными параметрами Delta1
, Delta2
и p
. На самом деле система может терпеть более двух раз смоделированную неуверенность, не теряя устойчивость с обратной связью.
Можно построить Предвещать значение номинальной выходной функции чувствительности. Это ясно показывает достойное подавление помех во всех каналах в низкой частоте.
bodemag(F.So.NominalValue,{1e-1 100})
Можно вычислить пиковое значение максимального сингулярного значения матрицы частотной характеристики использование norm
.
[PeakNom,freq] = getPeakGain(F.So.NominalValue)
PeakNom = 1.1288
freq = 6.7969
Пик - приблизительно 1,13. Что максимум является выходным усилением чувствительности, которое достигается, когда неопределенные элементы Delta1
, Delta2
и p
отличаются в их областях значений? Можно использовать wcgain
, чтобы ответить на это.
[maxgain,wcu] = wcgain(F.So); maxgain
maxgain = struct with fields:
LowerBound: 2.1599
UpperBound: 2.1643
CriticalFrequency: 8.3347
Анализ указывает, что усиление худшего случая где-нибудь между 2,1 и 2.2. Частота, где пик достигается, является приблизительно 8,5.
Используйте usubs
, чтобы заменить значения для Delta1
, Delta2
и p
, которые достигают усиления 2,1. Сделайте замену в выводе дополнительной чувствительностью и сделайте переходной процесс.
step(F.To.NominalValue,usubs(F.To,wcu),5)
Встревоженный ответ, который является худшей комбинацией неопределенных значений с точки зрения выходного усиления чувствительности, не показывает значительное ухудшение ответа команды. Время установления увеличено приблизительно на 50%, от 2 до 4, и недиагональная связь увеличена приблизительно фактором приблизительно 2, но все еще довольно маленькая.
Можно также исследовать частотную характеристику худшего случая вместе с номинальными и выбранными системами с помощью wcsigma
.
wcsigma(F.To,{1e-1,100})
diskmargin
| loopsens
| robstab
| ultidyn
| usubs
| wcgain
| wcsigma