ドキュメンテーション

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

測定データを使用した非線形 ARX モデルと Hammerstein-Wiener モデルの同定

この例では、測定した入出力データを使用して、単入力単出力 (SISO) の非線形ブラック ボックス モデルを同定する方法を説明します。ここでは 2 つのタンクからなるシステムの測定データを使用して、さまざまなモデル構造と同定の選択肢について調べます。

入出力データセット

この例では、twotankdata.mat ファイルに保存されているデータ変数を使用します。これには、0.2 秒のサンプリング間隔で生成された 2 タンク システムの入出力データ サンプルが 3000 件含まれています。入力 u(t) はポンプに印加された電圧 [V] で、上部タンクへの流入を生成します。この上部タンクの底部にある小さな穴から流出し、下部タンクに流れ込みます。2 タンク システムの出力 y(t) は下部タンクの水位 [m] です。読み込まれたデータをカプセル化する IDDATA オブジェクト z を作成します。

このデータセットは非線形グレー ボックスの例「2 タンク システム: 連続時間 SISO システムの C MEX ファイル モデリング」でも使用され、そこではシステムを記述する物理方程式が仮定されています。この例は、ブラック ボックス モデルを対象としているため、物理方程式は想定しません。

load twotankdata
z = iddata(y, u, 0.2, 'Name', 'Two tank system');

データのプロット

時間範囲 0 ~ 600 秒に対し、3000 のサンプル データ全体をプロットします。

この入力は、さまざまなレベルの複数ステップ信号です。

plot(z)

データの分割

このデータを、それぞれが 1000 サンプルを含む、同じサイズの 3 つのサブセットに分割します。

データ プロットによると、z2 の入力および出力信号 (プロットの中部 3 分の 1) は、z1 の信号と同様ですが、z3 の信号は大きく異なり、z1 の入力/出力範囲を若干超えています。

ここで、モデルを z1 で推定し、z2 および z3 で評価します。z2 により、モデルの内挿が評価でき、z3 では、ある程度外挿を評価できると考えられます。

z1 = z(1:1000); z2 = z(1001:2000); z3 = z(2001:3000);

モデル次数の選択

非線形ブラック ボックス モデルを推定する最初のステップは、モデル次数の選択です。IDNLARX モデルの場合、Orders = [na nb nk] は、現在の出力を予測するために使用した過去の出力、過去の入力および入力遅延の数を定義します。

通常、モデル次数は、試行錯誤により選択します。場合によっては、まず線形 ARX モデルを使用して、モデル次数に関するヒントを得ることをお勧めします。ここでは、線形 ARX モデルの次数選択用のツールを使用してみます。

V = arxstruc(z1,z2,struc(1:5, 1:5,1:5));
nn = selstruc(V,'aic') % selection of nn=[na nb nk] by Akaike's information criterion (AIC)
nn =

     5     1     3

AIC 条件では、nn = [na nb nk] = [5 1 3] が選択されていますが、これは、選択した ARX モデル構造で、y(t) が 6 つの説明変数 y(t-1)、y(t-1)、...y(t-5) および u(t-3) で予測されることを意味します。これらの値を非線形モデルで使用します。

非線形 ARX (IDNLARX) モデル

IDNLARX モデルでは、model_output(t) = F(y(t-1),y(t-1),...,y(t-5), u(t-3)) などのように、モデル出力が説明変数の関数となります。

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

M = NLARX(Data, Orders, Nonlinearity).

これは、線形 ARX コマンドと同じですが、追加の引数 Nonlinearity で非線形推定器のタイプを指定します。

IDNLARX モデルを推定するため、モデル次数を選択した後、使用する非線形推定器を選択する必要があります。WAENET 推定器を最初に試します。

mw1 = nlarx(z1,[5 1 3], wavenet);

WAVENET 推定器のユニット数 (wavenet 関数) は、自動的に選択されています。以下のようにアクセスできます。

mw1.Nonlinearity.NumberOfUnits
ans =

     3

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

compare(z1,mw1);

モデル プロパティの操作

最初のモデルは十分ではないので、このモデルのプロパティの一部を変更します。推定アルゴリズムで WAVENET 推定器のユニット数を自動的に選択させるのではなく、この数値を明示的に指定することができます。

mw2 = nlarx(z1,[5 1 3], wavenet('NumberOfUnits',8));

既定の InputName および OutputName を使用しています。

mw2.InputName
mw2.OutputName
ans = 

    'u1'


ans = 

    'y1'

IDNLARX モデルの説明変数は、getreg コマンドを使用して表示できます。このコマンドは、mw2.InputName、mw2.OutputName および時間遅延を含む文字列を返します。

