複数実験データおよび結合モデルの処理
この例では、System Identification Toolbox™ を使用してモデルを推定および改良するときに、複数の実験を処理してモデルをマージする方法を説明します。
はじめに
System Identification Toolbox の解析および推定機能を使用すると、複数バッチのデータを処理できます。基本的に、複数の実験を行い、複数の入出力データセットを記録した場合、それらを 1 つの iddata オブジェクトにグループ化し、推定ルーチンで使用できます。
場合によっては、(1 つの) 測定データセットを "分割" し、データの質が良くない部分を除去できます。たとえば、外乱やセンサー障害のため、一部のデータが使用不能になる場合があります。このような場合、良好なデータ部分を分離し、1 つの複数実験 iddata オブジェクトにまとめることができます。
たとえば、データセット iddemo8data.mat を見てみましょう。
load iddemo8dataデータ オブジェクト dat を表示します。
dat
dat =
Time domain data set with 1000 samples.
Sample time: 1 seconds
Outputs Unit (if specified)
y1
Inputs Unit (if specified)
u1
Data Properties
plot(dat)

サンプル 250 ~ 280 とサンプル 600 ~ 650 の周辺に問題があることがわかります。これらの問題は、センサー障害と考えられます。
このため、データを 3 つの個別の実験に分割し、それを複数実験データ オブジェクトにします。
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
Data Properties
実験ごとに異なる名前を付けることができます。
d.ExperimentName = {'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
Data Properties
複数実験データ オブジェクトを調べるには、plot コマンド (plot(d)) を使用します。
複数実験データを使用した推定の実行
前述のように、すべてのモデル推定ルーチンは、複数実験データを受け入れ、別々の期間に記録されたものとして評価します。最初の 2 つの実験を推定に、3 番目の実験を検証に使用します。
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 コマンドでも複数の実験を受け入れます。右クリック メニューを使用して、使用する実験を一度に 1 つずつ選択します。
compare(d,m1,m2,m3)

さらに、spa、etfe、resid、predict、および sim は、複数実験データについても 1 つの実験データの場合と同じように処理します。
行列と timetable を使用した複数実験データの表現
iddata オブジェクトを使用する代わりに、数値行列および timetable の cell 配列を使用して、複数実験データを同等に表すことができます。
tt1 = timetable(seconds(d1.SamplingInstants),d1.u,d1.y);
tt2 = timetable(seconds(d2.SamplingInstants),d2.u,d2.y);
m1_mat = arx({d1.u,d2.u},{d1.y,d2.y},[2 2 1]);
m1_tt = arx({tt1,tt2},[2 2 1]);
compare(dv,m1,m1_mat,m1_tt)
推定後のモデルの結合
個別のデータ セットを処理する別の方法があります。各セットのモデルを計算し、モデルをマージできます。
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この方法は、マージされたセット de から m を算出するのと概念的には同じですが、数値的には同じではありません。de での処理では、異なる実験で信号対ノイズ比が (ほぼ) 同じであると想定されますが、個別のモデルを結合した場合、ノイズ レベルは独立した推定を取ります。異なる実験で条件がほぼ同じであれば、複数実験データで直接推定を行いやすくなります。
モデル m3 および m6 を確認できます。これらはいずれも、同じデータについて 2 つの異なる方法で取得した 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 で生成された 2 つのデータ セットを使用します。
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.
Model Properties
異なる入力、ノイズ、および初期条件で m0 から取得されたデータ セット z1 および z2 を収集します。これらのデータセットは、先に読み込んだ iddemo8data.mat から取得します。
最初のデータ セットをプロットします。
plot(z1)

2 番目のデータセットをプロットします。
plot(z2)

取得したデータを連結してプロットします。
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
Data Properties
plot(zzl)

ssest を使用して離散時間状態空間モデルを取得できます。
ml = ssest(zzl,3,'Ts',1,'Feedthrough', [true, false]);
モデル m0 および ml のボード応答を比較します。
clf
bode(m0,ml)
legend('show')
上記の 4 つのボード線図を見ると、これはあまり良好なモデルではありません。
次に、2 つのデータ セットを別々の実験として処理します。
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
Data Properties
% 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'));
真のシステム (青)、連結されたデータからのモデル (緑)、マージされたデータ セットからのモデル (赤) のボード線図を比較します。
clf bode(m0,'b',ml,'g',mm,'r') legend('show')

上記のプロットを見るとわかるように、マージされたデータ セットの方が優れたモデルが得られています。
複数実験データを使用した線形モデルの同定
複数実験データを使用して線形モデルを同定する場合は、実験ごとに初期条件を個別に推定します。この情報はレポートで確認できます。
mm.Report.Parameters.X0
ans = 3×2
1.4243 -1.4165
-0.0138 0.0607
-0.8412 0.8619
まとめ
この例では、複数のデータ セットを 1 つのモデルの推定にまとめて使用する方法を解析しました。この手法は、独立した実験から複数のデータセットがある場合や、データを複数セットにセグメント化し、不良セグメントを除去した場合に便利です。複数の実験を単一の iddata オブジェクト、数値行列の cell 配列、または timetable の cell 配列にパッケージ化できます。これはすべての推定および解析要件で使用できます。この手法は、時間領域と周波数領域の両方のデータに使用できます。
推定後にモデルをマージすることも可能です。この手法を使用して、個別に推定されたモデルを "平均化" できます。複数データセットのノイズ特性が異なる場合、推定の後にモデルを結合すると、推定の前にデータセットそのものを結合するよりも良好な結果が得られます。