ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

モーター付きカメラ - 多入力/多出力非線形 ARX および Hammerstein-Wiener モデル

この例では、多入力/多出力 (MIMO) 非線形ブラック ボックス モデルをデータから推定する方法を説明します。ツールボックスでは、非線形 ARX と Hammerstein-Wiener という 2 種類の非線形ブラック ボックス モデルが利用できます。

測定するデータセット

この例では、ファイル motorizedcamera.mat に保存されているデータを使用します。このファイルには、サンプリング間隔 0.02 秒で、モーター付きカメラから収集した 188 のデータ サンプルが含まれます。入力ベクトル u(t) は 6 つの変数で構成されます。これらの変数とは、カメラに固定された直交 X-Y-Z 座標系の 3 つの変換速度成分 [m/s] と、X-Y-Z 軸周りの 3 つの回転速度成分 [rad/s] です。出力ベクトル y(t) は 2 つの変数を含みます。これらの変数は、3D 空間の固定カメラ ポイントから取得したイメージによるポイントの位置 (ピクセル単位) です。IDDATA オブジェクト z を作成し、ロードしたデータを保持します。

load motorizedcamera
z = iddata(y, u, 0.02, 'Name', 'Motorized Camera', 'TimeUnit', 's');

非線形 ARX (IDNLARX) モデル - Wavenet を使用した予備推定

まず最初に、非線形 ARX モデルを実行します。2 つの重要な要素を選択する必要があります。それは、モデル次数と非線形推定器です。簡単なほうから片付けるため、次数 [na nb nk] = [ones(2,2), ones(2,6), ones(2,6)] を選択します。これは、各出力変数が、出力および入力変数によって予測され、それぞれが 1 サンプルずつ遅延されることを意味します。ベクトル表記を使用して、モデルを model_output(t) = F(y(t-1), u(t-1)) の形式で記述できます。ウェーブレット ネットワーク (wavenet) を非線形推定器として選択すると、ベクトル非線形関数 F が 2 つの ウェーブレット ネットワークから推定されます。関数 nlarx を使用すると、非線形 ARX モデルの推定が容易になります。

mw1 = nlarx(z, [ones(2,2), ones(2,6), ones(2,6)], wavenet);

推定モデルでシミュレートした出力と、測定データ z の出力を比較します。

compare(z,mw1)

非線形 ARX モデル - 高い次数を試行

高次数でも、良好な結果が得られるかどうかを試してみます。

mw2 = nlarx(z, [ones(2,2), 2*ones(2,6), ones(2,6)], wavenet);
compare(z,mw2)

2 番目のモデル mw2 はかなり良好です。したがって、以下の例でも、このモデル次数の選択を使用します。

nanbnk = [ones(2,2), 2*ones(2,6), ones(2,6)];

2 つの WAVENET 推定器のユニット数 (wavelets) は、推定アルゴリズムで自動的に選択されています。これらの数値を以下に示します。省略形として、'nl' = 'Nonlinearity' および 'num' = 'NumberOfUnits' が使用されています。

mw2.Nonlinearity(1).NumberOfUnits %using full property names
mw2.nl(2).num                     %using short-hand notations
ans =

    27


ans =

    25

非線形 ARX モデル - 非線形推定器のユニット数を調整

WAVENET 推定器のユニット数は、推定アルゴリズムで自動的に選択される代わりに、明示的に指定できます。

mw3 = nlarx(z, nanbnk, [wavenet('num',10); wavenet('num',5)]);

非線形 ARX モデル - 他の非線形推定器を試行

WAVENET 推定器の場所に、他の非線形推定器を使用することもできます。TREEPARTITION 推定器を使用してみましょう。省略形の名前文字列が使用されています。

mt1 = nlarx(z, nanbnk, 'tree'); % tree is short for treepartition

上記の呼び出しでは、オブジェクトの場所に文字列 ('tree') を使用して、非線形推定器を指定しています。文字列形式を使用する利点は、不完全な大文字/小文字を区別しない指定が可能だということです。ただし、この方法は、非線形が既定のプロパティ値で使用される場合にのみ有効です。以下の例では、treepartition オブジェクト コンストラクターを呼び出して、非線形推定器オブジェクトを直接作成します。

mt2 = nlarx(z, nanbnk, treepartition);

