%   Script BOBMAGN.M zur Herstellung von Bildern
%
%   Beobachterentwurf für die Magnetschwebebahn
%
%
%  verwendet BSPMAGN.M, EPSBILD.M
%
% J. Lunze
% 16.8.1996
% für 2. Auflage: 16.12.2001
% für 3. Auflage: 25.3.2004
% für 5. Auflage: 18.10.2007
% für 7. Auflage 31.3.2012
% für 10. Auflage: 12.9.2019
%
%
clear
close all
Bspmagn;

%%  Zustandsrückführung entsprechend ZRFMAGN.M
%   Berechnung der Eigenwerte des Regelkreises mit ZRF
%
%
figure(1);
sigmazrf=eig(A);
sigmazrf(3)=-5;           % Dieselben Eigenwertvorgaben wie in ZRFMAGN.M
K=place(A, B, sigmazrf);
x0= [5; 0; 0; 0; 0];                % Anfangsauslenkung: 5 mm
xb0=[0; 0; 0; 0; 0];
TransrapidZRF=ss(A-B*K, B, [1 0 0 0 0], D);
P=pzmap(TransrapidZRF);
for k=1:length(P)
    plot(real(P(:)), imag(P(:)), 'bx');
    hold on;
end
plot([-40 40], [0 0], 'k:', [0 0],[-40 40],'k:');
latextitle('Eigenwerte des Regelkreises mit ZRF');
axis([-40 20 -30 30]);
axis('square');
xticks([-40 -20 0 20]);
yticks([-20 0 20]);
latexxlabel('Re');
latexylabel('Im');
rotateY;
hold off;


%%  Beobachterentwurf
%
%
figure(2);
%
% Eigenbewegung des Regelkreises mit ZRF
subplot(6,1,[1,2]);
Te=0.8;
T=[0:0.001:Te];
[X1, T1, X]=initial(TransrapidZRF, x0, T);
plot(T, X1, 'b--', [0 Te], [0 0], 'k:');
xleer;
latexylabel('$$x_1$$ in mm');
rotateY;
yticks([0 4]);
latextitle('Eigenbewegungen der geregelten Magnetschwebebahn');
axis([0 Te -5 6]);                    % Massstab wie in ZRFMAGN
yticks([-4 0 4]);
hold on;
subplot(6,1,[3,4]);
X2=X(:,2);
plot(T, X2, 'b--', [0 Te], [0 0], 'k:');
xleer;
latexylabel('$$x_2$$ in mm');
rotateY;
axis([0 Te -0.2 1.7]);
yticks([0 1.5]);
hold on;
subplot(6,1,[5,6]);
MagnetbahnU=ss(A-B*K, B, K, 0);
[U, T, X]=initial(MagnetbahnU, x0, T);
plot(T, U, 'b--', [0 Te], [0 0], 'k:');
latexxlabel('$$t$$ in s');
latexylabel('$$u$$ in V');
rotateY;
axis([0  Te -10000 30000]);
yticks([0 20000]);
xticks([0 0.2 0.4 0.6 0.8]);
hold on;



%%    Eigenbewegung des Regelkreises mit
%     Zustandsrückührung und Beobachter
%
%
%  Beobachter
sigma=[-13 -15 -17 -18 -20];
Lt= place(A', C', sigma);
L=Lt';
Ag=[A      -B*K;
    L*C  A-L*C-B*K];
Bg=zeros(2*n,1);
Cg=[1 0 0 0 0 0 0 0 0 0;
    0 0 0 0 1 0 0 0 0 0];
Dg=zeros(2,1);
x0g=[x0; xb0];
subplot(6,1,[1,2]);
Regelkreismagn1=ss(Ag, Bg, Cg(1,:), 0);
[X1b, T, Xb]=initial(Regelkreismagn1, x0g, T);
plot(T, X1b, 'b');
hold off;
subplot(6,1,[3,4]);
X2b=Xb(:,2);
plot(T, X2b, 'b');
hold off;
subplot(6,1,[5,6]);
Regelkreismagn3=ss(Ag, Bg, [K zeros(1,n)], 0);
[Ub, T, Xb]=initial(Regelkreismagn3, x0g, T);
plot(T, Ub, 'b');
hold off;



%%    Eigenwerte des mit Beobachter geregelten Systems
%
%
figure(3)
TransrapidR=ss(Ag, Bg, Cg, zeros(2,1));
P=pzmap(TransrapidR);
for k=1:length(P)
    plot(real(P(:)), imag(P(:)), 'bx');
    hold on;
