function [znum,zden,sdef]=trans(za,ne,T,m,kode)
%TRANS    Universelle Z-Transformation von Übertragungsfunktionen:
%                                                       G(p)=za(p)/ne(p)
%         [znum,zden(,sdef)] = trans (za,ne,T(,m,kode))
%         Erweiterung von c2d/c2dm: Berücksichtigung der Kopplung zwischen
%         Regler und Strecke (T/H) sowie der Meßmethode (A/M)
%  "trans" liefert Ausgangsvektoren gleicher Ordnung
%            za,znum:  Zähler im Laplace- bzw. z-Bereich
%            ne,zden:  Nenner im    "      "      "
%            T:        Abtastzeit
%  (,m,kode) m:        wahlweise beliebige e c h t e Zeitverschiebung
%            kode:        "     o h n e Dialog zur Vorgabe von Kopplung/Messung
%                            T/A          kode=0
%                            T/M bzw.H/A  kode=1
%                            H/M          kode=2
%            T/H:      (Ab)taster/Halteglied 0. Ordnung, Kopplung durch
%            A/M:      Augenblicks- bzw Mittelwertmessung
%
%  (,sdef)   sdef: wahlweise Verschlüsselung der eingegebenen Strecke
%                  n o t w e n d i g für Simulation mit "simu" !!!

%  SCHLÜSSELWORTE: Z-Transformation, modifizierte z-Transformation, Messung,
%                  Kopplung, Menüführung wahlweise

%  Copyright (c) 1997 Dr. Gert-Helge Geitner; TU Dresden, Fak. ET,
%                     Elektrotechnisches Institut (ETI); Mommsenstr. 13;
%                     D-01062 Dresden, Germany;
%                     Tel./Fax (0351)-463-2917/7280
%                     e-mail: geitner@eeiwzb.et.tu-dresden.de

error(nargchk(3,5,nargin));
if nargin==3 m=0; end
if m<0 error('Unzulässige Zeitverschiebung'); end

if nargin<5
   K=input('Kopplung: Halteglied-0.Ordng(bel.)/Abtaster(1) =');
     if isempty(K)|K~=1 K=0; end
   M=input('Messung:  Augenblickswert(bel.)/Mittelwert(1)  =');
     if isempty(M)|M~=1 M=0; end
   z=K&~M;  n=~K&M; kode=M+n+(~(M|n|z));
else
   if ((kode<0)|(kode>2)|(rem(kode,1)~=0)) error('Ungültige Kodierung'); end
   if      kode==0 z=1; n=0;
   elseif  kode==1 z=0; n=0;
   elseif  kode==2 z=0; n=1; end; end

[i,j1]=size(za); [i,j2]=size(ne); zas=za; nes=ne;
if ((m~=0)&z&((j2-j1)<=1))
   disp('Berechnung nicht vorgesehen !'); return; end

if z
   za=conv(za,[1 0]);
elseif n
   ne=conv(ne,[1 0]); end

[a,b,c,d]=tf2ss(za,ne);
[a,b,c,dd]=c2dt(a,b,c,T,m);
if m==0
   [znum,zden]=ss2tf(a,b,c,d,1);
else
   [znum,zden]=ss2tf(a,b,c,dd,1); end

if z
   znum=deconv(znum,[1 -1]); s=size(znum);
       if (zden(s(2)+1)==0)  zden=deconv(zden,[1 0]);
       else  znum(s(2)+1)=0; end
   znum=znum*T;
elseif n
   zden=deconv(zden,[1 -1]); s=size(zden); zden(s(2)+1)=0;
   znum=znum/T; end
sdef(1,1)=j1; for i=1:j1 sdef(1,1+i)=zas(i); end
sdef(2,1)=j2; for i=1:j2 sdef(2,1+i)=nes(i); end
sdef(3,1)=T; sdef(3,2)=m; sdef(3,3)=kode;