また、SIGMOIDNET 推定器も使用できます。最大反復 (MaxIter) や反復表示などのアルゴリズム オプションは、NLARX コマンドで直接指定できます。

ms1 = nlarx(z, nanbnk, 'sigmoidnet', 'maxiter',2, 'display', 'on');

各種の非線形推定器を含む非線形 ARX モデル

同じモデルで、異なる出力チャネルに異なる非線形推定器を使用できます。最初の出力の予測に、ツリー パーティション非線形推定器を使用し、2 番目の出力の予測には、ウェーブレット ネットワークを使用するとします。モデルの予測を以下に示します。3 番目の入力引数 (非線形) は、2 つの異なる非線形推定器オブジェクトの配列となります。

mtw = nlarx(z, nanbnk, [treepartition; wavenet]);

出力チャネルに非線形が存在しないことは、LINEAR 推定器を選択すると指定できます。以下の例は、model_output(t) = F(y(t-1), u(t-1), u(t-2)) で、関数 F が線形成分と非線形成分 (SIGMOIDNET) で構成されることを意味します。

mls = nlarx(z, nanbnk, [linear; sigmoidnet('num',5)], 'maxi',2);
% no nonlinearity on first output

推定結果の確認

さまざまなモデルを、同じ COMPARE コマンドで比較できます。

compare(z, mw2, ms1, mls)

関数 PLOT を使用して、各モデルの非線形応答を表示できます。

plot(mt1,mtw,ms1,mls)

プロット右側にあるコントロール パネルで、説明変数を選択し、設定できます。

RESID、PREDICT および PE などの他の関数を、線形モデルの場合と同じように推定モデルで使用できます。

Hammerstein-Wiener (IDNLHW) モデル - 予備推定

Hammerstein-Wiener モデルは、最大 3 つのブロックで構成されます。これらのブロックとは、非線形静的ブロック、その後に続く別の非線形静的ブロック、さらにその後に続く線形伝達関数ブロックです。最初の非線形静的ブロックがない場合、Wiener モデルと呼ばれ、2 番目の非線形静的ブロックがない場合は、Hammerstein モデルと呼ばれます。

IDNLHW モデルは通常、以下の構文を使用して推定します。

M = NLHW(Data, Orders, InputNonlinearity, OutputNonlinearity).

ここで、Orders = [nb bf nk] は、線形伝達関数の次数と遅延を指定します。InputNonlinearity および OutputNonlinearity は、2 つの非線形ブロックの非線形推定器を指定します。線形出力誤差 (OE) モデルは、同定が自明な (UNITGAIN) 非線形性の場合に対応します。

Hammerstein モデルの推定 (出力非線形なし)

ここで、Orders = [nb bf nk] = [ones(2,6), ones(2,6), ones(2,6)] を選択します。これは、線形ブロックで、各出力が、6 つの出力に基づいた最初の 6 つの次数伝達関数の合計となることを意味します。区分的推定器なしの Hammerstein モデル (出力非線形なし) を使用してみましょう。入力した 1 つの PWLINEAR オブジェクトが、すべての 6 入力チャネルに自動的に展開されます。UNITGAIN は、非線形が存在しないことを示します。

mhw1 = nlhw(z,[ones(2,6), ones(2,6), ones(2,6)], pwlinear, unitgain, 'maxiter',2);

結果を COMPARE で確認します。

compare(z, mhw1);

モデルのプロパティは、PLOT コマンドでビジュアル化できます。

ブロック線図をクリックして、入力非線形 (UNL)、線形ブロックまたは出力非線形 (YNL) のビューを選択します。

線形ブロック ビューを選択した場合、既定の設定で、12 のチャネルすべてが縮小サイズで表示されます。チャネルの 1 つを選択して、わかりやすく表示します。ステップ応答、ボード線図、インパルス応答および極/零点図内で、プロットのタイプを選択できます。

plot(mhw1)

COMPARE で示された結果は、非常に良好であり、以降のテストにも同じモデル次数を使用します。

nbnfnk = [ones(2,6), ones(2,6), ones(2,6)];

Wiener モデルの推定 (入力非線形なし)

Wiener モデルを使用してみましょう。入力非線形が存在しないことは、UNITGAIN オブジェクト以外に、"[]" でも指定できます。省略形として、'pwlinear' に 'pwl' を使用できます。

