Scilab Home page | Wiki | Bug tracker | Forge | Mailing list archives | ATOMS | File exchange
Please login or create an account
Change language to: English - Français - Português -

Please note that the recommended version of Scilab is 6.0.1. This page might be outdated.
See the recommended documentation of this function

Scilab help >> CACSD > armax

armax

armax 同定

呼び出し手順

[arc,la,lb,sig,resid]=armax(r,s,y,u,[b0f,prf])

パラメータ

y

出力プロセス y(ny,n); ( ny: yの次元 , n : サンプルの大きさ)

u

入力プロセス u(nu,n); ( nu: uの次元 , n : サンプルの大きさ)

r and s

自己回帰,次数は r >=0 , s >=-1

b0f

オプションのパラメータ. デフォルト値は0で,係数b0を同定する必要があることを意味します. bof=1の場合,b0は0であると仮定され,同定されません.

prf

表示を制御するオプションのパラメータ. prf =1 (デフォルト値)の場合, Arma同定の過程が表示されます.

arc

Scilab arma オブジェクト (armac参照)

la

list(a,a+eta,a-eta) ( la は a の次元1) です; ただし, eta は標準偏差の推定値です. a=[Id,a1,a2,...,ar],ただし,各aiは大きさ(ny,ny)の行列です.

lb

list(b,b+etb,b-etb) (lb はbの次元1) です; ただし, etb は標準偏差の推定値です. b=[b0,.....,b_s] ただし,各biは大きさ(nu,nu)の行列です.

sig

ノイズの標準偏差の推定値で, resid=[ sig*e(t0),....] です.

説明

armax はn次元ARXプロセスの係数を同定するために使用されます.

A(z^-1)y= B(z^-1)u + sig*e(t)

ただし, e(t) は分散Iのn次元白色雑音です. sig は nxn の行列で, A(z) および B(z)は以下のようになります:

A(z) = 1+a1*z+...+a_r*z^r; ( r=0 => A(z)=1)
B(z) = b0+b1*z+...+b_s z^s ( s=-1 => B(z)=0)

この手法については,Eykhoffの96ページ, "trends and progress in system identification"を参照ください. z(t)=[y(t-1),..,y(t-r),u(t),...,u(t-s)] および coef= [-a1,..,-ar,b0,...,b_s]とおくと, y(t)= coef* z(t) + sig*e(t)を記述することができ, このアルゴリズムは, sum_{t=1}^N ( [y(t)- coef'z(t)]^2) を最小化 (ただし,t0=maxi(maxi(r,s)+1,1))) )します.

例s

//-Ex1- Arma model : y(t) = 0.2*u(t-1)+0.01*e(t-1)
ny=1,nu=1,sig=0.01;
Arma=armac(1,[0,0.2],[0,1],ny,nu,sig)  //defining the above arma model
u=rand(1,1000,'normal');     //a random input sequence u
y=arsimul(Arma,u); //simulation of a y output sequence associated with u.
Armaest=armax(0,1,y,u);   //Identified model given u and y.
Acoeff=Armaest('a');    //Coefficients of the polynomial A(x)
Bcoeff=Armaest('b')     //Coefficients of the polynomial B(x)
Dcoeff=Armaest('d');    //Coefficients of the polynomial D(x)
[Ax,Bx,Dx]=arma2p(Armaest)   //Results in polynomial form. 

//-Ex2- Arma1: y_t -0.8*y_{t-1} + 0.2*y_{t-2} =  sig*e(t)
ny=1,nu=1;sig=0.001;
// First step: simulation the Arma1 model, for that we define
// Arma2: y_t -0.8*y_{t-1} + 0.2*y_{t-2} = sig*u(t)
// with normal deviates for u(t).  
Arma2=armac([1,-0.8,0.2],sig,0,ny,nu,0);
//Definition of the Arma2 arma model (a model with B=sig and without noise!)
u=rand(1,10000,'normal');  // An input sequence for Arma2
y=arsimul(Arma2,u); // y = output of Arma2 with input u 
//                     can be seen as output of Arma1.
// Second step: identification. We look for an Arma model
// y(t) + a1*y(t-1) + a2 *y(t-2) =  sig*e(t)
Arma1est=armax(2,-1,y,[]);
[A,B,D]=arma2p(Arma1est)

参照

  • imrep2ss — インパルス応答の状態空間実現
  • time_id — SISO 最小二乗同定
  • arl2 — L2伝達関数近似による SISO モデル実現
  • armax — armax 同定
  • frep2tf — 周波数応答から伝達関数実現を得る

Authors

J-Ph. Chancelier.

Scilab Enterprises
Copyright (c) 2011-2017 (Scilab Enterprises)
Copyright (c) 1989-2012 (INRIA)
Copyright (c) 1989-2007 (ENPC)
with contributors
Last updated:
Thu Mar 03 11:00:53 CET 2011