getreg(mw2)
Regressors:
    y1(t-1)
    y1(t-2)
    y1(t-3)
    y1(t-4)
    y1(t-5)
    u1(t-3)

IDNLARX モデルの非線形の説明変数

IDNLARX モデルの重要なプロパティが NonlinearRegressors (非線形の説明変数) です。IDNLARX モデルの出力は、説明変数の関数となります。通常、この関数は、線形ブロックと非線形ブロックを含みます。モデル出力は、2 つのブロックの出力合計となります。モデルの複雑さを緩和するため、説明変数のサブセットを選択し、非線形ブロックを入力できます。これらの説明変数は、"非線形の説明変数" と呼ばれます。

非線形の説明変数は、GETREG で返される説明変数の次数で説明変数のインデックスのベクトルとして指定できます。mw2 の例では、説明変数の全リストが以下に表示され、NonlinearRegressors=[1 2 6] はリストの y1(t-1)、y1(t-2) および u1(t-3) に対応します。

getreg(mw2)
Regressors:
    y1(t-1)
    y1(t-2)
    y1(t-3)
    y1(t-4)
    y1(t-5)
    u1(t-3)

非線形の説明変数は、以下の例のように、Property-Value (プロパティ-値) の組み合わせで指定できます。'nlreg' は 'NonlinearRegressors' の省略形となります。

%mw3 = nlarx(z1,[5 1 3], wavenet, 'NonlinearRegressors', [1 2 6]);
mw3 = nlarx(z1,[5 1 3], wavenet, 'nlreg', [1 2 6]);  % using short-hand notation
getreg(mw3, 'nonlinear')  % get nonlinear regressors
Nonlinear regressors:
    y1(t-1)
    y1(t-2)
    u1(t-3)

説明変数のインデックスの代わりに、キーワード文字列を使用して、非線形の説明変数を指定することもできます。説明変数の 'input' は 遅延入力を、説明変数の 'output' は遅延出力を含みます。以下の例では、'input' が入力の説明変数 u1(t-3) のみを指定しています。

mw4 = nlarx(z1,[5 1 3], wavenet, 'nlreg', 'input');
mw4.nlreg    % 'nlreg' is the short-hand of 'NonlinearRegressors'
getreg(mw4, 'nonlinear')  % get nonlinear regressor
ans =

     6

Nonlinear regressors:
    u1(t-3)

非線形の説明変数の自動検索

可能なすべての説明変数のサブセットを自動的に試行し、最もシミュレーション誤差が少ない結果を選択するため、NonlinearRegressors='search' の値を使用します。この徹底的な検索には通常、長い時間が掛かります。この検索オプションを使用する場合、反復表示をオンにしておくことをお勧めします。

この例には少し時間が掛かることがあります。

opt = nlarxOptions('Display','on');
mws = nlarx(z1,[5 1 3], wavenet, 'nlreg', 'search', opt);

検索結果には、mws.nlreg でアクセスできます。結果の値 mws.nlreg=[4 6] は、説明変数リストで 4 番目と 6 番目の説明変数が非線形であることを意味します。したがって、非線形の説明変数として y1(t-4) と u1(t-3) を使用します。

mws.nlreg
getreg(mws)
ans =

     4     6

Regressors:
    y1(t-1)
    y1(t-2)
    y1(t-3)
    y1(t-4)
    y1(t-5)
    u1(t-3)

推定モデルの評価

線形および非線形のさまざまなモデルを、同じ COMPARE コマンドで一緒に比較できます。

mlin = arx(z1,[5 1 3]);

compare(z1,mlin,mw2,mws);

ここでは、データセット z2 と、

compare(z2,mws);

データセット z3 で評価します。

compare(z3,mws);

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

plot(mw2,mws) % plot nonlinearity response as a function of selected regressors

SIGMOIDNET 非線形推定器を含む非線形 ARX モデル

WAVENET の場所に、他の非線形推定器を使用できます。SIGMOIDNET 推定器を使用してみます。

ms1 = nlarx(z1,[5 1 3], sigmoidnet('NumberOfUnits', 8));
compare(z1,ms1)

新しいモデルをデータセット z2 と

compare(z2,ms1);

データセット z3 で評価します。

compare(z3,ms1);

IDNLARX モデルのその他の非線形推定器

CUSTOMNET は SIGMOIDNET とよく似ていますが、シグモイド関数ではなく、他のユニット関数を MATLAB ファイルで定義できます。この例は、関数 gaussunit.m で定義されている関数 gaussunit を使用します。

TREEPARTITION はもう 1 つの非線形推定器です。

mc1 = nlarx(z1,[5 1 3], customnet(@gaussunit),'nlreg',[3 5 6]);
mt1 = nlarx(z1,[5 1 3], treepartition);

