Анализ робастности 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('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
    WorstPerturbation: [2x2 ss]

Этот результат говорит вам, что усиление на втором объекте выход может варьироваться факторами между приблизительно 0,07 и приблизительно 14,7 без второго цикла, идущего нестабильный. Точно так же цикл может терпеть изменения фазы при выходе приблизительно до ±82 °.

Структуры MMo и MMi содержите поля для параллельных и независимых изменений обоих каналов. Например, исследуйте многоконтурные поля во входных параметрах объекта.

MMi
MMi = struct with fields:
           GainMargin: [0.1187 8.4281]
          PhaseMargin: [-76.4669 76.4669]
           DiskMargin: 1.5757
           LowerBound: 1.5757
           UpperBound: 1.5789
            Frequency: 5.9877
    WorstPerturbation: [2x2 ss]

Этот результат говорит вам, что усиление во входе объекта может варьироваться по обоим каналам независимо факторами между приблизительно 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
    WorstPerturbation: [2x2 ss]

Поля на объекте выходные параметры похожи на тех во входных параметрах. Этот результат не всегда верен в многоконтурных системах с обратной связью.

Наконец, исследуйте поля против одновременных изменений при вводах и выводах объекта.

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
    WorstPerturbation: [1x1 struct]

Когда вы рассматриваете все такие изменения одновременно, поля несколько меньше, чем те при одних только вводах или выводах. Тем не менее, эти числа указывают на обычно устойчивую систему с обратной связью. Система может терпеть значительные одновременные изменения усиления или степень на ±30 ° одновременные изменения фазы всех каналов ввода и вывода объекта.

Устойчивый запас устойчивости

С diskmargin, вы определяете различные запасы устойчивости номинальной многоконтурной системы. Эти поля вычисляются только для номинальной системы и не отражают неопределенность, явным образом смоделированную ureal и ultidyn объекты. Когда вы работаете с подробной моделью неопределенности, запасы устойчивости, вычисленные 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.6331

Этот анализ подтверждает что diskmargin анализ предлагается. Система с обратной связью довольно устойчива, в терминах устойчивости, к изменениям, смоделированным неопределенными параметрами Delta1, Delta2, и p. На самом деле система может терпеть более двух раз смоделированную неопределенность, не теряя устойчивость с обратной связью.

Анализ усиления худшего случая

Можно построить Предвещать величину номинальной выходной функции чувствительности. Это ясно показывает достойное подавление помех во всех каналах в низкой частоте.

bodemag(F.So.NominalValue,{1e-1 100})

Можно вычислить пиковое значение максимального сингулярного значения матрицы частотной характеристики использование norm.

[PeakNom,freq] = getPeakGain(F.So.NominalValue)
PeakNom = 1.1317
freq = 7.1300

Пик - приблизительно 1,13. Что является максимальным выходным усилением чувствительности, которое достигается когда неопределенные элементы Delta1, Delta2, и p варьироваться в их областях значений? Можно использовать wcgain ответить на это.

[maxgain,wcu] = wcgain(F.So);
maxgain
maxgain = struct with fields:
           LowerBound: 2.1599
           UpperBound: 2.1643
    CriticalFrequency: 8.3353

Анализ указывает, что усиление худшего случая где-нибудь между 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, но все еще вполне мала.

Можно также исследовать частотную характеристику худшего случая вместе с номинальными и произведенными системами с помощью wcsigmaplot.

wcsigmaplot(F.To,{1e-1,100})

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

| | | | | |