home *** CD-ROM | disk | FTP | other *** search
- function [a,b,c,d,k,x0]=th2ssaux(th);
- %TH2SSAUX An auxiliary routine to TH2SS
- %
- % [a,b,c,d,k,x0]=th2ssaux(th);
-
- % L. Ljung 10-2-90
- % Copyright (c) 1990 by the MathWorks, Inc.
- % All Rights Reserved.
-
- T=th(1,2);
- [ap,bp,cp,dp,fp]=th2poly(th);
- nu=th(1,3);na=th(1,4);nb=th(1,5:4+nu);nc=th(1,5+nu);nd=th(1,6+nu);
- nf=th(1,7+nu:6+2*nu);nk=th(1,7+2*nu:6+3*nu);nf1=max(nd,max(nf))+1;
-
- if T>0
- fp(nu+1,1:length(dp))=dp;
- else
- fp(nu+1,:)=zeros(1,nf1);fp(nu+1,nf1-nd:nf1)=dp;
- end
- nf(nu+1)=nd;
-
- for ku=1:nu+1
- if T>0 findx=1:nf(ku)+1;else findx=nf1-nf(ku):nf1;end
- ffp=fp(ku,findx);
- ap=conv(ap,ffp);
- if ku==nu+1
- btemp=cp;
- else
- if T>0,btemp=bp(ku,1:nb(ku)+nk(ku));
- else btemp=bp(ku,nk(ku)+1:nb(ku)+nk(ku));
- end
- end
- for kku=1:nu+1
- if T>0 findx=1:nf(kku)+1;else findx=nf1-nf(kku):nf1;end
- if kku~=ku,btemp=conv(btemp,fp(kku,findx));end
- end
- bpp(ku,1:length(btemp))=btemp;nbpp(ku)=length(btemp);
- end
- [dum,maxindb]=size(bpp);nap=length(ap);nab=max(maxindb,nap);
- bp=zeros(nu+1,nab);
- if T<0,
- if maxindb>nap,error('Pure differentiations of inputs. No state space model produced!'),end
-
- for ku=1:nu+1,bp(ku,:)=[zeros(1,nab-nbpp(ku)) bpp(ku,1:nbpp(ku))];end
-
- else
-
- bp=[bpp,zeros(nu+1,nab-maxindb)];end
- app=zeros(1,nab);app(1:nap)=ap;
- d=bp(1:nu,1)';
- if bp(nu+1,1)~=1,disp('WARNING: Noise model indicates no white noise component,Resulting state space model has unreliable noise structure'),end
- bp=bp-bp(:,1)*app;
- nx=nab-1;
- bt=bp(:,2:nab);
- at=app(2:nab)';
-
- a=[-at,eye(nx,nx-1)]; % Transform to state-space
- b=bt(1:nu,:)';
- c=[1 zeros(1,nx-1)];
- k=bt(nu+1,:)';
- x0=zeros(nx,1);
-