%   Script GLEICHGEW.M zur Herstellung von Bildern
%
%   Interpretation des Gleichgewichtstheorems
%
% J. Lunze
% für 4. Auflage: 22.10.2003
% für 5. Auflage: 18.4.2005
% für 7. Auflage: 28.4.2008
% für 8. Auflage: 2.2.2010
% für 9. Auflage: 13.2.2012
% für 10. Auflage: 27.1.2014
% für 12. Auflage: 03.07.2019
%
%   
clear all
close all
%
%   Regelstrecke = Fahrzeug
ks=1;
d=0.2;
T=0.1;
zg=[ks];
ng=[T*T 2*d*T 1];
Strecke=tf(zg, ng);
[GStrecke, Phase, Frequ]=bode(Strecke);

%%   Störverhalten bei P-Regelung
%
figure(1);
kP=3;
Tquer=T/(sqrt(1+kP*ks));
dquer=d/(sqrt(1+kP*ks));
zgd=[ks/(1+kP*ks)];
ngd=[Tquer*Tquer 2*dquer*Tquer 1];
Stoerverh=tf(zgd, ngd);
[GStoer, Phase]=bode(Stoerverh, Frequ);
subplot(2,1,1)
semilogx(Frequ, 20*log10(GStrecke(:)), 'b--', Frequ, 20*log10(GStoer(:)), 'b');
hold on
G4=bode(zgd, ngd, 4.5);
G20=bode(zgd, ngd, 20);
G4o=bode(zg, ng, 4.5);
G20o=bode(zg, ng, 20);
plot([4.5, 4.5], [-50 20*log10(G4)],'k:', [4.5, 4.5], [20*log10(G4o), 20], 'k:');
plot([20 20], [-50 20*log10(G20o)], 'k:', [20, 20], [20*log(G20), 20], 'k:');
axis([1 100 -40 20]);
xticks([1 10 100]);
yticks([-40 -20 0 20]);
latextitle('Frequenzg\"ange des ungeregelten und geregelten Fahrzeugs');
latexylabel('$$|G_{\rm d}|$$ in dB');
rotateY;
latexxlabel('$$\omega$$ in rad/s');
plot(4.5, 20*log10(G4), 'bo');
plot(20, 20*log10(G20), 'bo');
plot(4.5, 20*log10(G4o), 'bx');
plot(20, 20*log10(G20o), 'bx');
latextext(4.25, (2*20*log10(G4o)+20*log10(G4))/3, '$$\downarrow$$');
latextext(19, (2*20*log10(G20o)+20*log10(G20))/3, '$$\uparrow$$');
 

%%  Verhalten bei niedriger bzw. hoher Frequenz
%   (kleiner bzw. großer Geschwindigkeit)
% 
figure(2)
subplot(2,1,1);
Tmax=4;
omega=4.5;
T=0:0.02/omega:Tmax;
U=10*sin(omega*T);
Y=lsim(Strecke, U, T);
Yd=lsim(Stoerverh, U, T);
plot(T,Y,'b--', T, Yd, 'b', [0 0],[-10 10],'k:', [0 Tmax],[0 0],'k:')
axis([0 Tmax -15 15]);
yticks([-15 0 15]);
xleer;
latexylabel('$$y$$ in cm');
rotateY;
%latextitle('Verhalten des Fahrzeugs bei sinusf\"ormiger St\"orung');
latextext(0.6*Tmax, 19, 'langsame Fahrt');
%
subplot(2,1,2);
omega=20;
T=0:0.02/omega:Tmax;
U=10*sin(omega*T);
Y2=lsim(Strecke, U, T);
Y2d=lsim(Stoerverh, U, T);
plot(T,Y2,'b--', T, Y2d, 'b', [0 0],[-10 10],'k:', [0 Tmax],[0 0],'k:')
axis([0 Tmax -15 15]);
xticks([0 1 2 3 4 5]);
yticks([-15 0 15]);
latexxlabel('$$t$$ in s');
latexylabel('$$y$$ in cm');
rotateY;
latextext(0.6*Tmax, 19, 'schnelle Fahrt');
 

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%    Beispiel PT_1-Glied und I-Regler
%
figure(3)
tmax=20;
T=[0:0.1:tmax];
T1=1;
TI=5;
Strecke=tf(1,[T1 1]);
Regler=tf(1, [TI, 0]);
offeneKette=series(Strecke, Regler);
RegelkreisFuehr=feedback(offeneKette,1);
RegelkreisStoer=feedback(1, offeneKette);
Yw=step(RegelkreisFuehr, T);
%
subplot(2,1,1);
plot(T, Yw, 'b', [0 tmax],[1 1],'k:');
axis([0 tmax 0 1.5]);
xticks([0 5 10 15 20]);
yticks([0 0.5 1 1.5]);
latexylabel('$$h_{\rm w}$$');
rotateY;
latexxlabel('$$t$$ in s');
hold on
%
figure(4)
D=[ones(20,1); zeros(length(T)-20, 1)];
subplot(2,1,1)
plot(T, D, 'b', [0 tmax],[0 0],'k:');
latextitle('Verhalten bei impulsf\"ormiger St\"orung');
xleer;
latexylabel('$$d$$');
rotateY;
axis([0 tmax -0.1 1.1]);
yticks([0 0.5 1]);
hold on
Yd=lsim(RegelkreisStoer, D, T);
subplot(2,1,2);
plot(T, Yd, 'b', [0 tmax],[0 0],'k:');
axis([0 tmax -1.2 1.2]);
xticks([0 5 10 15 20]);
yticks([-1 0 1]);
latexxlabel('$$t$$ in s');
latexylabel('$$y$$');
rotateY;
hold on

