%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Uebung 3 - Regelungstechnik
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%% Aufgabe 3.9:
%Punkt 1
%Reset:
clear all
close all
clc

num = [1.5];
den = [0.0011 0.0315 1];

G = tf(num, den)
TP1 = 1;
TPD = 10;
Tre = 1*10^(-6);        %Tre << 1 (lt. angabe), 
                        %lt. Wiki muss Tre <= 0.05*T1 bzw. 0.05*T2 sein.
                        %Da es sich dabei um die Parasitaere Zeitkonst.
                        %handelt. (Kommt vom D-Anteil, ist notwendig, um
                        %den Regler realisieren zu koennen. Ideal waere
                        %Tre=0.) -> fuehrt zu ueberschwingung und
                        %schlechterer daempfung
num = [TP1*TPD TP1+TPD 1];
den = [Tre 1 0];
R = tf(num, den)

figure
bode(G)
grid on
hold on
bode(R)
bode(G*R)
legend('Strecke G','Regler R', 'G*R')
title('Bode-Diagramm der Strecke gegeben lt. Angabe')

%% Zeichnen der Bode-Plots von P, I und DT1
VP=10;
VI=10;
VD=10;
TR=10^-4;
T1=1;
GP = tf([VP],[1])   %Uebertragungsfunktion vom P-Glied
GI = tf([VI],[1 0])   %Uebertragungsfunktion vom I-Glied
GPI= tf([VP*VI],[1 0]) %Uebertragungsfunktion vom PI-Glied
GDT1= tf([VD],[TR 1]) %Uebertragungsfunktion vom PI-Glied
GPDT1= tf([VD*VP*T1 VD*VP],[TR 1]) %Uebertragungsfunktion vom PI-Glied
figure
bode(GP)
hold on
grid on
bode(GI)
bode(GDT1)
bode(GPI)
bode(GPDT1)
legend('GP', 'GI','GDT1','GPI','GPDT1')
title('Bode-Diagramm von Uebertragungsgliedern')

figure
bode(GP*G)
hold on
grid on
bode(GI*G)
bode(GDT1*G)
bode(GPI*G)
bode(GPDT1*G)
legend('LP', 'LI','LDT1','LPI','LPDT1')
title('Bode-Diagramm des offenen Kreises von Regelungen')
%% Aufgabe 3.9:
%Punkt 2
clear all
close all
clc
einf = 0;           %bleibende Regelabweichung: e_{inf}=0
ueb = 15;           %Ueberschwingen: ue<=15%
tr = 22*10^(-3);    %Anstiegszeit: 22ms
%tr = 20*10^(-3);    %Anstiegszeit: 22ms

wc = 1.5/tr             %Durchtrittsfreq: Beziehung lt. Skriptum 5.2
phi = degtorad(70-ueb)  %Beziehung lt. Skriptum 5.3

%in die Form bringen: R(s)=VPID*(1+s*TP1)(1+s*TPD)/(s*(1+s*Tre))
%Wobei der Nenner den Realisierungsterm des Differenzierers enthaelt.

num = [1.5];
den = [0.0011 0.0315 1];
G = tf(num, den)
s = tf('s');

%1. Schritt:
Tre = 1*10^(-3);        %Tre << 1 (lt. angabe), 
                        %lt. Wiki muss Tre <= 0.05*T1 bzw. 0.05*T2 sein.
                        %Da es sich dabei um die Parasitaere Zeitkonst.
                        %handelt. (Kommt vom D-Anteil, ist notwendig, um
                        %den Regler realisieren zu koennen. Ideal waere
                        %Tre=0.) -> fuehrt zu ueberschwingung und
                        %schlechterer daempfung
R1 = 1/(s*(1+s*Tre))
L1 = R1*G
zpk(L1)

