Main Content

oe

時間領域または周波数領域のデータを使用して出力誤差の多項式モデルを推定する

説明

出力誤差 (OE) モデルは多項式モデルの特殊構成であり、アクティブな多項式は 2 つしかありません (B と F)。OE モデルは、測定された入力を出力に関連付ける一方で、加法性出力外乱としてホワイト ノイズも含める従来型の伝達関数を表します。時間領域データと周波数領域データを使用して、OE モデルを推定できます。tfest コマンドが oe と同じ機能を提供します。tfest では、多項式の次数ではなく、極と零点の数を使用してモデル次数を指定します。連続時間推定では、tfest の方が高速で正確な結果が得られるため推奨されます。

OE モデルの推定

sys = oe(tt,[nb nf nk]) は、timetable tt の変数に含まれるデータを使用して、OE モデル sys を推定します。最初の Nu 個の変数が入力として使用され、次の Ny 個の変数が出力として使用されます。Nu と Ny は指定した多項式の次数の次元から決定されます。

sys は次の方程式で表されます。

y(t)=B(q)F(q)u(tnk)+e(t)

ここで、y(t) は出力で、u(t) は入力で、e(t) は誤差です。

次数 [nb nf nk] により、推定された多項式の各成分内のパラメーターの数が決まります。

tt から特定の入力チャネルと出力チャネルを選択するには、名前と値の構文を使用して 'InputName''OutputName' を対応する timetable 変数名に設定します。

sys = oe(u,y,[nb nf nk]) は、コンマ区切りの行列 u,y 内の時間領域入力信号と出力信号を使用します。データのサンプル時間は 1 秒と仮定されます。サンプル時間を変更するには、名前と値の構文を使用して Ts を設定します。

sys = oe(data,[nb nf nk]) は、データ オブジェクト data 内の時間領域データまたは周波数領域データを使用します。

sys = oe(___,Name,Value) は、1 つ以上の名前と値のペアの引数で指定された追加のオプションを使用して、モデル構造の属性を指定します。この構文では、前述の任意の入力引数の組み合わせで使用できます。

初期パラメーターの構成

sys = oe(tt,init_sys) は、線形システム init_sys を使用して、timetable tt を使用した推定用に sys の初期パラメーター化を構成します。

sys = oe(u,y,init_sys) は、推定に行列データ u,y を使用します。

sys = oe(data,init_sys) は、推定にデータ オブジェクト data を使用します。

追加の推定オプションの指定

sys = oe(___,opt) は、オプション セット opt を使用して推定の動作を指定し、多項式モデルを推定します。

推定される初期条件を返す

[sys,ic] = oe(___) は、推定される初期状態を initialCondition オブジェクトとして返します。この構文は、モデルの応答を同じ推定入力データを使用してシミュレートまたは予測し、その応答を同じ推定出力データと比較する場合に使用します。初期条件を組み込むことで、シミュレーションの最初の部分における一致が高まります。

すべて折りたたむ

入力遅延を指定する 2 つの手法を使用して、時間領域データから OE 多項式を推定します。

推定データを読み込みます。

load sdata1 tt1

B および F 多項式の次数 nb および nf を設定します。入力遅延 nk を 1 サンプルに設定します。モデル sys を計算します。

nb = 2;
nf = 2;
nk = 1;
sys = oe(tt1,[nb nf nk]);

シミュレートしたモデルの応答を測定出力と比較します。

compare(tt1,sys)

プロットから、シミュレートしたモデルと推定データの間の適合率が 70% を超えていることがわかります。

nk を使用する代わりに、名前と値のペアの引数 'InputDelay' を使用して 1 サンプルの遅延を指定することもできます。

nk = 0;
sys1 = oe(tt1,[nb nf nk],'InputDelay',1);
figure
compare(tt1,sys1)

結果は同じです。

推定に関する詳しい情報は、idpolysys.Report プロパティを調べて確認できます。

