Verfasst am: 07.09.2011, 17:10
Titel: Frage zu ARX Modell in System Identification Toolbox
Hallo
Als Strecke ist ein dynamisches Fahrwerk eines Zuges vorhanden. Um ein Mathematisches Model des System zu erhalten muss dieses identifiziert werden. Dazu nutze ich die Matlab System Identification Toolbox.
Ich habe die ARX Methode in GUI verwendet , dazu habe ich auch "order selection [1:10 1:10 1:10]" gewählt.
Nach Estimate habe ich verschidene modelle raugesucht Z.B. arx211 arx311 u ..... .
Nun weiß ich es nicht wie man aus diesen Daten A(q) und B(q) auf die Übertragungsfunktion des modells kommt. Ich brauche nämlich nur die Übertragungsfkt. des identifiziertes Modell. Ist es überhaupt möglich dadraus dies herzuleiten, falls nein wie geht man allgemein in solchen fällen vor?
Estimated using ARX from data set eDat
Loss function 3.67481e-018 and FPE 3.67849e-018
Sampling interval: 1
GESUCHT: Übertragungsfunktion des identifiziertes Modells
wenn ihr wiesst wie das funktioniert bitte schreib euer Lösung hier.
hier wird nun eben das Zähler- und Nennerpolynom getrennt angegeben.
Du kannst ja auch mal folgenden Code testen:
Code:
TS= ....; % Abtastzeit % Y = gemessener Ausgang % U = gemessener Eingang = Testsignal dataset=iddata(Y,U,TS);
% Ordnung von Zähler na und Nenner nb der Übertragungsfunktion des Modells % nc am besten = nb wählen und nk = 1 lassen
na=4; nb=4; nc=4; nk=1;
sysid = armax(dataset,[na nb nc nk]);
Statt einem armax kannst du auch ein arx Modell verwenden. Da wird dann der Parameter nc nicht mehr benötigt. Die Übertragungsfkt. wird dir im Command Window ausgegeben.
baustamm
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 04.03.2012, 12:38
Titel: Modell
Hallo DSP
vielen Dank für deine Antwort.
Ich habe Messwert einer Sprungantwort der Strecke. Diese versuche ich zu modellieren. Die Datei ist im Anhang.
Anhang des Bodediagramms sieht man, dass es sich um ein PIT2 System handelt. Anhand dieses Wissens versuche ich, die Parameter der Strecke zu identifizieren (ich glaube das heisst GreyBoxModelling)
%meine Erste Methode, mit pm()
&klappt ganz gut aber bei genauerem hinsehen gibt es eine Abweichung
data=iddata(y,u,Ts);
G_mod1=pem(data,'P2I');
Kp=G_mod1.kp.value;
T1=G_mod1.Tp1.value;
T2=G_mod1.Tp2.value;
G1=Kp/s/(1+s*T1)/(1+s*T2);
step(G1, t) hold on
plot(t,y,'red')
%Anpassung der Parameter mit arx()
na = 3; %Ordnung Modell Nenner
nb = 1; %Ordnung Modell Zähler
nk = 0; %Totzeit
G_mod2 = arx(data,[na nb nk]);
figure;
compare(data, G_mod2);
axis([010010]);
grid on;
G2=tf(G_mod2.B, G_mod2.A)
%wenn ich nun einen Step auf G2 gebe sieht die Antwort völlig anders aus
...step(G2) ergibt etwas anderes als step(G_mod2). Die Übertragungsfkt von G_mod2 hat ein anderes Zählerpolynom. G2 wird hier dann als kontinuierliches System angegeben, was G_mod2 aber nicht ist. Evtl. mit
arbeiten, da vielleicht die Rücktransformation nicht stimmt.
Mit dem unteren Code stimmt das Modell annähernd. Allerdings gibt es eine Warnung bzgl. des Inputs und der gewählten Modellordnung. Außerdem benötigst du auch eine Totzeit nk, da du hier ja defacto kein kontinulierliches sondern ein abgetastetes System hast. Wenn du ein kont. Modell erstellen willst, schau dir mal die Doku zu ARX an.
%meine Erste Methode, mit pm()
%klappt ganz gut aber bei genauerem hinsehen gibt es eine Abweichung
data=iddata(y,u,Ts);
G_mod1=pem(data,'P2I');
Kp=G_mod1.kp.value;
T1=G_mod1.Tp1.value;
T2=G_mod1.Tp2.value;
s= tf('s');
G1=Kp/s/(1+s*T1)/(1+s*T2);
step(G1, t) hold on
plot(t,y,'red')
%Anpassung der Parameter mit arx()
na = 3; %Ordnung Modell Nenner
nb = 1; %Ordnung Modell Zähler
nk = 1; %Totzeit
G_mod2 = arx(data,[na nb nk]);
fpe1=fpe(G_mod2) figure;
compare(data, G_mod2);
axis([010010]);
grid on;
% G2=tf(G_mod2.B, G_mod2.A) !!! Vergleiche G2 und G_mod2 !!!
g2_step = step(G_mod2,t);
figure;
plot(t,y,'b',t,g2_step,'r--') grid on;
ylabel('Sprungantwort h_1(t)') xlabel('Zeit t [s]') legend('reales System','ARX Modell') pause;
closeall;
Hallo DSP und vielen Dank für deine Antwort.
Nun funktioniert wirklich alles!
Ich habe die Modelle mal mit F1=sum((y-g1_step).^2); gegenüber gestellt und dabei gemerkt, das die pem() Methode zu einem besseren Ergebnis führt. Werde aber trotzdem beide aufführen um den Vergleich zu haben.
Ich hätte noch eine Frage:
Wieso steht beim fit=100% obwohl es ja nicht 100% fittet. Ist die Abweichung zu klein? Oder gilt das zwar für y, t aber nicht für den step?
Wenn ich den oben angebenen zusätzlichen Parameter m beim compare Befehl nutze, wird mir keine 100% angezeigt, sondern nur 98,06%. Dieser Wert scheint für mich auch plausibel zu der grafischen Abweichung.
Hallo,
ich habe ebenfalls eine Frage.
Wenn ich eine Messwolke über Systemidentification Tool einlese wird ein "mydata" File erstellt und die eingelesenen Daten können über diesen File angezeigt werden, soweit ist alles i.O.
Nun gehe ich hin und sage, erstelle mir ein Transferfunction in Z oder in Laplace spielt im ersten Moment keine Rolle, dann gebe ich ihm die Ordnung vor und sage ihm, dass er eben auf Basis ARX-Methode die Koeffizienten bestimmen soll. Das klappt auch wunderbar und er spuckt mir die Übertragungsfunktion raus.
Wenn ich nun über m-File den Code/Befehl eingebe...
Code:
TDDATA=iddata("ausgangsdaten","eingangsdaten","Abtastzeit")
sysid=arx(TDDATA,[na nb nk])
sys=tf(d2d(sysid,T));
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.