end
plot([-40 40], [0 0], 'k:', [0 0],[-40 40],'k:');
latextitle('Eigenwerte der geregelten Magnetschwebebahn');
axis([-40 20 -30 30]);
axis('square');
xticks([-40 -20 0 20]);
yticks([-20 0 20]);
latexxlabel('Re');
latexylabel('Im');
rotateY;
hold off;


%% Beobachterentwurf mit veränderten Eigenwerten
%
%
figure(4);
sigma=1.2*[-13 -15 -17 -18 -20];
Lt= place(A', C', sigma);
L=Lt';
Ag=[A      -B*K;
    L*C  A-L*C-B*K];
subplot(6,1,[1,2]);
Regelkreismagn1=ss(Ag, Bg, Cg(1,:), 0);
[X1b, T, Xb]=initial(Regelkreismagn1, x0g, T);
plot(T, X1, 'b--', T, X1b, 'b', [0, Te], [0 0], 'k:');
latextitle('Magnetschwebebahn mit ver\"andertem Beobachter');
xleer;
latexylabel('$$x_1$$ in mm');
rotateY;
axis([0 0.4 -5 6]);
yticks([-4 0 4]);
%
subplot(6,1,[3,4]);
plot(T, X2, 'b--', T, Xb(:,2), 'b', [0, Te], [0 0], 'k:');
axis([0 Te -0.2 1.7]);
yticks([0 1.5]);
xleer;
latexylabel('$$x_2$$ in mm');
rotateY;
%
subplot(6,1,[5,6]);
Regelkreismagn3=ss(Ag, Bg, [K zeros(1,n)], 0);
[Ub, T, X]=initial(Regelkreismagn3, x0g, T);
plot(T, U, 'b--', T, Ub, 'b', [0, Te], [0 0], 'k:');
latexylabel('$$u$$ in V');
rotateY;
latexxlabel('$$t$$ in s');
axis([0  Te -10000 30000]);
yticks([0 20000]);
xticks([0 0.2 0.4 0.6 0.8]);


%%    Eigenwerte des mit Beobachter geregelten Systems
%
%
figure(5)
TransrapidB=ss(Ag, Bg, Cg, zeros(2,1));
P=pzmap(TransrapidB);
for k=1:length(P)
    plot(real(P(:)), imag(P(:)), 'bx');
    hold on;
end
plot([-40 40], [0 0], 'k:', [0 0],[-40 40],'k:');
latextitle('Eigenwerte der geregelten Magnetschwebebahn');
axis([-40 20 -30 30]);
axis('square');
xticks([-40 -20 0 20]);
yticks([-20 0 20]);
latexxlabel('Re');
latexylabel('Im');
rotateY;
hold off;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%  Beobachter mit zwei Messgrößen
%
figure(6)
Cneu=[1 0 0 0 0;
      0 1 0 0 0];
sigma=3*[-13 -15 -17 -18 -20];
Ltneu= place(A', Cneu', sigma);
Lneu=Ltneu';
Ag=[A          -B*K;
    Lneu*Cneu  A-Lneu*Cneu-B*K];
subplot(6,1,[1,2]);
Regelkreismagn4=ss(Ag, Bg, Cg(1,:), 0);
[X1b, T, Xb]=initial(Regelkreismagn4, x0g, T);
plot(T, X1, 'b--', T, X1b, 'b', [0, Te], [0 0], 'k:');
latextitle('Magnetschwebebahn mit zwei Messgr\"ossen');
xleer;
latexylabel('$$x_1$$ in mm');
rotateY;
axis([0 0.4 -5 6]);
yticks([-4 0 4]);
%
subplot(6,1,[3,4]);
plot(T, X2, 'b--', T, Xb(:,2), 'b', [0, Te], [0 0], 'k:');
axis([0 Te -0.2 1.7]);
yticks([0 1.5]);
xleer;
latexylabel('$$x_2$$ in mm');
rotateY;
%
subplot(6,1,[5,6]);
Regelkreismagn5=ss(Ag, Bg, [K zeros(1,n)], 0);
[Ub, T, X]=initial(Regelkreismagn5, x0g, T);
plot(T, U, 'b--', T, Ub, 'b', [0, Te], [0 0], 'k:');
latexylabel('$$u$$ in V');
rotateY;
latexxlabel('$$t$$ in s');
axis([0  Te -10000 30000]);
yticks([0 20000]);
xticks([0 0.2 0.4 0.6 0.8]);

%%   Ausgabe der Bilder als .eps-Dateien
%
Epsbildc15('bobmagn');