sys.Report
ans = 
              Status: 'Estimated using OE'
              Method: 'OE'
    InitialCondition: 'zero'
                 Fit: [1x1 struct]
          Parameters: [1x1 struct]
         OptionsUsed: [1x1 idoptions.polyest]
           RandState: [1x1 struct]
            DataUsed: [1x1 struct]
         Termination: [1x1 struct]

たとえば、終了条件に関する詳しい情報を調べます。

sys.Report.Termination
ans = struct with fields:
                 WhyStop: 'Near (local) minimum, (norm(g) < tol).'
              Iterations: 3
    FirstOrderOptimality: 0.0708
                FcnCount: 7
              UpdateNorm: 1.4809e-05
         LastImprovement: 5.1744e-06

レポートには、反復回数および推定で反復が停止した理由に関する情報が含まれています。

推定データを読み込みます。

load oe_data1 data;

The idfrd オブジェクト data には、以下のモデルの連続時間周波数応答が含まれます。

G(s)=s+3s3+2s2+s+1

モデルを推定します。

nb = 2;
nf = 3;
sys = oe(data,[nb nf]);

適合度を評価します。

compare(data,sys);

高次システムをシミュレートして収集したデータから高次 OE モデルを推定します。試行錯誤して正則化定数を決定し、モデル推定でその値を使用します。

データを読み込みます。

load regularizationExampleData.mat m0simdata

次数 30 の正則化されていない OE モデルを推定します。

m1 = oe(m0simdata,[30 30 1]);

試行錯誤により Lambda 値を決定して、正則化された OE モデルを取得します。

opt = oeOptions;
opt.Regularization.Lambda = 1;
m2 = oe(m0simdata,[30 30 1],opt);

モデルの出力を推定データと比較します。

opt = compareOptions('InitialCondition','z');
compare(m0simdata,m1,m2,opt);

正則化されたモデル m2 では、正則化されていないモデル m1 より優れた適合が得られます。

モデル応答の分散を比較します。

h = bodeplot(m1,m2);
opt = getoptions(h);
opt.PhaseMatching = 'on';
opt.ConfidenceRegionNumberSD = 3;
opt.PhaseMatching = 'on';
setoptions(h,opt);
showConfidence(h);

正則化されたモデル m2 では、正則化されていないモデル m1 と比較して分散が低減しています。

推定データ data およびサンプル時間 Ts を読み込みます。

load oe_data2.mat data Ts

iddata オブジェクト data には、以下のモデルの離散時間周波数応答が含まれます。

G(s)=1000s+500

読み込んだ推定サンプル時間 Ts を表示します。

Ts
Ts = 1.0000e-03

この値はプロパティ data.Ts に一致しています。

data.Ts
ans = 1.0000e-03

入出力周波数帯域をナイキスト周波数に制限することで、data から連続モデルを推定できます。そうするには、推定プレフィルター オプション 'WeightingFilter' を指定して、0 から 0.5*pi/Ts rad/s の通過帯域を定義します。ソフトウェアではこの通過帯域外の周波数をもつ応答値がすべて無視されます。

opt = oeOptions('WeightingFilter',[0 0.5*pi/Ts]);

Ts プロパティを 0 に設定して、data を連続時間データとして扱います。

data.Ts = 0;

連続モデルを推定します。

nb = 1;
nf = 3;
sys = oe(data,[nb nf],opt);

データを読み込みます。このデータは、行列形式の入出力データとサンプル時間で構成されます。

load sdata1i umat1i ymat1i Ts1i

OE 多項式モデル sys を推定し、ic で初期状態を返します。

nb = 2;
nf = 2;
nk = 1;
[sys,ic] = oe(umat1i,ymat1i,[nb,nf,nk],'Ts',Ts1i);
ic
ic = 
  initialCondition with properties:

     A: [2x2 double]
    X0: [2x1 double]
     C: [0.9428 0.4824]
    Ts: 0.1000

ic は、sys の自由応答を状態空間形式で X0 の初期状態ベクトルにカプセル化する initialCondition オブジェクトです。ic は、sysumat1i 入力信号でシミュレートし、その応答を ymat1i 出力信号と比較する場合に組み込むことができます。

