function [A,B,C,D]=tf2ss1(num,den); % TF2SS1 : Converte una funzione di traferimento in un modello in variabili di stato % ********************************************************************************** % ## SYNTAX ## % % [A,B,C,D] = TFSS1(NUM,DEN): % Dato un sistema la cui funzione di trasferimento e' % NUM % W(s) = ----- % DEN % determina una rappresentazione in variabili di stato % % . % x = Ax + Bu % y = Cx + Du % % in forma canonica di controllo (il coefficiente di B vale 1/a_n). % % Si veda anche la TF2SS che invece determina una rappresentazione % dove la matrice A e' nella forma compagna detta "controller" % % Alessandro Giua, v1. Agosto 2004 ni=nargin; no=nargout; if (ni ~= 2), disp('*********************************************************') disp('Errore: controllare il numero degli argomenti in ingresso') disp('*********************************************************') disp(' ') return end if (no ~= 4), disp('*******************************************************') disp('Errore: controllare il numero degli argomenti in uscita') disp('*******************************************************') disp(' ') return end n=length(den)-1; m=length(num)-1; if (den(1)==0), disp('**********************************************************************') disp('Errore: il coefficiente di grado maggiore in DEN deve essere non nullo') disp('**********************************************************************') disp(' ') return end if (m>n), disp('**********************************') disp('Errore: il sistema non e'' proprio') disp('**********************************') disp(' ') return end if (n==0), disp('Il sistema e'' istantaneo: le matrici A, B e C non sono definite') A=[]; B=[]; C=[]; D=num(1)/den(1); return end for i=1:n, alpha(i)=-den(n+2-i)/den(1); end A=[zeros(n-1,1),eye(n-1); alpha]; if (m==0), B=[zeros(n-1,1); num(1)/den(1)]; C=[1 zeros(1,n-1)]; D=0; end if (m>0), B=[zeros(n-1,1); 1/den(1)]; if (m==n), D=num(1)/den(1); else D=0; end C=zeros(1,n); for i=1:min(n,m+1), C(i)=num(m+2-i)-D*den(m+2-i); end end return