Этот пример показывает, как бороться с данными с несколькими входными и выходными каналами (данные MIMO). Подсвечиваются общие операции, такие как просмотр данных MIMO, оценка и сравнение моделей и просмотр соответствующих ответов модели.
Начнем с просмотра набора данных SteamEng.
load SteamEng
Этот набор данных собирается с паровой машины лабораторной шкалы. Он имеет входы Давление пара (фактически сжатого воздуха) после регулирующего клапана и Напряжение Намагниченности на генератор, соединенный с осью выхода.
Выходные выходы: Сгенерированное напряжение в генераторе и Вращательная скорость генератора (Частота сгенерированного переменного напряжения). Время дискретизации составило 50 мс.
Сначала соберите измеренные каналы в iddata
объект:
steam = iddata([GenVolt,Speed],[Pressure,MagVolt],0.05); steam.InputName = {'Pressure';'MagVolt'}; steam.OutputName = {'GenVolt';'Speed'};
Давайте посмотрим на данные
plot(steam(:,1,1))
plot(steam(:,1,2))
plot(steam(:,2,1))
plot(steam(:,2,2))
Первым шагом, чтобы почувствовать динамику, является просмотр переходных характеристик между различными каналами, оцененными непосредственно из данных:
mi = impulseest(steam,50); clf, step(mi)
Чтобы посмотреть на значимость откликов, вместо этого может использоваться импульсный график с доверительными областями, соответствующими 3 стандартным отклонениям:
showConfidence(impulseplot(mi),3)
Очевидно, что доминируют off-диагональные влияния (Сравните y-шкалы!) То есть GenVolt
в основном зависит от MagVolt
(не большой динамики) и Speed
в первую очередь зависит от Pressure
. Видимо ответ от MagVolt
на Speed
не очень значимо.
Быстрый первый тест также состоит в том, чтобы искать модель ошибки предсказания непрерывного времени по умолчанию. Используйте только первую половину данных для оценки:
mp = ssest(steam(1:250))
mp = Continuous-time identified state-space model: dx/dt = A x(t) + B u(t) + K e(t) y(t) = C x(t) + D u(t) + e(t) A = x1 x2 x3 x4 x1 -29.43 -4.561 0.5994 -5.199 x2 0.4848 -0.8662 -4.101 -2.336 x3 2.839 5.084 -8.566 -3.855 x4 -12.13 0.9224 1.818 -34.29 B = Pressure MagVolt x1 0.1033 -1.617 x2 -0.3028 -0.09415 x3 -1.566 0.2953 x4 -0.04476 -2.681 C = x1 x2 x3 x4 GenVolt -16.39 0.3767 -0.7566 2.808 Speed -5.623 2.246 -0.5356 3.423 D = Pressure MagVolt GenVolt 0 0 Speed 0 0 K = GenVolt Speed x1 -0.3555 0.08531 x2 -0.02308 5.195 x3 1.526 2.132 x4 1.787 0.03216 Parameterization: FREE form (all coefficients in A, B, C free). Feedthrough: none Disturbance component: estimate Number of free coefficients: 40 Use "idssdata", "getpvec", "getcov" for parameters and their uncertainties. Status: Estimated using SSEST on time domain data. Fit to estimation data: [86.9;74.84]% (prediction focus) FPE: 3.896e-05, MSE: 0.01414
Сравните с переходными характеристиками, оцененными непосредственно из данных:
h = stepplot(mi,'b',mp,'r',2); % Blue for direct estimate, red for mp showConfidence(h)
Соглашение является хорошим с изменением, допустимым в показанных доверию границах.
Чтобы проверить качество модели пространства состояний, симулируйте ее со стороны данных, которые не использовались для оценки, и сравните выходы:
compare(steam(251:450),mp)
Модель очень хороша в воспроизведении Сгенерированного Напряжения для данных валидации, и делает разумную работу также для скорости. (Используйте раскрывающееся меню, чтобы увидеть подходы для различных выходов.)
Точно так же сравнения частотной характеристики mp
с помощью оценки спектрального анализа дает:
msp = spa(steam);
bode(msp,mp)
clf, bode(msp,'b',mp,'r')
Можно щелкнуть правой кнопкой мыши по графику и выбрать различные пары ввода-вывода для внешнего вида при закрытии графика. Вы также можете выбрать 'Характеристики: Доверие Область' для изображения надежности диаграммы Боде.
Как и прежде ответ от MagVolt
на Speed
является незначительным и трудным для оценки.
Этот набор данных быстро дал хорошие модели. В противном случае часто приходится пробовать подмодели для определенных каналов, чтобы увидеть значительные влияния Объекты тулбокса дают полную поддержку необходимой бухгалтерии в такой работе. Имена входа и выхода являются центральными для этого.
Эти переходные характеристики указывают, что MagVolt
в первую очередь влияет на GenVolt
в то время как Pressure
в основном влияет на Speed
. Создайте для этого две простые модели SISO: И имена, и номера могут использоваться при выборе каналов.
m1 = tfest(steam(1:250,'Speed','Pressure'),2,1); % TF model with 2 poles 1 zero m2 = tfest(steam(1:250,1,2),1,0) % Simple TF model with 1 pole.
m2 = From input "MagVolt" to output "GenVolt": 18.57 --------- s + 43.53 Continuous-time identified transfer function. Parameterization: Number of poles: 1 Number of zeros: 0 Number of free coefficients: 2 Use "tfdata", "getpvec", "getcov" for parameters and their uncertainties. Status: Estimated using TFEST on time domain data. Fit to estimation data: 73.34% FPE: 0.04645, MSE: 0.04535
Сравните эти модели с моделью MIMO mp:
compare(steam(251:450),m1,m2,mp)
Модели SISO хорошо сравниваются с полной моделью. Давайте теперь сравним годографы Найквиста. m1
синяя, m2
зеленый и mp
красный. Обратите внимание, что сортировка выполняется автоматически. mp
описывает все входные выходные пары, в то время как m1
содержит только Pressure
на Speed
и m2
содержит только MagVolt
на GenVolt
.
clf showConfidence(nyquistplot(m1,'b',m2,'g',mp,'r'),3)
Модели SISO делают хорошую работу, чтобы воспроизвести свои соответствующие выходы.
Правило большого пальца состоит в том, что подбор кривой модели становится более жестким, когда вы добавляете больше выходов (больше, чтобы объяснить!) и более простым, когда вы добавляете больше входов.
Сделать хорошую работу на выход GenVolt
можно использовать оба входов.
m3 = armax(steam(1:250,'GenVolt',:),'na',4,'nb',[4 4],'nc',2,'nk',[1 1]); m4 = tfest(steam(1:250,'GenVolt',:),2,1); compare(steam(251:450),mp,m3,m4,m2)
При включении входа было возможно улучшение примерно на 10% Pressure
в моделях m3
(дискретное время) и m4
(непрерывное время), по сравнению с m2
который использует просто MagVolt
как вход.
При необходимости две модели SISO m1
и m2
могут быть собраны как одна модель «Off-Diagonal» путем создания нуля манекена:
mdum = idss(zeros(2,2),zeros(2,2),zeros(2,2),zeros(2,2)); mdum.InputName = steam.InputName; mdum.OutputName = steam.OutputName; mdum.ts = 0; % Continuous time model m12 = [idss(m1),mdum('Speed','MagVolt')]; % Adding Inputs. % From both inputs to Speed m22 = [mdum('GenVolt','Pressure'),idss(m2)]; % Adding Inputs. % From both inputs to GenVolt mm = [m12;m22]; % Adding the outputs to a 2-by-2 model. compare(steam(251:450),mp,mm)
Очевидно, что модель «Off-Diagonal» mm
выполняет как m1
и m2
в пояснении выходов.