mhw2 = nlhw(z, nbnfnk, [], 'pwl', 'maxiter',4);

Hammerstein-Wiener モデルの推定 (入力および出力非線形)

Hammerstein-Wiener モデルの入力および出力非線形を指定します。非線形 ARX モデルの場合、(オブジェクトではなく) 文字列を使用して、非線形推定器を指定できます。以下の例では、'saturation' の省略形として 'sat' を使用しています。

mhw3 = nlhw(z, nbnfnk,'sat', 'pwl', 'maxiter',4);

SATURATION 推定器の限界値にアクセスできます。省略計として、'u' = 'input'、'y' = 'output'、および 'nl' = 'Nonlinearity' を使用できます。

mhw3.InputNonlinearity(1).LinearInterval % view Linear Interval of SATURATION
mhw3.unl(3).LinearInterval               % access using using short-hand notation
ans =

    0.0103    0.0562


ans =

   -0.0943   -0.0176

PWLINEAR 推定器のブレーク ポイントにもアクセスできます。

mhw3.outputNL(1).BreakPoints
ans =

  Columns 1 through 7

   16.8870   33.7740   50.6609   67.5479   84.4349  101.3219  118.2089
    2.6468   16.0904   45.5445   41.9864   62.3487   84.9286  112.3221

  Columns 8 through 10

  135.0958  151.9828  168.8698
  135.4823  156.1339  173.3085

Hammerstein-Wiener モデル - 各種の非線形推定器を使用

複数の非線形推定器を、同じモデルで混在させることができます。以下のようなモデルが必要だとします。- いずれかの出力チャネルで非線形 ("Hammerstein モデル") - 3 ユニットの入力チャネル #1 で区分的線形非線形 - 入力チャネル #2 で飽和非線形 - 入力チャネルl #3 でDead Zone 非線形 - 出力チャネルl #4 でシグモイド ネットワーク非線形 - 出力チャネル #5 で非線形 (unitgain オブジェクトで指定) - 5 ユニットの入力チャネル #6 でシグモイド ネットワーク非線形

選択したタイプの非線形オブジェクト推定器配列を作成し、それを入力非線形として推定関数 NLHW に渡すことができます。

inputNL = [pwlinear('num',3); saturation; deadzone; sigmoidnet; unitgain; sigmoidnet('num',5)];
mhw4 = nlhw(z, nbnfnk, inputNL, [], 'maxiter',2); % "[]" for 4th input denotes no output nonlinearity

Hammerstein-Wiener モデル - SATURATION および DEADZONE 推定器に初期推定を指定

SATURATION の線形間隔および DEADZONE の零点間隔に対する初期推定は、推定器オブジェクトを作成したときに直接指定できます。初期推定で、飽和の線形間隔を [10 200] に、デッドゾーンの零点間隔を [11 12] に設定するとします。

mhw5 = idnlhw(nbnfnk, [], [saturation([10 200]); deadzone([11 12])]);
% Create  nonlinearity estimator with initial guesses for properties.
% Notice the use of the IDNLHW model object constructor idnlhw, not the
% estimator nlhw. The resulting model object mhw5 is not yet estimated from
% data.

飽和およびデッドゾーン推定器の限界値にアクセスできます。データからまだ推定を行っていないので、ここでは開始値のままになっています。

mhw5.outputNL(1).LinearInterval % show linear interval on saturation at first output channel after estimation
mhw5.yNL(2).ZeroInterval        % show zero interval on dead zone at second output channel after estimation
ans =

    10   200


ans =

    11    12

推定後のこれらの限界値はどうなるでしょうか。

mhw5 = nlhw(z, mhw5, 'MaxIter',5);  % estimate the model from data
mhw5.outputNL(1).LinearInterval % show linear interval on saturation at first output channel after estimation
mhw5.yNL(2).ZeroInterval        % show zero interval on dead zone at second output channel after estimation
ans =

   10.0000  200.0000


ans =

   11.0000   12.0000

推定後の解析 - 異なるモデルの比較

異なる特性のモデル (IDNLARX および IDNLHW)を、同じ COMPARE コマンドで比較できます。

compare(z,mw2,mhw1)

その他の情報

System Identification Toolbox を使った動的システムの同定についての詳細は、System Identification Toolbox 製品の情報ページを参照してください。

この情報は役に立ちましたか?