Этот пример показывает, как бороться с данными с несколькими входными и выходными каналами (данные 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 в пояснении выходов.