Neural Network Toolbox™ (NNTB) で作成したネットワーク オブジェクトの使用

NNTB を利用して作成したニューラル ネットワークも使用できます。これには NNTB のライセンスが必要です。

ここでは、入力数が不明の単一出力ネットワークを作成します (ネットワーク オブジェクトの零点入力サイズで指定)。入力数は、推定プロセス中に、(モデル次数で求められた) IDNLARX モデルの説明変数の数に自動的に設定されます。

モデル mc1 および mt1 をデータ z1 と比較します。

compare(z1, mc1, mt1)

if exist('feedforwardnet','file')==2 % check if Neural Network Toolbox is available
    % This example is run only if the NNTB license is available.
    ff = feedforwardnet([5 20]);
    ff.layers{2}.transferFcn = 'radbas';
    ff.trainParam.epochs = 50;
    mn1 = nlarx(z1,[5 1 3], neuralnet(ff)); % estimation with neuralnet nonlinearity
    compare(z1, mn1) % compare fit to estimation data
end

Hammerstein-Wiener (IDNLHW) モデル

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

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

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

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

区分的線形非線形推定器を含む Hammerstein-Wiener モデル

PWLINEAR (区分的線形) 非線形推定器は、一般的な IDNLHW モデルで有効です。

Orders = [nb nf nk] において、nf は線形伝達関数の極数を指定し、IDNLARX モデルの次数 na とある程度関連しています。

mhw1 = nlhw(z1, [1 5 3], pwlinear, pwlinear);

結果は、前述のように COMPARE で評価できます。

compare(z1,mhw1)

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

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

線形ブロックの場合、ステップ応答、ボード線図、インパルス応答および極/零点図内で、プロットのタイプを選択できます。

plot(mhw1)

2 つの区分的線形推定器のブレーク ポイントを確認できます (省略形として、u = input、y = output、および nl = Nonlinearity を使用可能)。これは、2 行の行列で、最初の行は入力に、2 番目の行は PWLINEAR 推定器の出力に対応します。

mhw1.unl.BreakPoints
ans =

  Columns 1 through 7

    2.5711    3.3614    4.1517    4.9421    5.6285    6.3563    7.0841
   -2.4293   -1.6409    0.3690    2.7963    4.5690    6.0413    7.1509

  Columns 8 through 10

    7.8119    8.2129    9.2752
    7.9420    8.2268   11.5056

飽和および不感帯非線形を含む Hammerstein-Wiener モデル

SATURATION および DEADZONE 推定器は、これらの非線形がシステムに存在すると想定される場合に使用できます。

mhw2 = nlhw(z1, [1 5 3], deadzone, saturation);
compare(z1,mhw2)

非線形が存在しないことは、UNITGAIN オブジェクトまたは空の "[]" 値で指定されます。非線形推定器名には省略形の文字列を使用できます。

mhw3 = nlhw(z1, [1 5 3], 'dead',unitgain);
mhw4 = nlhw(z1, [1 5 3], [],'satur');

DEADZONE および ATURATION 推定器の限界値をそれぞれ確認できます。

mhw2.unl.ZeroInterval
mhw2.ynl.LinearInterval
ans =

    0.9856    3.5657


ans =

    0.0274    0.5660

DEADZONE の場合は ZeroInterval の初期推定、SATURATION の場合は LinearInterval の初期推定を、推定器に指定できます。

mhw5 = nlhw(z1, [1 5 3], deadzone([0.1 0.2]), saturation([-1 1]));

Hammerstein-Wiener モデル - 追加プロパティの指定

推定アルゴリズムのオプションは、NLHWOPTIONS コマンドを使用して指定できます。

opt = nlhwOptions();
opt.SearchMethod = 'gna';
opt.SearchOption.MaxIter = 3;
mhw6 = nlhw(z1, [1 5 3], deadzone, saturation, opt);

既に推定済みのモデルを、反復推定によって改善することができます。

推定データ z1 で評価されたmhw7 は、mhw6 よりも優れた適合を示すはずです。

mhw7 = nlhw(z1, mhw6, opt);
compare(z1, mhw6, mhw7)

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

非線形推定器 PWLINEAR、SATURATION および DEADZONE は主として、IDNLHW モデルで使用します。これらは、単一の変数非線形しか推定できません。他のより一般的な非線形推定器 SIGMOIDNET、CUSTOMNET、および WAVENET も、IDNLHW モデルで使用できます。ただし、IDNLHW モデルの推定には反復アルゴリズム非線形推定器の微分係数が必要であるため、微分不可能な推定器 TREEPARTITION および NEURALNET は対象となりません。非線形推定器の概要ついては、「idprops idnlestimators」と入力してください。

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