入力引数

すべて折りたたむ

推定データ。一定間隔の時間ベクトルを使用する timetable として指定します。tt には入力チャネルと出力チャネルを表す変数が含まれます。複数実験データの場合、tt は長さが Ne の timetable の cell 配列です。Ne は実験数です。

指定された多項式の次数の次元から、推定に使用する入力チャネルと出力チャネルの数が判定されます。入力/出力チャネルの選択は、'InputName''OutputName' の名前と値の引数が指定されているかどうかによります。

  • 'InputName''OutputName' が指定されていない場合、tt の最初の Nu 個の変数が入力として使用され、tt の次の Ny 個の変数が出力として使用されます。

  • 'InputName''OutputName' が指定されている場合、指定された変数が使用されます。指定された入力名と出力名の数は、Nu および Ny と一致しなければなりません。

  • 入力がない時系列モデルを推定できる関数では、'InputName' を指定する必要はありません。

推定データ型の取り扱いの詳細については、Data Domains and Data Types in System Identification Toolboxを参照してください。

推定データ。SISO システムの場合は、等間隔でサンプリングされた入力および出力時間領域信号値を含む、Ns 行 1 列の実数値行列のコンマ区切りのペアとして指定します。ここで、Ns はサンプルの数です。

MIMO システムの場合は、u,y を、以下の次元をもつ入力行列と出力行列のペアとして指定します。

  • u — Ns 行 Nu 列の行列。Nu は入力の数です。

  • y — Ns 行 Ny 列の行列。Ny は出力の数です。

複数実験データの場合は、u,y を 1 行 Ne 列の cell 配列のペアとして指定します。Ne は実験数です。すべての実験のサンプル時間が一致していなければなりません。

出力のみを含み、入力を含まない時系列データの場合は、[],y を指定します。

制限

  • 行列ベースのデータは、周波数領域データからの推定をサポートしません。iddata オブジェクトや idfrd オブジェクトなどのデータ オブジェクト (data を参照) を使用する必要があります。

推定データ型の取り扱いの詳細については、Data Domains and Data Types in System Identification Toolboxを参照してください。

推定データ。iddata オブジェクト、frd オブジェクト、または idfrd オブジェクトとして指定します。

時間領域の推定の場合、data は入力信号と出力信号の値を含む iddata オブジェクトでなければなりません。

周波数領域の推定の場合、data は次のいずれかになります。

  • 記録された周波数応答データ (frd (Control System Toolbox) または idfrd)

  • プロパティが次のように指定された iddata オブジェクト:

    • InputData — 入力信号のフーリエ変換

    • OutputData — 出力信号のフーリエ変換

    • Domain'Frequency'

時間領域の推定データは等間隔サンプルでなければなりません。既定では、モデルのサンプル時間は推定データのサンプル時間に設定されます。

複数実験データの場合、すべての実験のサンプル時間とサンプル間動作が一致していなければなりません。

時間領域データまたは離散時間周波数領域データから離散時間モデルを計算できます。tfest を使用して連続時間モデルを計算します。

OE モデルの次数。1 行 3 列のベクトルまたは整数行列のベクトルとして指定します。

以下によって表されるシステムについて考えます。

y(t)=B(q)F(q)u(tnk)+e(t)

ここで、y(t) は出力で、u(t) は入力で、e(t) は誤差です。この場合、[nb nf nk] の要素は以下のとおりです。

  • nb — B(q) 多項式の次数 + 1。これは B(q) 多項式の長さと同じです。nb は Ny 行 Nu 列の行列です。Ny は出力の数であり、Nu は入力の数です。

  • nf — F 多項式の次数。nf は Ny 行 Nu 列の行列です。

  • nk — 入力遅延。サンプルの数として表されます。nk は Ny 行 Nu 列の行列です。遅延は B 多項式の先頭のゼロとして表示されます。

