В этом примере показано, как интерпретировать и проверять результаты настройки из systune.
Параметры системы управления можно настроить с помощью systune или looptune. Проектные спецификации фиксируются с помощью TuningGoal объекты требований. В этом примере показано, как интерпретировать результаты из systuneвыполните графическую проверку проектных требований и выполните дополнительный анализ с разомкнутым и замкнутым контуром.
В качестве иллюстрации мы используем приложение для настройки автопилота. Подробнее см. пример «Настройка двухконтурного автопилота». Настроенный компенсатор представляет собой блок «MIMO Controller», выделенный оранжевым цветом в модели ниже.
open_system('rct_airframe2')

Шаги настройки и настройки повторяются ниже для полноты описания.
ST0 = slTuner('rct_airframe2','MIMO Controller'); % Compensator parameterization C0 = tunableSS('C',2,1,2); C0.D.Value(1) = 0; C0.D.Free(1) = false; setBlockParam(ST0,'MIMO Controller',C0) % Requirements Req1 = TuningGoal.Tracking('az ref','az',1); % tracking Req2 = TuningGoal.Gain('delta fin','delta fin',tf(25,[1 0])); % roll-off Req3 = TuningGoal.Margins('delta fin',7,45); % margins MaxGain = frd([2 200 200],[0.02 2 200]); Req4 = TuningGoal.Gain('delta fin','az',MaxGain); % disturbance rejection % Tuning Opt = systuneOptions('RandomStart',3); rng('default') [ST1,fSoft] = systune(ST0,[Req1,Req2,Req3,Req4],Opt);
Final: Soft = 1.51, Hard = -Inf, Iterations = 52 Final: Soft = 1.15, Hard = -Inf, Iterations = 96 Final: Soft = 1.15, Hard = -Inf, Iterations = 67 Final: Soft = 1.15, Hard = -Inf, Iterations = 104
systune выполнить три оптимизации из трех различных начальных точек и вернуть лучший общий результат. Первый выход ST является slTuner интерфейс, представляющий собой настроенную систему управления. Второй выход fSoft содержит окончательные значения четырех требований для наилучшего дизайна.
fSoft
fSoft =
1.1476 1.1476 0.5461 1.1476
Требования нормализуются, поэтому требование удовлетворяется тогда и только тогда, когда его значение меньше 1. Осмотр fSoft показывает, что Требования 1,2,4 являются активными и слегка нарушены, в то время как Требование 3 (пределы устойчивости) удовлетворено.
Использовать viewGoal для графического осмотра каждого требования. Это полезно для того, чтобы понять, допустимы ли мелкие нарушения или что вызывает крупные нарушения. Сначала проверьте требование к отслеживанию.
viewGoal(Req1,ST1)

Мы наблюдаем небольшое нарушение по частоте, предполагая, что отслеживание уставок будет выполняться близко к ожиданиям. Аналогичным образом проверьте требование об отклонении нарушения.
viewGoal(Req4,ST1) legend('location','NorthWest')

Большая часть нарушения происходит на низкой частоте с небольшим ударом около 35 рад/с, предполагая возможные демпфированные колебания на этой частоте. Наконец, проверьте требования к запасам устойчивости.
viewGoal(Req3,ST1)

Это требование выполняется на всех частотах, при этом наименьшие поля достигаются вблизи частоты перехода, как и ожидалось.
Также можно использовать evalGoal чтобы оценить каждое требование, то есть вычислить его вклад в мягкие и жесткие ограничения. Например,
[H1,f1] = evalGoal(Req1,ST1);
возвращает значение f1 потребности и базовой частотно-взвешенной передаточной функции H1 используется для его вычисления. Вы можете проверить, что f1 соответствует первой записи fSoft и совпадает с пиковым коэффициентом усиления H1.
[f1 fSoft(1) getPeakGain(H1,1e-6)]
ans =
1.1476 1.1476 1.1476
Помимо проверки требований, можно выполнить базовый анализ по открытию и замкнутому контуру с помощью getIOTransfer и getLoopTransfer. Например, проверьте производительность отслеживания во временной области, построив график ответа az к команде шага azref для настроенной системы ST1.
T = ST1.getIOTransfer('az ref','az'); step(T)

Также постройте график реакции с разомкнутым контуром, измеренной на входе в установку delta fin. Этот график можно использовать для оценки классического усиления и полей фазы на входе в установку.
L = ST1.getLoopTransfer('delta fin',-1); % negative-feedback loop transfer margin(L) grid

До сих пор мы одинаково рассматривали все четыре требования в объективной функции. Кроме того, можно использовать сочетание мягких и жестких ограничений, чтобы различать требования must-have и nice-to-have. Например, можно рассматривать требования 3,4 как жесткие ограничения и оптимизировать первые два требования с учетом этих ограничений. Для достижения наилучших результатов, сделать это только после получения разумной конструкции со всеми требованиями одинаково.
[ST2,fSoft,gHard] = systune(ST1,[Req1 Req2],[Req3 Req4]);
Final: Soft = 1.29, Hard = 0.99973, Iterations = 165
fSoft
fSoft =
1.2897 1.2898
gHard
gHard =
0.4664 0.9997
Здесь fSoft содержит конечные значения первых двух требований (мягкие ограничения) и gHard содержит окончательные значения последних двух требований (жесткие ограничения). Жесткие ограничения удовлетворены, поскольку все записи gHard меньше 1. Как и ожидалось, наилучшая ценность первых двух требований возросла, поскольку оптимизатор стремился строго соблюдать четвертое требование.
bdclose('all')