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

Очевидно, что доминируют внедиагональные воздействия (сравните шкалы 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)

Соглашение хорошо с вариацией, допустимой в пределах показанных доверительных границ.
Для проверки качества модели state-space смоделировать ее со стороны данных, которые не использовались для оценки, и сравнить выходные данные:
compare(steam(251:450),mp)

Модель очень хорошо воспроизводит генерируемое напряжение для данных проверки и выполняет разумную работу также для скорости. (Используйте раскрывающееся меню, чтобы увидеть посадки для различных выходов.)
Аналогично, сравнения частотной характеристики mp с оценкой спектрального анализа дает:
msp = spa(steam);
bode(msp,mp)
clf, bode(msp,'b',mp,'r')

Можно щелкнуть правой кнопкой мыши на графике и выбрать различные пары ввода-вывода для близкого просмотра. Можно также выбрать «Characteristics: Confidence Region» (Характеристики: Доверительный регион) для получения картины надежности сюжета.
Как и до ответа от 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)

Ясно, что модель «вне диагонали» mm выполняет как m1 и m2 в объяснении выходных данных.