連続時間周波数領域データを使用した推定では、[nb nf] のみを指定し、nk は省略します。例については、周波数応答を使用した連続時間 OE モデルの推定を参照してください。

sys の初期パラメーター化を構成する線形システム。idpoly モデル、別の線形モデル、または構造体として指定します。init_sys は、測定データを使用した推定を実行して取得することも、直接構築することもできます。

init_sys が OE 構造の idpoly モデルの場合、oeinit_sys のパラメーター値を sys の推定の初期推定として使用します。init_sys のサンプル時間はデータのサンプル時間に一致している必要があります。

B(q) および F(q) の初期推定と制約を構成するには、init_sysStructure プロパティを使用します。以下に例を示します。

  • init_sys の F(q) 項の初期推定を指定するには、init_sys.Structure.F.Value を初期推定として設定します。

  • init_sys の B(q) 項の制約を指定するには、以下を行います。

    • init_sys.Structure.B.Minimum を最小の B(q) 係数値に設定します。

    • init_sys.Structure.B.Maximum を最大の B(q) 係数値に設定します。

    • init_sys.Structure.B.Free を設定して、推定についてどの B(q) 係数が自由であるか示します。

init_sys が OE 構造をもつ多項式モデルでない場合、最初に init_sys が OE 構造モデルに変換されます。oe は結果のモデルのパラメーターを、sys を推定する初期推定として使用します。

opt を指定せず、init_sys が推定で取得されたものである場合、init_sys.Report.OptionsUsed からの推定オプションが使用されます。

推定オプション。oeOptions オプション セットとして指定します。opt で指定するオプションには以下が含まれます。

  • 推定の目的

  • 初期条件の処理

  • 数値探索法および関連オプション

推定オプションの指定例については、帯域制限離散時間周波数領域データを使用した連続モデルの推定を参照してください。

名前と値の引数

引数のオプションのペアを Name1=Value1,...,NameN=ValueN として指定します。Name は引数名、Value は対応する値です。名前と値の引数は他の引数の後に表示されなければなりませんが、ペアの順序は重要ではありません。

R2021a より前では、名前と値をそれぞれコンマを使って区切り、Name を引用符で囲みます。

例: 'InputDelay',1

入力チャネル名。string、文字ベクトル、string 配列、または文字ベクトルの cell 配列として指定します。

データ ソースに timetable を使用している場合は、InputName の名前は timetable 変数のサブセットでなければなりません。

例: sys = oe(tt,__,'InputName',["u1" "u2"]) は、推定で使用する timetable tt からの入力チャネルとして変数 u1 および u2 を選択します。

出力チャネル名。string、文字ベクトル、string 配列、または文字ベクトルの cell 配列として指定します。

データ ソースに timetable を使用している場合は、OutputName の名前は timetable 変数のサブセットでなければなりません。

例: sys = oe(tt,__,'OutputName',["y1" "y3"]) は、推定で使用する timetable tt からの出力チャネルとして変数 y1 および y3 を選択します。

サンプル時間。'Ts' とサンプル時間 (TimeUnit で指定された単位) で構成されるコンマ区切りのペアとして指定します。行列ベースのデータ (u,y) を使用するときに、仮定された 1 秒のサンプル時間以外のサンプル時間が必要な場合は Ts を指定する必要があります。

timetable tt のデータのサンプル時間を取得するには、timetable プロパティ tt.Properties.Timestep を使用します。

例: oe(umat1,ymat1,___,'Ts',0.08) は、0.08 秒のサンプル時間でモデルを計算します。

各入力チャネルの入力遅延。'InputDelay' と数値ベクトルで構成されるコンマ区切りのペアとして指定します。

  • 連続時間モデルの場合、TimeUnit プロパティに格納された時間単位で 'InputDelay' を指定します。

  • 離散時間モデルの場合、サンプル時間 Ts の整数倍で 'InputDelay' を指定します。たとえば、'InputDelay'3 に設定すると、3 サンプリング周期の遅延が指定されます。

