В этом примере показано, как иметь дело с данными с несколькими каналами ввода и вывода (данные MIMO). Подсвечены общие операции, такие как просмотр данных MIMO, оценка и сравнение моделей и просмотр соответствующих ответов модели.
Мы запускаем путем рассмотрения набора данных SteamEng.
load SteamEng
Этот набор данных собран из парового двигателя лабораторных весов. Это имеет входное Давление пара (на самом деле сжатый воздух) после распределительного клапана и напряжения Намагничивания по генератору, соединенному с выходной осью.
Выходные параметры являются Сгенерированным напряжением в генераторе, и Скорость вращения генератора (Частота сгенерированного напряжения переменного тока).The шаг расчета составляла 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)
Соглашение хорошо с изменением, допустимым в показанных доверительных границах.
Чтобы протестировать качество модели в пространстве состояний, симулируйте его со стороны данных, которые не использовались для оценки, и сравните выходные параметры:
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:
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
в объяснении выходных параметров.