Этот пример показывает, как смоделировать неопределенность усиления и фазы в циклах обратной связи с помощью 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