WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Frage zu ARX Modell in System Identification Toolbox

 

Mahy23
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 22.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.09.2011, 17:10     Titel: Frage zu ARX Modell in System Identification Toolbox
  Antworten mit Zitat      
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?

das ist die Modell Info von arx211:

Discrete-time IDPOLY model: A(q)y(t) = B(q)u(t) + e(t)
A(q) = 1 - 1.999 (+-4.721e-006) q^-1 + 0.999 (+-4.716e-006) q^-2

B(q) = 2.207e-007 (+-8.851e-011) q^-1

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.

Danke
Private Nachricht senden Benutzer-Profile anzeigen


baustamm

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.03.2012, 12:41     Titel:
  Antworten mit Zitat      
habe die gleiche Frage...
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 03.03.2012, 15:13     Titel:
  Antworten mit Zitat      
Die Übertragungsfkt ist doch...

System = B(q)/A(q)

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]);

 sys=tf(d2d(sysid,TS))
 fpe1=fpe(sysid)
[yh,fit]=compare(dataset,sysid);
disp('fit ARMAX Modell'); disp(fit);
figure(1);
 compare(dataset,sysid);
hold on;
 T = 0:TS:((length(Y)-1)*TS) ;
plot(T,Y,'r');
hold on;
plot(T,U,'r');
ylabel('y(t)');
xlabel('Zeit in s');
title('Vergleich Modell und reales System');
grid on;
 


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.
Private Nachricht senden Benutzer-Profile anzeigen
 
baustamm

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.03.2012, 12:38     Titel: Modell
  Antworten mit Zitat      
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)

Code:
G1_step;
t=G1_ty(:,1);
y=G1_ty(:,2);
plot(t,y)
ylabel('Sprungantwort h_1(t)')
xlabel('Zeit t [s]')
print -deps Gs_1_fig

u=ones(length(t),1);
Ts=t(2)-t(1);

%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([0  10 0 10]);
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
 


Bei fit steht 100% aber G2 entspricht in keinster weise den Messdaten scheint mir...

G1_step.m
 Beschreibung:

Download
 Dateiname:  G1_step.m
 Dateigröße:  2.92 KB
 Heruntergeladen:  821 mal
G1_step.m
 Beschreibung:

Download
 Dateiname:  G1_step.m
 Dateigröße:  2.92 KB
 Heruntergeladen:  985 mal
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 06.03.2012, 12:45     Titel:
  Antworten mit Zitat      
Der Fehler liegt in der Zeile...

Code:
G2=tf(G_mod2.B, G_mod2.A)


...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

Code:
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.

Code:

G1_step;
t=G1_ty(:,1);
y=G1_ty(:,2);
plot(t,y)
ylabel('Sprungantwort h_1(t)')
xlabel('Zeit t [s]')
%print -deps Gs_1_fig

u=ones(length(t),1);
Ts=t(2)-t(1);

%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([0  10 0 10]);
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;
close all;
 


Oder
Code:
G2=tf(G_mod2,1)
als System geht auch.

Edit:
Ich empfehle dir auch folgende Darstellung für den Vergleich zu verwenden:
Code:
compare(data, G_mod2,'Init','m'); % oder statt m auch der Parameter z möglich. Weitere Infos in der Doku
Private Nachricht senden Benutzer-Profile anzeigen
 
baustamm

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.03.2012, 12:28     Titel:
  Antworten mit Zitat      
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?

Viele Grüße,
baustamm
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 09.03.2012, 18:51     Titel:
  Antworten mit Zitat      
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.
Private Nachricht senden Benutzer-Profile anzeigen
 
Spilo
Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 24.10.17
Wohnort: ---
Version: R2016a/b und R2017a
     Beitrag Verfasst am: 30.11.2017, 08:45     Titel:
  Antworten mit Zitat      
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));

bekomme ich eine komplett andere Übertragungsfunktion.

Könnte mir vlt. einer erklären wie das zustande kommt?

Systemidentification Tool mit dem Nenner- und Zählergrad =2 gibt folgende Übertragungsfunktion:
(-0.0003055 z^-1 + 0.01422 z^-2)/(1-1.834 z^-1 + 0.8477 z^-2)

Über m-File erhalte ich folgende Übertragungsfunktion:
(-0.00003071 z^-1 + 0.0236 z^-2)/(1-1.682 z^-1 + 0.7053 z^-2)

Data.txt
 Beschreibung:
1.Spalte die Zeit (Abtastung)
2.Spalte Eingangsgroeße
3.Spalte Ausgangsgroeße

Download
 Dateiname:  Data.txt
 Dateigröße:  3.41 KB
 Heruntergeladen:  613 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.