observer
オブザーバの設計
呼び出し手順
Obs=observer(Sys,J) [Obs,U,m]=observer(Sys [,flag,alfa])
パラメータ
- Sys
syslinリスト (線形システム)- J
nx x ny 定数行列 (出力注入行列)
- flag
文字列 (
'pp'または'st'(デフォルト))- alfa
閉ループ極の位置 (オプションのパラメータ, デフォルト=-1)
- Obs
線形システム (
syslinリスト), オブザーバ- U
直交行列 (
dt_ility参照)- m
整数 (不安定/不可観測(
st)または 不可観測(pp)部分空間の次元)
説明
Obs=observer(Sys,J) は,
J出力注入によりSysから得られた
オブザーバ
Obs=syslin(td,A+J*C,[B+J*D,-J],eye(A)) を返します
(td はSysの時間領域).
より一般的に,observerは,
線形システムSys,つまり,
syslinリストにより表された
dotx=A x + Bu, y=Cx + Du,
の可観測な部分に関するオブザーバ
Obs を返します.
Sys は nx 個の状態変数,
nu 個の入力および ny 個の出力を有します.
Obs は,
行列 [Ao,Bo,Identity]を有する線形システムです.
ただし,
Ao は no x no, Bo は
no x (nu+ny), Co は
no x no および no=nx-mです.
Obsへの入力は
[u,y] そして Obs の出力は以下のようになります:
xhat=不可観測な部分空間の x modulo の推定値 (flag='pp'の場合)
または,
xhat=不安定で不可観測な部分空間のx modulo の推定値 (flag='st'の場合)
flag='st'の場合:
H*U(:,1:m)=0の場合に限り
z=H*x は安定なオブザーバにより推定することができ,
オブザーバで配置可能な極はalfa(1),alfa(2),...に
設定されます.
flag='pp'の場合:
H*U(:,1:m)=0の場合に限り
z=H*x は指定した誤差スペクトルで推定することができ,
全てのオブザーバの極は配置され,alfa(1),alfa(2),...に
設定されます.
H が以下の拘束条件を満たす場合: H*U(:,1:m)=0 (ker(H) は
Sysの不可観測な部分空間を含みます)
H*U=[0,H2]となり, z=H*x のオブザーバはH2*Obs (ただし,H2=H*U(:,m+1:nx)) となります.
すなわち,
H*x のオブザーバの C行列である Co は Co=H2となります.
Sysの対(A,C)が可観測となる
場合,m=0となり,
線形システム U*Obs (またはH*U*Obs)
はx(または Hx)のオブザーバとなります.
誤差スペクトルは,
alpha(1),alpha(2),...,alpha(nx)です.
例
nx=5;nu=1;ny=1;un=3;us=2;Sys=ssrand(ny,nu,nx,list('dt',us,us,un)); //nx=5 states, nu=1 input, ny=1 output, //un=3 unobservable states, us=2 of them unstable. [Obs,U,m]=observer(Sys); //Stable observer (default) W=U';H=W(m+1:nx,:);[A,B,C,D]=abcd(Sys); //H*U=[0,eye(no,no)]; Sys2=ss2tf(syslin('c',A,B,H)) //Transfer u-->z Idu=eye(nu,nu);Sys3=ss2tf(H*U(:,m+1:$)*Obs*[Idu;Sys]) //Transfer u-->[u;y=Sys*u]-->Obs-->xhat-->HUxhat=zhat i.e. u-->output of Obs //this transfer must equal Sys2, the u-->z transfer (H2=eye). //Assume a Kalman model //dotx = A x + B u + G w // y = C x + D u + H w + v //with Eww' = QN, Evv' = RN, Ewv' = NN //To build a Kalman observer: //1-Form BigR = [G*QN*G' G*QN*H'+G*NN; // H*QN*G'+NN*G' H*QN*H'+RN]; //the covariance matrix of the noise vector [Gw;Hw+v] //2-Build the plant P21 : dotx = A x + B1 e ; y = C2 x + D21 e //with e a unit white noise. // [W,Wt]=fullrf(BigR); //B1=W(1:size(G,1),:);D21=W(($+1-size(C,1)):$,:); //C2=C; //P21=syslin('c',A,B1,C2,D21); //3-Compute the Kalman gain //L = lqe(P21); //4- Build an observer for the plant [A,B,C,D]; //Plant = syslin('c',A,B,C,D); //Obs = observer(Plant,L); //Test example: A=-diag(1:4); B=ones(4,1); C=B'; D= 0; G=2*B; H=-3; QN=2; RN=5; NN=0; BigR = [G*QN*G' G*QN*H'+G*NN; H*QN*G'+NN*G' H*QN*H'+RN]; [W,Wt]=fullrf(BigR); B1=W(1:size(G,1),:);D21=W(($+1-size(C,1)):$,:); C2=C; P21=syslin('c',A,B1,C2,D21); L = lqe(P21); Plant = syslin('c',A,B,C,D); Obs = observer(Plant,L); spec(Obs.A)
| Report an issue | ||
| << obscont | Controllability Observability | obsv_mat >> |