function [AM,t,vwn,vxn]=guete(t,vw,vx,vy,vz)
%GUETE    Gütekenngrößen der Übergangsfktn nach Regelkreissim. mit SIMULINK
%         [AM(,t,vwn,vxn)]=guete(t,vw,vx,vy,vz)
% Eingänge:
%   t       - Zeit                  nicht normiert (Spaltenvektor)
%   vw,vx   - Soll-  bzw. Istwert     "      "           "
%   vy,vz   - Stell- bzw. Störgröße   "      "           "
% Ausgänge:
%   AM      - Auswertematrix=[hun t(hun) tar hue t(hue) taus;
%                             RF1 RF2    RF3 RF4 RF5    0    ]
%   hun,hue       - Unter- bzw. Überschwingweite
%   t(hun),t(hue) - Zeitpunkt des Auftretens von hun bzw.hue
%   tar,taus      - An- bzw. Ausregelzeit
%   RF1,RF2       - Quadratische bzw. Betragslineare Abtast-Regelfläche
%   RF3           - Erweitert quadratische Abtast-Regelfläche
%                   (gewichtetes Stellgrößenquadrat)
%   RF4,RF5       - ITAE bzw. IT2AE (quadratische Zeitwichtung) Abtast-RF
%   (,t,vwn,vxn)  - wahlweise Ausgänge: normierte Vektoren t,vw,vx

%  SCHLÜSSELWORTE: Regelgüte, Anregelzeit, Ausregelzeit, Überschwingweite,
%                  Integralkriterien, SIMULINK, Toleranzband

%  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

t=t'; vw=vw'; vx=vx'; vy=vy'; vz=vz';
if nargin~=5 error('Falsche Anzahl Eingangsargumente'); end;
[i1,j1]=size(t);  [i2,j2]=size(vw);
[i3,j3]=size(vx); [i4,j4]=size(vy);
[i5,j5]=size(vz);
if (i1~=1)|(i2~=1)|(i3~=1)|(i4~=1)|(i5~=1)|((j1+j2+j3+j4)/4~=j5)
   error('Fehler in Eingangsgrößen erkannt'); end
i=1; while vy(i)==vy(i+1) i=i+1; end
     T=t(i+1); t=t/T; Tk=i; [i,an]=size(vy); md=(an-1)/Tk;
   Tv=0;
   while ((vw(Tv+1)==0)&(vz(Tv+1)==0)&(Tv<an)) Tv=Tv+1; end; bte=0;
   if vz(Tv+1)~=0 bfu=0; Tsi=Tk; prwe=vz(Tv+1);
                  if ((sum(vw)~=0)|((sum(vz)/(an-Tv))~=vz(Tv+1)))
                     bte=1; end
   else           bfu=1; Tsi=0;  prwe=vw(Tv+1);
                  if ((sum(vz)~=0)|((sum(vw)/(an-Tv))~=vw(Tv+1)))
                     bte=1; end
   end; Tv=Tv/Tk;
  if bte disp('Nur für einmalige sprungförmige Änderung vorbereitet !');
  else
   ans=input('Toleranzband: Standard=1%   ja(bel.)/nein(1): ');
   if isempty(ans)|ans~=1 toba=1;
   else i=0;
        while i==0 toba=input('Eingabe Toleranzband (in %) = ');
              if  ((toba>10)|(toba<0)) disp('Unzulässiger Wert');
              else i=1; end; end
   end;
   disp('Auswahl eines Integralkriteriums - Abtast-Regelflächen (0=alle,ET=nein): ');
   brf=input('Quadratisch(1),Betragslinear(2),Erweitert quadratisch(3),ITAE(4),IT2AE(5): ');
   if isempty(brf) brf=6; end
   if ((brf<0)|(brf>5)|(rem(brf,1)~=0)) error('Falsche Eingabe'); end
   if ((brf==5)|(brf==0))
      ans=input('Stellgrößenwichtung: Standard=0.1   ja(bel.)/nein(1): ');
      if isempty(ans)|ans~=1 lampda=0.1;
      else lampda=input('Eingabe Stellgrößenwichtung = ');
           if ((lampda<0)|(lampda>1)) error('Falsche Eingabe'); end;
      end; end
   disp('Im gewählten Berechnungsintervall ergeben sich folgende Werte:');
   vxn=vx*100/prwe; vwn=vw*100/prwe;
   [hun,t1]=min(vxn); t1=(t(t1)-Tv);
   if abs(hun)<0.01 hun=0; t1=0; disp('Die Unterschwingweite beträgt 0 %');
   else disp('Unterschwingweite in % zum Zeitpunkt t/Abtastzeit:');
    disp([hun t1]); end
   [hue,t2]=max(vxn); t2=(t(t2)-Tv);
   if bfu hue=hue-100; vgv=vwn; pep=1+toba/100; mep=1-toba/100;
   else                vgv=vz*100/prwe; pep=toba/100;   mep=-pep; end
   if hue<0.01 hue=0; t2=0; disp('Die Überschwingweite beträgt 0 %');
   else disp('Überschwingweite  in % zum Zeitpunkt t/Abtastzeit:');
     disp([hue t2]); end
   i=Tv*Tk+Tsi; j=an+1;
   while i<an
         if  (vxn(i+1)<=(vgv(i+1)*mep)) i=i+1; else j=i+1; i=an; end; end
   if j==an+1 tar=inf; else tar=(t(j)-Tv); end
   disp('Anregelzeit/Abtastzeit = '); disp(tar);
   i=0; j=an;
   while i<an
         if ((vxn(an-i)<=(vgv(an-i)*pep))&(vxn(an-i)>=(vgv(an-i)*mep)))
         i=i+1; else j=an-i+1; i=an; end; end
   if    j==an+1; taus=inf; elseif j==an taus=0; else taus=(t(j)-Tv); end
   disp('Ausregelzeit/Abtastzeit = '); disp(taus);
   AM(1)=hun; AM(2)=t1; AM(3)=tar; AM(4)=hue; AM(5)=t2; AM(6)=taus;
   if brf~=6
   RF1=0; RF2=0; RF3=0; RF4=0; RF5=0; vy=vy/prwe; vxw=(vw-vx)/prwe;
if (brf==2)|(brf==0)
   for i=(1+Tv*Tk):Tk:an RF2=RF2+abs(vxw(i)); end; end
if (brf==1)|(brf==0)
   for i=(1+Tv*Tk):Tk:an RF1=RF1+(vxw(i))^2; end; end
if (brf==4)|(brf==0)
   for i=(1+Tv*Tk):Tk:an RF4=RF4+(t(i)-Tv)*abs(vxw(i)); end; RF4=RF4*T; end
if (brf==5)|(brf==0)
   for i=(1+Tv*Tk):Tk:an RF5=RF5+(t(i)-Tv)^2*abs(vxw(i)); end; RF5=RF5*T^2; end
if (brf==3)|(brf==0)
   for i=(1+Tv*Tk):Tk:an RF3=RF3+((vxw(i))^2)+lampda*((vy(i)-vy(an))^2); end; end
   vRF=[RF1 RF2 RF3 RF4 RF5]*T;
   if brf==0 disp('Für die Regelflächen wurde berechnet:');
      format short e; disp(vRF); format; brf=5;
   else disp('Die Regelfläche beträgt:'); disp(vRF(brf)); end
   for i=1:brf AM(2,i)=vRF(i); end
   end
  end
vxn=vxn*sign(prwe); vwn=vwn*sign(prwe);
