- Scilabヘルプ
 - CACSD
 - Formal representations and conversions
 - Plot and display
 - abinv
 - arhnk
 - arl2
 - arma
 - arma2p
 - arma2ss
 - armac
 - armax
 - armax1
 - arsimul
 - augment
 - balreal
 - bilin
 - bstap
 - cainv
 - calfrq
 - canon
 - ccontrg
 - cls2dls
 - colinout
 - colregul
 - cont_mat
 - contr
 - contrss
 - copfac
 - csim
 - ctr_gram
 - damp
 - dcf
 - ddp
 - dhinf
 - dhnorm
 - dscr
 - dsimul
 - dt_ility
 - dtsi
 - equil
 - equil1
 - feedback
 - findABCD
 - findAC
 - findBD
 - findBDK
 - findR
 - findx0BD
 - flts
 - fourplan
 - freq
 - freson
 - fspec
 - fspecg
 - fstabst
 - g_margin
 - gamitg
 - gcare
 - gfare
 - gfrancis
 - gtild
 - h2norm
 - h_cl
 - h_inf
 - h_inf_st
 - h_norm
 - hankelsv
 - hinf
 - imrep2ss
 - inistate
 - invsyslin
 - kpure
 - krac2
 - lcf
 - leqr
 - lft
 - lin
 - linf
 - linfn
 - linmeq
 - lqe
 - lqg
 - lqg2stan
 - lqg_ltr
 - lqr
 - ltitr
 - macglov
 - minreal
 - minss
 - mucomp
 - narsimul
 - nehari
 - noisegen
 - nyquistfrequencybounds
 - obs_gram
 - obscont
 - observer
 - obsv_mat
 - obsvss
 - p_margin
 - parrot
 - pfss
 - phasemag
 - plzr
 - pol2des
 - ppol
 - prbs_a
 - projsl
 - repfreq
 - ric_desc
 - ricc
 - riccati
 - routh_t
 - rowinout
 - rowregul
 - rtitr
 - sensi
 - sident
 - sorder
 - specfact
 - ssprint
 - st_ility
 - stabil
 - sysfact
 - syslin
 - syssize
 - time_id
 - trzeros
 - ui_observer
 - unobs
 - zeropen
 
Please note that the recommended version of Scilab is 2026.0.0. This page might be outdated.
See the recommended documentation of this function
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 | CACSD | obsv_mat >> |