%   Script FKLFLUG.M zur Herstellung von Bildern
%
%   Entwurf eines Flugreglers im Bodediagramm
%   (Lösung der Übungsaufgabe)
%
% J. Lunze
% 21.2.1996
% für 2. Auflage: 1.11.98
% für 4. Auflage: 18.9.2003
% für 5. Auflage: 18.4.2005
% für 6. Auflage: 4.12.2006
% für 7. Auflage: 28.4.2008
% für 8. Auflage: 3.1.2010
% für 9. Auflage: 10.4.2012
% für 10. Auflage: 27.1.2014
% für 12. Auflage: 12.09.2019
%
%   
clear
close all
%%   Entwurf einer Flugregelung
%
%    Analyse der Regelstrecke
%
%   
figure(1);
zs=2;
ns=[1 0 0];
Flugzeug=tf(zs, ns);
W=logspace(-1, 2, 200);
[Betrag, Phase]=bode(Flugzeug, W);
subplot(2, 1, 1);
semilogx(W, 20*log10(Betrag(:)), 'b');
latextitle('Flugzeug als Regelstrecke');
xleer
latexylabel('$$|G|$$ in dB');
rotateY;
yticks([-50 0 50]);
axis([0.1 100 -70 50]);
grid('on');
subplot(2, 1, 2);
semilogx(W, Phase(:), 'b');       % bei früheren MATLAB-Versionen: Phase(:)-360
latexxlabel('$$\omega$$ in rad/s');
latexylabel('$$\phi$$ in Grad');
rotateY;
subplot(2,1,2)
axis([0.1 100 -270 -90]);
xticks([0.1 1 10 100]);
yticks([-360 -270 -180 -90 0]);
grid('on');


%%    Verwendung eines phasenanhebenden Korrekturgliedes
%
%   
figure(2);
zr=2.5*[1 0.7];
nr=[1 4];
Regler=tf(zr, nr);
[BetragRegler, PhaseRegler]=bode(Regler, W);
subplot(2,1,1);
semilogx(W, 20*log10(BetragRegler(:)), 'b');
latextitle('Flugregler (phasenanhebendes Korrekturglied)');
xleer;
latexylabel('$$|K|$$ in dB');
rotateY;
axis([0.1 100 -10 10])
yticks([-10 0 10]);
grid('on');
%
subplot(2,1,2);
semilogx(W, PhaseRegler(:), 'b');
latexxlabel('$$\omega$$ in rad/s');
latexylabel('$$\phi$$ in Grad');
xticks([0.1 1 10 100]);
rotateY;
yticks([0 45 90]);
axis([0.1 100 0 60])
xticks([0.1 1 10 100]);
yticks([0 45]);
grid('on');


%%   Bodediagramm der offenen Kette
%
figure(3);
offeneKette=series(Flugzeug, Regler);
[BetragGo, PhaseGo]=bode(offeneKette, W);
%      Vergleich mit Regelstrecke
[BetragG, PhaseG]=bode(Flugzeug, W);
subplot(2, 1, 1);
semilogx(W, 20*log10(BetragGo(:)), 'b', W, 20*log10(BetragG(:)), 'b--');
latextitle('Bodediagramm der offenen Kette');
xleer;
latexylabel('$$|G_0|$$ in dB');
rotateY;
yticks([-50 0 50]);
axis([0.1 100 -70 50]);
grid('on');
subplot(2, 1, 2);
semilogx(W, PhaseGo(:), 'b', W, PhaseG(:), 'b--');
grid('on');
latexxlabel('$$\omega$$ in rad/s');
latexylabel('$$\phi_0$$ in Grad');
xticks([0.1 1 10 100]);
rotateY;
yticks([-360 -270 -180 -90 0]);
axis([0.1 100 -270 -90]);




%%  Störverhalten des Flugregelkreises bei Eingangsstörung
%
figure(4);
subplot(6,1,[1,2])
T=0:0.05:8;
Regelkreis=feedback(Flugzeug, Regler);
[Y, T]=impulse(0.1*Regelkreis, T);
plot(T, Y, 'b', [-1 0 0],[0 0 Y(1,1)]);
latextitle('St\"orverhalten des Flugregelkreises');
xleer;
latexylabel('$$h_{\rm d}$$ in rad');
rotateY;
yticks([0 0.1]);
%grid('on');
axis([-1 8 -0.05 0.15]);
hold on;
plot([-1 10],[0 0],'k:');
%
subplot(6,1,[3,4])
RegelkreisStellgr=feedback(Regler, Flugzeug);
[U, T]=impulse(0.1*RegelkreisStellgr, T);
plot(T, U, 'b', [-1 0 0],[0 0 U(1,1)], 'b');
latexxlabel('$$t$$ in s');
latexylabel('$$u$$ in rad');
rotateY;
%grid('on');
axis([-1 8 -1 0.3]);
xticks([0 2 4 6 8]);
yticks([-1 0]);
hold on;
plot([0 10],[0 0],'k:');


%%  Berücksichtigung eines zusätzlichen Meßgliedes
%
figure(5);
zs=2;
ns=[0.05 1 0 0];
FlugzeugMessglied=tf(zs, ns);
offeneKette2=series(FlugzeugMessglied, Regler);
[Betragneu, Phaseneu]=bode(offeneKette2, W);
subplot(2, 1, 1);
latextitle('Ber\"ucksichtigung des Messgliedes');
semilogx(W, 20*log10(BetragGo(:)), 'b--', W, 20*log10(Betragneu(:)), 'b');
xleer;
latexylabel('$$|G_0|$$ in dB');
rotateY;
yticks([-50 0 50]);
axis([0.1 100 -70 50]);
grid('on');
subplot(2, 1, 2);
semilogx(W, PhaseGo(:), 'b--', W, Phaseneu(:), 'b');
grid('on');
latexxlabel('$$\omega$$ in rad/s');
latexylabel('$$\phi_0$$ in Grad');
xticks([0.1 1 10 100]);
rotateY;
yticks([-360 -270 -180 -90 0]);
axis([0.1 100 -270 -90]);


%%  Störverhalten des Flugregelkreises unter Berücksichtigung
%   des Messgliedes
%   
figure(4);
subplot(6,1,[1,2])
Regelkreisneu=feedback(FlugzeugMessglied, Regler);
[Y, T]=impulse(0.1*Regelkreisneu, T);
plot(T, Y,'b--');
hold off;
subplot(6,1,[3,4])
RegelkreisStellgrneu=feedback(Regler, FlugzeugMessglied);
[U, T]=impulse(0.1*RegelkreisStellgrneu, T);
plot(T, U,'b--', [-1 0 0],[0 0 U(1,1)],'b--');


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