Hallo,
ich muss für eine Arbeit eine Systemidentifikation durchführen.
Hierfür habe ich das System mit einem Testsignal beaufschlagt und daraus
ein Bode-Diagramm erstellt (blau).
Jetzt versuche ich, das Bode-Diagramm durch einfache Übertragungsglieder
anzunähern um das System zu identifizieren.
Dabei habe ich ein PT2-Glied, ein PT1-Glied und ein Totzeitglied
verwendet.
Hier die verwendeten Parameter:
1 | K=1; %Werte PT2-Glied
|
2 | d=0.3;
|
3 | T=0.42;
|
4 |
|
5 | K2=1; %Werte PT1-Glied
|
6 | T2=0.01;
|
7 | g2=tf([0 K2],[T2 1]);
|
8 |
|
9 | s=tf('s'); %Totzeitglied
|
10 | Tt=0.1;
|
11 | gt=exp(-s*Tt);
|
Damit schaffe ich aber nur den Phasengang anzunähern, der Amplitudengang
passt nicht. Alternativ schaffe ich es andersherum, dass der
Amplitudengang stimmt, der Phasengang aber nicht mehr.
Hat da jemand eine Idee woran das liegen könnte bzw. was ich verbessern
könnte.
Außerdem habe ich versucht mit der Methode der kleinsten Fehlerquadrate
die Koeffizienten der Übertragungsfunktion zu bestimmen.
Ich habe dazu Unterlagen aus einem HOchschulpraktikum verwendet, steige
aber nicht so ganz durch und deswegen einfach mal abgekupfert.
Hier der Code:
1 | Eingangssig = MessGr_Ausgang;
|
2 | Ausgangssig = MessGr;
|
3 |
|
4 | m=100;
|
5 | n=m;
|
6 | kmin=100;
|
7 |
|
8 |
|
9 | PHI = zeros(n,n+m); %Messwertmatrix
|
10 | for i=1:n
|
11 |
|
12 | k=kmin+i;
|
13 | phi = [flipud(-Ausgangssig(k-n:k-1)); flipud(Eingangssig(k-m:k-1))].';
|
14 | PHI(i,:) = phi;
|
15 |
|
16 | end
|
17 |
|
18 | PINV_PHI = pinv((PHI)); %Pseudoinverse
|
19 |
|
20 | theta = PINV_PHI * Ausgangssig(1:n); %Vektor mit Parameterwerten
|
21 |
|
22 | epsilon = Ausgangssig(1:n) - PHI*theta; %Schätzfehler
|
23 |
|
24 | J = epsilon'*epsilon; %Gütemaß
|
25 |
|
26 | a = theta(1:n);
|
27 | b = theta(n+1:n+m);
|
28 |
|
29 | loss = J/(Ausgangssig'*Ausgangssig);
|
30 |
|
31 |
|
32 | TEST = tf(a', b');
|
33 | bode (TEST)
|
Vielleicht kann mir da jemand weiterhelfen, wenn ich das Script so
ausführe fehlt wohl noch etwas, ich weiß aber nicht was.
Die Signale bestehen aus ca. 12000 Werten.
Vielen Dank schonmal