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