Этот пример расширяет область стабильности MIMO для Spinning Satellite, создавая надежный контроллер, который преодолевает недостатки «наивной» конструкции.
Модель растения аналогична описанной в MIMO Stability Margins for Spinning Satellite.
a = 10; A = [0 a;-a 0]; B = eye(2); C = [1 a;-a 1]; D = 0; Gnom = ss(A,B,C,D);
Начните с базовой конструкции со смешанной чувствительностью с помощью mixsyn. Выберите весовые коэффициенты для достижения хорошей производительности и ограничения пропускной способности и усилий по управлению. (Подробные сведения об этом методе и выборе функций взвешивания см. в разделе Формирование цикла смешанной чувствительности.)
wS = makeweight(1e3,1,1e-1); wKS = makeweight(0.5,[500 1e2],1e4,0,2); wT = makeweight(0.5,20,100); bodemag(wS,wKS,wT), grid legend('wS','wKS','wT')

Вычислите оптимальный контроллер MIMO K1 с mixsyn.
[K1,~,gam] = mixsyn(Gnom,wS,wKS,wT); gam
gam = 0.7166
Оптимальная производительность составляет около 0,7, что указывает на то, что mixsyn легко уложился в границы на T. Замкните цикл обратной связи и постройте график ответа на шаг.
T = feedback(Gnom*K1,eye(2)); step(T,2), grid

Номинальные ответы быстрые с небольшим перепадом.
Чтобы оценить надежность этого контроллера, проверьте маржу диска на входах и выходах установки.
diskmarginplot(K1*Gnom,'b',Gnom*K1,'r--') grid legend('At plant inputs','At plant outputs')

Оба хорошо с около 10 дБ запаса усиления и 50 градусов запаса фазы. Также проверьте границы диска, когда коэффициент усиления и фаза могут изменяться как на входах, так и на выходах установки.
MMIO = diskmargin(Gnom,K1)
MMIO = struct with fields:
GainMargin: [0.9915 1.0085]
PhaseMargin: [-0.4863 0.4863]
DiskMargin: 0.0085
LowerBound: 0.0085
UpperBound: 0.0085
Frequency: 9.9988
WorstPerturbation: [1x1 struct]
Поля ввода-вывода чрезвычайно малы. В этой первой конструкции также отсутствует надежность. Вы можете подтвердить плохую надежность, вводя наименьшие дестабилизирующие возмущения, возвращаемые diskmargin на входах и выходах установки. (см. diskmargin для получения дополнительной информации о WorstPerturbation поле его выходных структур.)
WP = MMIO.WorstPerturbation; bode(WP.Input,WP.Output) title('Smallest destabilizing perturbation') legend('Input perturbation','Output perturbation')

Tpert = feedback(WP.Output*Gnom*WP.Input*K1,eye(2)); step(Tpert,5) grid

Ступенчатая реакция продолжает колебаться после начального переходного процесса, указывающего на предельную нестабильность. Убедитесь, что нарушенная система замкнутого контура Tpert имеет полюс на воображаемой оси с критической частотой MMIO.Frequency.
[wn,zeta] = damp(Tpert); [~,idx] = min(zeta); [zeta(idx) wn(idx) MMIO.Frequency]
ans = 1×3
0.0000 9.9988 9.9988
Создание неопределенной модели завода с параметром a (частота вращения) изменяется в диапазоне [7 13].
a = ureal('a',10,'range',[7 13]); A = [0 a;-a 0]; B = eye(2); C = [1 a;-a 1]; D = 0; Gunc = ss(A,B,C,D);
Вы можете использовать musyn разработать надежный контроллер для этой неопределенной установки. Для повышения надежности используйте umargin элемент для моделирования усиления и фазовой неопределенности как на входе, так и на выходе, так что musyn обеспечивает надежность для моделируемого диапазона неопределенности. Предположим, что требуется по крайней мере 2 дБ запаса усиления при каждом вводе-выводе (всего 4 дБ для каждого канала). Если ваш umargin elements model, который весь диапазон вариаций, musyn может не дать хороших результатов, потому что он пытается обеспечить надежную производительность по сравнению с смоделированной неопределенностью, а также надежную стабильность. musyn скорее всего, не может поддерживать желаемую производительность для такого большого изменения коэффициента усиления. Вместо этого масштабируйте целевое значение до 1 дБ изменения коэффициента усиления в каждом вводе-выводе.
GM = 1.1; % about 1 dB u1 = umargin('u1',GM); u2 = umargin('u2',GM); y1 = umargin('y1',GM); y2 = umargin('y2',GM); InputMargins = append(u1,u2); OutputMargins = append(y1,y2); Gunc = OutputMargins*Gunc*InputMargins;
Дополнить установку весами смешанной чувствительности и использовать musyn для оптимизации надежной производительности для смоделированной неопределенности, которая включает в себя оба параметра a и изменения коэффициента усиления и фазы на входах и выходах установки.
P = augw(Gunc,wS,wKS,wT); [K2,gam] = musyn(P,2,2);
D-K ITERATION SUMMARY:
-----------------------------------------------------------------
Robust performance Fit order
-----------------------------------------------------------------
Iter K Step Peak MU D Fit D
1 175.9 2.593 2.606 24
2 1.21 1.21 1.223 54
3 1.167 1.167 1.18 50
4 1.169 1.168 1.174 66
5 1.17 1.17 1.175 62
Best achieved robust performance: 1.17
Надежная производительность близка к 1, что указывает на то, что контроллер близок к надежному достижению целей смешанной чувствительности. Проверьте запас дисков на заводских вводах-выводах.
MMIO = diskmargin(Gnom,K2)
MMIO = struct with fields:
GainMargin: [0.6409 1.5602]
PhaseMargin: [-24.6856 24.6856]
DiskMargin: 0.4376
LowerBound: 0.4376
UpperBound: 0.4456
Frequency: 2.6184
WorstPerturbation: [1x1 struct]
Маржа сейчас составляет около 1,6 дБ и 25 градусов, гораздо лучше, чем раньше. Сравните пошаговые ответы с каждым контроллером для 25 выборок неопределенности.
T1 = feedback(Gunc*K1,eye(2)); T2 = feedback(Gunc*K2,eye(2)); rng(0) % for reproducibility T1s = usample(T1,25); rng(0) T2s = usample(T2,25); opt = timeoptions; opt.YLim = {[-1 1.5]}; stepplot(T1s,T2s,4,opt) grid legend('Nominal design','Robust design','location','southeast')

Вторая конструкция является явным улучшением. Далее сравните функции чувствительности и дополнительной чувствительности.
sigma(eye(2)-T1s,eye(2)-T2s), grid axis([1e-2 1e4 -80 20]) title('Sensitivity') legend('Nominal design','Robust design','location','southeast')

sigma(T1s,T2s), grid axis([1e-2 1e4 -80 20]) title('Complementary Sensitivity') legend('Nominal design','Robust design','location','southeast')

В этом примере показано, как использовать umargin неопределенный элемент для улучшения запаса устойчивости как часть надежного синтеза контроллера.
diskmargin | musyn | umargin