Nu 個の入力があるシステムの場合、InputDelay を Nu 行 1 列のベクトルに設定します。このベクトルの各エントリは、対応する入力チャネル用の入力遅延を表す数値です。

すべてのチャネルに同じ遅延を適用するには、'InputDelay' をスカラーとして指定します。

例については、OE 多項式モデルの推定を参照してください。

各入出力ペアの伝達遅延。'IODelay' と数値配列で構成されるコンマ区切りのペアとして指定します。

  • 連続時間モデルの場合、TimeUnit プロパティに格納された時間単位で 'IODelay' を指定します。

  • 離散時間モデルの場合、サンプル時間 Ts の整数倍で 'IODelay' を指定します。たとえば、'IODelay'4 に設定すると、4 サンプリング周期の伝達遅延が指定されます。

Nu 個の入力および Ny 個の出力のあるシステムの場合、'IODelay' を Ny 行 Nu 列の行列に設定します。各エントリは、対応する入出力ペアの伝達遅延を表す整数値です。

すべてのチャネルに同じ遅延を適用するには、'IODelay' をスカラーとして指定します。

たとえば、'IODelay'nk 値の代替として指定できます。そうすると、B 多項式の先頭のゼロの数が削減され、モデル構造が簡略化します。特に、代わりに 'IODelay' を使用して入出力遅延として max(nk-1,0) 個の先頭のゼロを表すことができます。

出力引数

すべて折りたたむ

推定データを適合する OE 多項式モデル。idpoly モデル オブジェクトとして返されます。このモデルは、指定したモデル次数、遅延、および推定オプションを使用して作成されます。sys のサンプル時間は推定データのサンプル時間に一致します。したがって、sys は、時間領域データから推定した場合は常に離散時間モデルです。時間領域データを使用した連続時間モデルの同定には、tfest を使用します。

モデルの Report プロパティは、推定結果および使用したオプションに関する情報を格納します。Report には以下のフィールドがあります。

Report のフィールド説明
Status

モデルのステータスの概要。モデルが構築によって作成されたものか推定によって取得されたものかを示します。

Method

使用された推定コマンド

InitialCondition

モデル推定時の初期条件の処理。次の値のいずれかとして返されます。

  • 'zero' — 初期条件をゼロに設定。

  • 'estimate' — 初期条件を独立した推定パラメーターとして処理。

  • 'backcast' — 初期条件を最適な最小二乗近似を使用して推定。

このフィールドは、推定オプション セットで InitialCondition オプションが 'auto' に設定されている場合に、初期条件がどのように扱われたかを確認するのに特に便利です。

Fit

推定の定量的評価。構造体として返されます。これらの品質メトリクスの詳細については、Loss Function and Model Quality Metricsを参照してください。構造体には、以下のフィールドがあります。

  • FitPercent — 正規化平方根平均二乗誤差 (NRMSE)。モデルの応答が推定データにどの程度適合するかをパーセンテージで示す尺度で、fitpercent = 100(1-NRMSE) として表されます。

  • LossFcn — 推定完了時の損失関数の値

  • MSE — 平均二乗誤差 (MSE)。モデルの応答が推定データにどの程度適合するかを示す尺度です。

  • FPE — モデルの最終予測誤差

  • AIC — 生の赤池情報量基準 (AIC)。モデルの品質を示す尺度です。

  • AICc — 小さいサンプルサイズの補正された AIC

  • nAIC — 正規化された AIC

  • BIC — ベイズ情報量基準 (BIC)

Parameters

モデル パラメーターの推定値

OptionsUsed

推定に使用されたオプション セット。これは、カスタム オプションを構成していない場合は既定のオプションのセットになります。詳細については、oeOptions を参照してください。

RandState

推定開始時の乱数ストリームの状態。推定時にランダム化が使用されなかった場合は空 [] になります。詳細については、rng を参照してください。

DataUsed