figure(5)
subplot(2,1,1)
wmax=2.5;
Frequ=[0.001:0.01:wmax];
[Betrag, Phase]=bode(RegelkreisStoer, Frequ);
plot(Frequ, 20*log10(Betrag(:)), 'b', [0 wmax],[0 0],'k:');
axis([0 wmax -40 10]);
yticks([-40 -20 0]);
xleer;
latexylabel('$$|R|$$ in dB');
rotateY;
hold on
subplot(2,1,2)
semilogx(Frequ, 20*log10(Betrag(:)), 'b');
hold on
plot([0 wmax],[0 0],'k:');
axis([0.002 wmax -40 10]);
latexxlabel('$$\omega$$ in rad/s');
xticks([0.01 1]);
yticks([-40 -20 0]);
latexylabel('$$|R|$$ in dB');
rotateY;

%
%   zweite Reglereinstellung
TI=1;
Strecke=tf(1,[T1 1]);
Regler=tf(1, [TI, 0]);
offeneKette2=series(Strecke, Regler);
RegelkreisFuehr2=feedback(offeneKette2,1);
RegelkreisStoer2=feedback(1, offeneKette2);
Yw=step(RegelkreisFuehr2, T);
figure(3)
subplot(2,1,1);
plot(T, Yw,'b--');
hold off
%
figure(4)
subplot(2,1,2);
Yd=lsim(RegelkreisStoer2, D, T);
plot(T, Yd,'b--');
hold off
%
figure(5)
subplot(2,1,1)
[Betrag, Phase]=bode(RegelkreisStoer2, Frequ);
omega=1.2;    %  Frequenz, bei der das Störverhalten verglichen wird
[B, P]=bode(RegelkreisStoer2, omega);
plot(Frequ, 20*log10(Betrag(:)),'b--', omega, 20*log10(B), 'bo');
subplot(2,1,2)
semilogx(Frequ, 20*log10(Betrag(:)),'b--', omega, 20*log10(B), 'bo');
hold off

%%   Verhalten bei sinusförmiger Störung
%
figure(6)
Tmax=40;
T=0:0.02/omega:Tmax;
D=sin(omega*T);
subplot(6,1,[1,2])
plot(T, D, 'b', [0 Tmax],[0 0],'k:');
latextitle('Verhalten bei sinusf\"ormiger St\"orung');
xleer;
latexylabel('$$d$$');
rotateY;
axis([0 Tmax/2 -1.2 1.2]);
yticks([-1 0 1]);
%
subplot(6,1,[3,4])
Yd=lsim(RegelkreisStoer, D, T);
Yd2=lsim(RegelkreisStoer2, D, T);
plot(T, Yd, 'b', T,Yd2,'b--',  [0 Tmax],[0 0],'k:')
axis([0 Tmax/2 -1.7 1.7]);
xticks([0 5 10 15 20]);
yticks([-1 0 1]);
latexxlabel('$$t$$ in s');;
latexylabel('$$y$$');
rotateY;
 

%%  Bodediagramm der offenen Kette beider Regelkreise
%
figure(7)
subplot(2,1,1)
Frequ=logspace(-3, 2, 1000);
[Betrag, Phase]=bode(offeneKette, Frequ);
semilogx(Frequ, 20*log10(Betrag(:)), 'b');
hold on
axis([0.002 10 -40 50]);
xticks([0.01 0.1 1 10]);
yticks([-40 0 40]);
[Betrag, Phase]=bode(offeneKette2, Frequ);
semilogx(Frequ, 20*log10(Betrag(:)), 'b--');
semilogx([0.001 100],[0 0], 'k:', [omega omega],[50 -50],'k:');
latexxlabel('$$\omega$$ in rad/s');
latexylabel('$$|G_0|$$ in dB');
rotateY;
latextitle('Amplitudengang der offenen Kette');
latextext(omega, -55, '$$\omega=1,\!2$$');




%%     Bilder auf .EPS- und .PS-Dateien
%
Epsbildc15('gleichgew');
