% Skript beobachter_2.m, in dem ein Servosystem mit 
% Beobachter und Polplatzierung untersucht wird. 
% Arbeitet mit Modell beobachter21.mdl
clear;
% -------- Parameter des Systems
m1 = 10; m2 = 10; m3 = 5;
k1 = 10;   k2 = 1;    k3 = 10;
c1 = 0.5;  c2 = 0.5; 
n = 6;     % Ordnung des Systems
A = [0 1 0 0 0 0;
    -(k1+k3)/m1 -c1/m1 k1/m1 c1/m1 k3/m1 0;
    0 0 0 1 0 0;
    k1/m2 c1/m2 -(k1+k2)/m2 -(c1+c2)/m2 k2/m2 c2/m2;
    0 0 0 0 0 1;
    k3/m3 0 k2/m3 c2/m3 -(k2+k3)/m3 -c2/m3];
B = [0 1 0 0 0 0]';         C = [0 0 0 0 1 0];         D = 0;
% ------- Beobachter Entwicklung mit 6 Pole
p = [-1.25, -1.5, -2, -2.5, -1+j*0.8,...
    -1-j*0.8];                    % Gewählte Pole
Ke = (place(A',C',p))';
%x0 = [0.1,0,0.2,0,0.3,0];     % Anfangszustände des Prozesses
x0 = [0,0,0,0,0.3,0];
% ------- Polplatzierung der 7 Pole des Sevosystems
p = [-0.5, -0.6, -0.7, -0.8, -0.9, -0.5+j*0.8,...
    -0.5-j*0.8]; % Gewählte Pole
An = [A, zeros(n,1); -C,0];   Bn = [B;0];
Kn = place(An, Bn, p);
K = Kn(1:n);       ki = -Kn(n+1);
% ------- Aufruf der Simulation
Tfinal = 50;      dt = 0.01;
my_options = simset('Solver','ode45','MaxStep',dt);
sim('beobachter21', [0, Tfinal], my_options);
y = yx.signals.values(:,1);
xg = yx.signals.values(:,2:7);
t = yx.time;
figure(1);    clf;
subplot(211), plot(t, y);
  title(['Sprungantwort mit x0 = ',num2str(x0)]);
  xlabel('s');    grid on;
subplot(212), plot(t, xg);
  title('Geschätzte Zustandsvariablen x0g = 0');
  xlabel('s');    grid on;
  legend('x1g','v1g','x2g','v2g','x3g','v3g')
Q = std(y),         % Gütemass


