В этом примере показано, как иметь дело с несколькими экспериментами и моделями слияния при работе с System Identification Toolbox™ для оценки и совершенствования моделей.
Функции анализа и оценки в System Identification Toolbox позволяют вам работать с несколькими пакетами данных. По существу, если вы выполнили несколько экспериментов и записали несколько наборов данных ввода - вывода, можно сгруппировать их в один объект IDDATA и использовать их с любой стандартной программой оценки.
В некоторых случаях можно хотеть "разделить" (один) набор данных измерения, чтобы удалить фрагменты, где качество данных не хорошо. Например, фрагмент данных может быть неприменимым из-за внешнего возмущения или отказа датчика. В тех случаях каждый хороший фрагмент данных может быть выделен и затем объединен в один объект IDDATA мультиэксперимента.
Например, давайте посмотрим на набор данных iddemo8.mat:
load iddemo8
Именем объекта данных является dat
, и давайте просмотрим его.
dat
dat = Time domain data set with 1000 samples. Sample time: 1 seconds Outputs Unit (if specified) y1 Inputs Unit (if specified) u1
plot(dat)
Мы видим, что существуют некоторые проблемы с выходом вокруг демонстрационных 250-280 и вокруг выборок 600 - 650. Они могут быть отказами датчика.
Поэтому разделите данные в три отдельных эксперимента и поместите затем в объект данных мультиэксперимента:
d1 = dat(1:250);
d2 = dat(281:600);
d3 = dat(651:1000);
d = merge(d1,d2,d3) % merge lets you create multi-exp IDDATA object
d = Time domain data set containing 3 experiments. Experiment Samples Sample Time Exp1 250 1 Exp2 320 1 Exp3 350 1 Outputs Unit (if specified) y1 Inputs Unit (if specified) u1
Различным экспериментам можно дать другие имена, например:
d.exp = {'Period 1';'Day 2';'Phase 3'}
d = Time domain data set containing 3 experiments. Experiment Samples Sample Time Period 1 250 1 Day 2 320 1 Phase 3 350 1 Outputs Unit (if specified) y1 Inputs Unit (if specified) u1
Чтобы исследовать его, используйте график, как в plot(d)
.
Как упомянуто прежде, все стандартные программы оценки модели принимают данные мультиэксперимента и учитывают, что они зарегистрированы в различные периоды. Давайте использовать два первых эксперимента для оценки и третий для валидации:
de = getexp(d,[1,2]); % subselection is done using the command GETEXP dv = getexp(d,'Phase 3'); % using numbers or names. m1 = arx(de,[2 2 1]); m2 = n4sid(de,2); m3 = armax(de,[2 2 2 1]); compare(dv,m1,m2,m3)
compare
команда также принимает несколько экспериментов. Используйте меню правой кнопки, чтобы выбрать эксперимент, чтобы использовать по одному.
compare(d,m1,m2,m3)
Кроме того, spa
, etfe
, resid
, predict
\sim
действуйте таким же образом для данных мультиэксперимента, как они делают для одних данных об эксперименте.
Существует другой способ иметь дело с отдельными наборами данных: модель может быть вычислена для каждого набора, и затем модели могут быть объединены:
m4 = armax(getexp(de,1),[2 2 2 1]);
m5 = armax(getexp(de,2),[2 2 2 1]);
m6 = merge(m4,m5); % m4 and m5 are merged into m6
Это - концептуально то же самое как вычисление m
от объединенного набора de
, но это не численно то же самое. Работа над de
принимает, что отношения сигнал-шум (о) том же самом в различных экспериментах, в то время как слияние отдельных моделей делает независимые оценки уровня шума. Если условия о том же самом для различных экспериментов, более эффективно оценить непосредственно на данных мультиэксперимента.
Мы можем проверять модели m3
и m6
это - оба модели ARMAX, полученные на тех же данных двумя различными способами:
[m3.a;m6.a]
ans = 2×3
1.0000 -1.5034 0.7008
1.0000 -1.5022 0.7000
[m3.b;m6.b]
ans = 2×3
0 1.0023 0.5029
0 1.0035 0.5028
[m3.c;m6.c]
ans = 2×3
1.0000 -0.9744 0.1578
1.0000 -0.9751 0.1584
compare(dv,m3,m6)
Мы теперь обращаемся к другой ситуации. Давайте считать два набора данных сгенерированными системой m0. Системой дают:
m0
m0 = Discrete-time identified state-space model: x(t+Ts) = A x(t) + B u(t) + K e(t) y(t) = C x(t) + D u(t) + e(t) A = x1 x2 x3 x1 0.5296 -0.476 0.1238 x2 -0.476 -0.09743 0.1354 x3 0.1238 0.1354 -0.8233 B = u1 u2 x1 -1.146 -0.03763 x2 1.191 0.3273 x3 0 0 C = x1 x2 x3 y1 -0.1867 -0.5883 -0.1364 y2 0.7258 0 0.1139 D = u1 u2 y1 1.067 0 y2 0 0 K = y1 y2 x1 0 0 x2 0 0 x3 0 0 Sample time: 1 seconds Parameterization: STRUCTURED form (some fixed coefficients in A, B, C). Feedthrough: on some input channels Disturbance component: none Number of free coefficients: 23 Use "idssdata", "getpvec", "getcov" for parameters and their uncertainties. Status: Created by direct construction or transformation. Not estimated.
Наборами данных, которые были собраны, является z1
и z2
, полученный из m0 с различными входными параметрами, шумовыми и начальными условиями. Эти наборы данных получены из iddemo8.mat, который загрузился ранее.
pause off
First Data устанавливают:
plot(z1) %generates a separate plot for each I/O pair if pause is on; showing only the last one here
Второй набор:
plot(z2) %generates a separate plot for each I/O pair if pause is on; showing only the last one here
Если мы только конкатенируем данные, мы получили:
zzl = [z1;z2]
zzl = Time domain data set with 400 samples. Sample time: 1 seconds Outputs Unit (if specified) y1 y2 Inputs Unit (if specified) u1 u2
plot(zzl)
pause on
Модель в пространстве состояний дискретного времени может быть получена при помощи ssest
:
ml = ssest(zzl,3,'Ts',1, 'Feedthrough', [true, false]);
Сравните предвещать ответ для моделей m0 и ml:
clf
bode(m0,ml)
legend('show')
Это не очень хорошая модель, как наблюдается из этих четырех Диаграмм Боде выше.
Теперь вместо этого обработайте эти два набора данных как различные эксперименты:
zzm = merge(z1,z2)
zzm = Time domain data set containing 2 experiments. Experiment Samples Sample Time Exp1 200 1 Exp2 200 1 Outputs Unit (if specified) y1 y2 Inputs Unit (if specified) u1 u2
% The model for this data can be estimated as before (watching progress this time) mm = ssest(zzm,3,'Ts',1,'Feedthrough',[true, false], ssestOptions('Display', 'on'));
Let us compare the Bode plots of the true system (blue)
the model from concatenated data (green) and the model from the
merged data set (red):
clf bode(m0,'b',ml,'g',mm,'r') legend('show')
Объединенные данные дают лучшую модель, как наблюдается из графика выше.
В этом примере мы анализировали, как использовать несколько наборов данных вместе для оценки одной модели. Этот метод полезен, когда у вас есть несколько наборов данных от независимых запусков эксперимента или когда вы сегментируете данные на несколько наборов, чтобы удалить плохие сегменты. Несколько экспериментов могут быть упакованы в один объект IDDATA, который затем применим для всех требований оценки и анализа. Этот метод работает и в течение времени и в течение частотного диапазона iddata.
Также возможно объединить модели после оценки. Этот метод может использоваться, чтобы "составить в среднем" независимо оцененные модели. Если шумовые характеристики на нескольких наборах данных отличаются, объединяя модели после того, как оценка будет работать лучше, чем слияние самих наборов данных перед оценкой.