Этот пример показывает, как смоделировать неопределенность усиления и фазы в циклах обратной связи с помощью umargin управляйте конструкторским блоком. Пример также показывает, как проверить цикл обратной связи на устойчивую стабильность против такой неопределенности.
Рассмотрите цикл обратной связи SISO с передаточной функцией без разомкнутого контура
.
L = tf(3.5,[1 2 3 0]);
bode(L)
grid on
Из-за неопределенности объекта и других источников изменчивости коэффициент усиления и фаза цикла подвержены колебаниям. В целом можно количественно определить величину неопределенности путем экспериментов над своей системой или аппроксимировать ее на основе понимания или опыта. В данном примере предположим, что коэффициент усиления без разомкнутого контура может увеличиться или уменьшиться на 50%, а фаза - ± на 30 °. Можно использовать umargin блок, чтобы смоделировать такую неопределенность. umargin представляет изменение как неопределенный мультипликативный коэффициент F с номинальным значением 1. Множество значений F может взять, захватывает заданную вами неопределенность усиления и фазы.
Как создать umargin блокируйте, используйте getDGM чтобы вычислить наименьший диск неопределенности, который захватывает изменение усиления и фазы, которое вы хотите представлять. Используйте выход getDGM для создания F.
DGM = getDGM(1.5,30,'tight'); F = umargin('F',DGM)
F = Uncertain gain/phase "F" with relative gain change in [0.472,1.5] and phase change of ±30 degrees.
Визуализируйте F, чтобы увидеть область значений значений, принятых этим фактором (справа), и область значений изменений усиления и фазы, которые он моделирует F (слева).
plot(F)

Графики показывают, что коэффициент усиления может варьироваться между 47% и 150% от его номинального значения (при условии отсутствия изменения фазы), а фаза может варьироваться ± на 30 ° (при условии отсутствия изменения коэффициента усиления). Когда и коэффициент усиления, и фаза изменяются, их изменение остается внутри заштрихованной области на левом графике.
Неопределенность F умножает ответ без разомкнутого контура, получая систему с обратной связью, как на следующей схеме.

Включите эту неопределенность в модель с обратной связью.
T = feedback(L*F,1)
T =
Uncertain continuous-time state-space model with 1 outputs, 1 inputs, 3 states.
The model uncertainty consists of the following blocks:
F: Uncertain gain/phase, gain × [0.472,1.5], phase ± 30 deg, 1 occurrences
Type "T.NominalValue" to see the nominal value, "get(T)" to see all properties, and "T.Uncertainty" to interact with the uncertain elements.
Результатом является неопределенное пространство состояний (uss) модель системы с обратной связью, содержащая неопределенный блок F. В целом коэффициент усиления без разомкнутого контура может содержать и другие неопределенные блоки.
Выборка неопределенности и построение графика переходной характеристики с обратной связью предполагают плохую робастность к таким изменениям коэффициента усиления/фазы.
clf
rng default
step(T)
Чтобы количественно оценить эту плохую робастность, используйте robstab измерить устойчивый запас устойчивости для заданной неопределенности.
SM = robstab(T)
SM = struct with fields:
LowerBound: 0.8303
UpperBound: 0.8319
CriticalFrequency: 1.4482
Устойчивый запас устойчивости составляет всего 0,83, что означает, что цикл обратной связи может выдерживать только 83% от заданной неопределенности. Коэффициент 0.83 находится в нормированных модулях. Чтобы преобразовать это значение в фактическую безопасную область значений изменений усиления и фазы, используйте uscale. Эта команда берёт смоделированный диск неопределенности и масштабный коэффициент и преобразует его в новый диск неопределенности.
Fsafe = uscale(F,0.83)
Fsafe = Uncertain gain/phase "F" with relative gain change in [0.564,1.42] and phase change of ±24.8 degrees.
Это отображение показывает, что 83% неопределенности, указанной в F (и, следовательно, в L) составляет изменение усиления между 56% и 142% от номинального значения и изменение фазы ± 25 °. Постройте график дискового Fsafe чтобы увидеть полную область значений одновременных изменений коэффициента усиления и фазы, которые может терпеть система с обратной связью.
plot(Fsafe)

В модель L, неопределенность усиления и фазы является единственным источником неопределенности. Поэтому можно получить тот же результат путем непосредственного вычисления дисковых полей с diskmargin. Обязательно учитывайте «перекос» модели неопределенности F, что смещает неопределенность в сторону увеличения или уменьшения усиления.
sigma = F.Skew; DM = diskmargin(L,sigma)
DM = struct with fields:
GainMargin: [0.5626 1.4178]
PhaseMargin: [-24.8091 24.8091]
DiskMargin: 0.4274
LowerBound: 0.4274
UpperBound: 0.4274
Frequency: 1.4505
WorstPerturbation: [1x1 ss]
Это возвращает дисковое усиление и запасы по фазе для цикла обратной связи L. Эти значения совпадают с областями значений, отображаемыми для масштабированной неопределенности Fsafe.
В расчетах выше вы использовали getDGM чтобы отобразить ± коэффициент усиления 50% и ± неопределенность фазы 30 ° в диск неопределенности F. Вы использовали 'tight' опция, которая выбирает наименьший диск, который захватывает как заданную неопределенность усиления, так и фазу. Изучение области значений усиления и изменений, охватываемых F, снова показывает, что область значений усиления смещена к уменьшению усиления.
plot(F)

Также можно использовать 'balanced' опция getDGM использовать модель с равными величинами (относительного) увеличения и уменьшения усиления. Сбалансированная область значений соответствует нулевому перекосу (sigma = 0) в diskmargin.
DGM = getDGM(1.5,30,'balanced'); Fbal = umargin('Fbal',DGM); plot(Fbal)

На этот раз область значений усиления, показанный на левом графике, симметрична.
Затем сравните диск значений для двух моделей неопределенности F и Fbal. Диск неопределенности больше для 'balanced' опция.
clf DGM = F.GainChange; DGMbal = Fbal.GainChange; diskmarginplot([DGM;DGMbal],'disk') legend('F','Fbal') title('Two models for 50% gain and 30 degree phase variations')

Теперь вычислите устойчивый запас устойчивости для системы с Fbal и сравните безопасные области значений изменений усиления и фазы для этих двух моделей.
SM2 = robstab(feedback(L*Fbal,1)); Fbalsafe = uscale(Fbal,SM2.LowerBound); DGMsafe = Fsafe.GainChange; DGMbalsafe = Fbalsafe.GainChange; diskmarginplot([DGMsafe;DGMbalsafe]) legend('F','Fbal') title('Safe ranges of gain and phase variations')

The 'tight' подгонка F приводит к большей безопасной области и приближается к исходной цели робастности (запас усиления 3,5 дБ и запас по фазе 30 степеней).
diskmarginplot | getDGM | plot (umargin) | umargin