%Step 2: TPI berechnen, aus (arctan(wc*TPI)=adjustpahse. (Skr. 5.16)
%An der Durchtrittsfrequenz muss die Phase somit um adjustphase angepasst
%werden.
adjustphase = degtorad(-180) - angle(evalfr(L1, j*wc)) + phi
%Einfuehren von einer Nullstelle, die die Phase um die Haelfte der
%benoetigten Phasenerhoehung erhoeht:
%TPI=0.025                      %adjustphase an TPI und TPD verteilen
TPI=tan(adjustphase/2)/wc
R12=(1+s*TPI)/(s*(1+s*Tre));
L12 = R12*G;

%TPD=tan(adjustphase -atan(wc*TPI))/wc
%Einfuehren der selben Nullstelle, die die Phase wieder um die Haelfte der
%benoetigten Phasenerhoehung erhoeht:
TPD=tan(adjustphase/2)/wc
R2=(1+s*TPI)*(1+s*TPD)/(s*(1+s*Tre));
L2 = R2*G;

%Step 3: V berechnen (Phase bleibt nach diesem Schritt gleich)
V = 1/abs(evalfr(L2, j*wc))
R3=V*(1+s*TPI)*(1+s*TPD)/(s*(1+s*Tre));
L3 = R3*G;

Try = minreal(L3/(1+L3))
Tdy = G/(1+L3)

figure
step(Try)
hold on
step(Tdy)
legend('Try - Fuehrungsuebertragungsfunktion','Tdy - Stoerungsuebertragungsfunktion') 
title('Sprungantwort')

%plot
figure
bode(G)
grid on
hold on
bode(L1)
bode(L12)
bode(L2)
bode(L3)
bode(Try)
plot(wc,0,'*')
title('Regelkreis: Schritt für Schritt')
legend('Gsys', 'L1', 'L12', 'L2', 'L3', 'Try')
%% Aufgabe 3.10
%Ergebnisse: 
%%%%%%%%%%%%%%%%%%
%Erste Beobachtung: Rauschen aus, Sollwertbeschraenkung aus:
%Waehrend zwischen den werten Tre=10^-4 und 10^-6 kaum ein Unterschied ist,
%unterscheiden sich die Ergebnisse bei Tre=10^-2 bzw. Tre=10^-1 davon sehr
%stark:
%Je kleiner das Tre gewaehlt wird, desto kuerzer wird der Peak der
%Stellgroesse u zum Zeitpunkt 0.1 (der Zeitpunkt, an dem der Sprung 
%auftritt).
%Jedoch kommt es bei diesen Zeitpunkten zum groessten Ueberschwingen der
%Ausgangsgroesse y.
%Naemlich bis zu 1.15. Dafuer wird jedoch auch am schnellsten die
%Regelgroesse erreicht.
%Mit Tre=10^-1 wird anfangs sogar in die entgegengesetzte Richtung 
%ausgeregelt. 

%%%%%%%%%%%%%%%%%%
%Zweite Beobachtung: Rauschen aus, Sollwertbeschraenkung ein:
%Bei dieser Simulation unterscheiden sich auch die Ergebnisse von Tre=10^-4
%und 10^-6. Wie erwartet fuehrt eine Sollwertbeschraenkung zu einer 
%Limitierung der Auslenkung der Stellgroesse u bei Tre>10^-4.
%Damit einher geht auch eine Verbreiterung des Peaks auf der Stellgroesse
%u.
%Weiters wird dadurch die Ausgangsgroesse y etwas verzoegert. Was eher der
%realtitaet entspricht, denn ein System ohne Sollwertbeschraenkung ist sehr
%schwer zu realisieren.
%Ein weiterer Unterschied betrifft die Stellgroesse u bei Tre=10^-6, denn
%dort regelt diese staendig hin und her, was ggf. zu Schaden fuehren kann,
%wenn das System nicht traege genug ist.
%Bei Tre=10^-2 aendert sich jedoch die Stellgroesse u nicht so drastisch,
%wie bei Tre>10^4.

%%%%%%%%%%%%%%%%%%
%Dritte Beobachtung: Rauschen ein:
%Im Grunde gilt hier das selbe fuer die Sollwertbeschraenkung wie vorher,
%jedoch fuehrt das Rauschen zu einem stetigen aendern der Stellgroesse u,
%wenn Tre sehr klein ist. 
%Waehrend sich dieser Effekt bei kleineren Tre immer weiter reduziert.