Этот пример показов, как бороться с несколькими экспериментами и объединением моделей при работе с 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)
The 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
Первый набор данных:
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]);
Сравните bode-ответ для моделей m0 и мл:
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.
Также можно объединить модели после оценки. Этот метод может использоваться, чтобы «усреднить» независимо оцененные модели. Если характеристики шума на нескольких наборах данных различны, слияние моделей после оценки работает лучше, чем слияние самих наборов данных перед оценкой.