ctrbf/obsvfという関数があります.
しかしまぁ研究の都合上これらの正準形を計算したい場合もあるわけで,そんな場合に使うルーチンを作りました.1入力1出力の場合にしか使えません.1入力1出力の場合だと伝達関数形式に変換した時点でこれらの形式は単純に決まるわけですが,復習をかねて教科書的な方法で計算しています.
可観測正準形
function [ csys ] = obsvcanon(sys) %OBSVCANON Compute observability canonical form [n,d]=tfdata(tf(sys),'v'); W=hankel(fliplr(d(1:numel(d)-1))); G=ss(sys); U0=obsv(G); S=W*U0; csys=ss(S*G.a*inv(S),S*G.b,G.c*inv(S),G.d); end
可制御正準形
function [ csys ] = ctrbcanon(sys) %CTRBCANON Compute controllability canonical form [n,d]=tfdata(tf(sys),'v'); W=hankel(fliplr(d(1:numel(d)-1))); G=ss(sys); UC=ctrb(G); S=UC*W; csys=ss(inv(S)*G.a*S,inv(S)*G.b,G.c*S,G.d); end
ダウンロード
0 件のコメント:
コメントを投稿