Анализ робастности MIMO

Можно создать и анализировать неопределенные модели в пространстве состояний, составленные из неопределенных матриц пространства состояний. В этом примере создайте систему 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 является математически тем же самым как:

K(I+GK)-1G

Lo является G*K, и CSo является математически тем же самым как

K(I+GK)-1

Исследуйте передачу воздействий во входе объекта к объекту, выведенному путем графического вывода ответов 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})

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

| | | | | |