推定に使用されたデータの属性。次のフィールドをもつ構造体として返されます。

  • Name — データ セットの名前

  • Type — データ型

  • Length — データ サンプルの数

  • Ts — サンプル時間

  • InterSample — 入力サンプル間動作。次の値のいずれかとして返されます。

    • 'zoh' — ゼロ次ホールドにより、サンプル間で区分的に一定な入力信号を維持。

    • 'foh' — 1 次ホールドにより、サンプル間で区分的に線形な入力信号を維持。

    • 'bl' — 帯域幅を制限した動作により、ナイキスト周波数を超える連続時間入力信号のパワーがゼロになるように指定。

  • InputOffset — 推定時に時間領域の入力データから削除されたオフセット。非線形モデルの場合は [] になります。

  • OutputOffset — 推定時に時間領域の出力データから削除されたオフセット。非線形モデルの場合は [] になります。

Termination

予測誤差の最小化に使用された反復探索の終了条件。次のフィールドを含む構造体として返されます。

  • WhyStop — 数値探索を終了する理由

  • Iterations — 推定アルゴリズムで実行された探索の反復回数

  • FirstOrderOptimality — 探索アルゴリズムが終了したときの勾配探索ベクトルの ノルム

  • FcnCount — 目的関数が呼び出された回数

  • UpdateNorm — 最後の反復における勾配探索ベクトルのノルム。探索法が 'lsqnonlin' または 'fmincon' の場合は省略されます。

  • LastImprovement — 最後の反復における基準改善。パーセンテージで表されます。探索法が 'lsqnonlin' または 'fmincon' の場合は省略されます。

  • Algorithm'lsqnonlin' または 'fmincon' の探索法で使用されるアルゴリズム。他の探索法が使用されている場合は省略されます。

数値探索の最適化を必要としない推定法の場合、Termination フィールドは省略されます。

Report の使用の詳細については、Estimation Reportを参照してください。

推定される初期条件。initialCondition オブジェクトまたは initialCondition 値のオブジェクト配列として返されます。

  • 単一実験データ セットの場合、ic は、推定される初期条件 (x0) に対する伝達関数モデルの自由応答 (行列 A および C) を状態空間形式で表します。

  • Ne 回の実験用の複数実験データ セットの場合、ic は、実験ごとに 1 つの initialCondition 値のセットを含む長さ Ne のオブジェクト配列です。

oe0ic 値を返し、非ゼロの初期状態があることがわかっている場合は、oeOptions'InitialCondition' オプションを 'estimate' に設定し、更新されたオプション セットを oe に渡します。以下に例を示します。

opt = oeOptions('InitialCondition','estimate')
[sys,ic] = oe(data,np,nz,opt)
'InitialCondition' の既定の 'auto' 設定では、初期条件が推定誤差最小化プロセス全体に無視できる影響をもたらす場合、'zero' 手法が使用されます。'estimate' を指定すると、ic の値が推定されます。

詳細については、initialCondition を参照してください。この引数の使用例については、初期条件の取得を参照してください。

詳細

すべて折りたたむ

出力誤差 (OE) モデル

一般的な出力誤差モデルの構造:

y(t)=B(q)F(q)u(tnk)+e(t)

出力誤差モデルの次数:

nb:   B(q)=b1+b2q1+...+bnbqnb+1nf:   F(q)=1+f1q-1+...+fnfq-nf

連続時間出力誤差モデル

data が連続時間周波数領域データの場合、oe は次の伝達関数を使用して連続時間モデルを推定します。

G(s)=B(s)F(s)=bnbs(nb1)+bnb1s(nb2)+...+b1snf+fnfs(nf1)+...+f1

分子と分母の次数は、離散時間のケースと同様に nbnf です。ただし、サンプル遅延 nk は連続のケースでは存在せず、推定を指令する際に nk を指定してはなりません。代わりに、プロパティ TimeUnit に格納された時間単位のシステム遅延とともに、名前と値のペアの引数 'IODelay' を使用してシステム遅延を表します。たとえば、連続システムの遅延が iod 秒であるとします。model = oe(data,[nb nf],'IODelay',iod) を使用します。

バージョン履歴

R2006a より前に導入

すべて展開する