|
|
Angenäherte Funktion mit Methode kleinster Quadrate |
|
tkrzyzan |
Forum-Newbie
|
|
Beiträge: 5
|
|
|
|
Anmeldedatum: 16.06.17
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 16.06.2017, 12:46
Titel: Angenäherte Funktion mit Methode kleinster Quadrate
|
|
|
|
|
Moin zusammen,
Ich hoffe zu aller erst das meine Frage hier im richtigen Forum ist ansonsten weißt mich bitte darauf hin =). Und zwar zu meinem eigentlichen Problem ich habe ein Modell in Simulink beidem ich den Drehzahlanstieg eines Verbrennungsmotors einpflegen wollte. Dabei bin ich wie folgt vorgegangen
1. Ich habe eine Lookup-Table bei der ich meine Gaspedalstellung zu der Solldrehzahl habe.
2. Dahinter habe ich 2 PT1-Glieder geschaltet und die Parameter so abgeschätzt bis diese sehr gut mit den Messwerten vom Motor übereingestimmt haben.
Jetzt kam aber mein Professor und meinte ich soll dies lieber mit der Methode der kleinsten Quadrate machen. Deshalb meine Frage:
1. Kann ich die Methode kleinster Quadrate überhaupt verwenden um die Parameter eines PT2-Gliedes zu bestimmen und wenn ja hat mir jemand vielleicht einen Link zu passender Literatur oder einem Code?
Vielen Dank euch schon mal im Voraus
tkrzyzan
Zu den Anhängen:
Der Drehzahlanstieg ist die Messkurve des Motors und das Modell ist die nachbildung für den Anstieg
Beschreibung: |
|
Download |
Dateiname: |
Drehzahlanstieg.jpg |
Dateigröße: |
13.95 KB |
Heruntergeladen: |
670 mal |
Beschreibung: |
Das von mir erstellte Modell |
|
Download |
Dateiname: |
Modell.png |
Dateigröße: |
65.8 KB |
Heruntergeladen: |
640 mal |
|
|
|
|
|
Epfi |
Forum-Meister
|
|
Beiträge: 1.134
|
|
|
|
Anmeldedatum: 08.01.09
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 16.06.2017, 15:54
Titel:
|
|
Zwei PT1-Glieder in Reihe sind zwar ein PT2-Glied, aber nicht jedes PT2-Glied lässt sich durch zwei PT1-Glieder in Reihe darstellen :-)
Wenn Du die System Identification Toolbox hast, dann kann die das für Dich übernehmen. Die macht dann auch Methode der kleinsten Quadrate. Da gibst Du Eingangssignal, Messignal und allgemeines Streckenverhalten rein und er rechnet Dir die Streckenparameter aus.
Wenn das nicht geht, dann kannst Du zum Beispiel
fminsearch
verwenden, um das Minimum Deiner Abweichung zwischen gemessenem und simuliertem Verhalten zu bestimmen.
|
|
|
tkrzyzan |
Themenstarter
Forum-Newbie
|
|
Beiträge: 5
|
|
|
|
Anmeldedatum: 16.06.17
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 20.06.2017, 13:33
Titel:
|
|
|
|
|
Epfi hat Folgendes geschrieben: |
Zwei PT1-Glieder in Reihe sind zwar ein PT2-Glied, aber nicht jedes PT2-Glied lässt sich durch zwei PT1-Glieder in Reihe darstellen
Wenn Du die System Identification Toolbox hast, dann kann die das für Dich übernehmen. Die macht dann auch Methode der kleinsten Quadrate. Da gibst Du Eingangssignal, Messignal und allgemeines Streckenverhalten rein und er rechnet Dir die Streckenparameter aus. |
Ich glaube für mein Problem ist diese Toolbox nicht geeignet weil:
1. Ich habe Messwerte von einem Motorprüfstand bei welchen ich nur Rpm und Zeit habe. Und diese Messwerte versuche ich nachzubilden, mit einem Sprung (der aus der Lookuptable kommt) und einem Pt2-Glied. Somit habe ich ja eigentlich keine wirkliche Strecke um die Toolbox zu verwenden oder?
Epfi hat Folgendes geschrieben: |
Wenn das nicht geht, dann kannst Du zum Beispiel
fminsearch
verwenden, um das Minimum Deiner Abweichung zwischen gemessenem und simuliertem Verhalten zu bestimmen. |
Werde es jetzt mal mit dieser Funktion probieren. Jedoch muss ich dann eben immer die Parameter per Hand anpassen.
|
|
|
Epfi |
Forum-Meister
|
|
Beiträge: 1.134
|
|
|
|
Anmeldedatum: 08.01.09
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 20.06.2017, 17:59
Titel:
|
|
Klar hast Du ne Strecke. Am Prüfstand hast Du die Kette so: Drehzahlsollwertsprung -> Prüfstand -> Drehzahl. In der Systemidentifikation machst Du Drehzahlsollwertsprung -> PT2-Glied -> Drehzahl. Das PT2-Glied ist dann Deine Strecke, deren Parameter Du suchst.
Nein,
fminsearch
passt die Parameter einer von Dir definierten Funktion für Dich so lange an, bis der Ausgangswert der Funktion (=Summe der Quadrate der Abweichung) minimal ist. Deine Funktion wird dann mit so vielen Paramtern aufgerufen, wie Dein PT-Glied hat (wahrscheinlich 3), simuliert das Verhalten und berechnet als Ausgangswert die Güte der Simulation. Als Gütemaß sollst Du die Summe der quadratischen Abweichung benutzen, im Prinzip kannst Du Dir aber auch ein anderes ausdenken.
|
|
|
tkrzyzan |
Themenstarter
Forum-Newbie
|
|
Beiträge: 5
|
|
|
|
Anmeldedatum: 16.06.17
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 21.06.2017, 11:59
Titel:
|
|
|
|
|
Epfi hat Folgendes geschrieben: |
Klar hast Du ne Strecke. Am Prüfstand hast Du die Kette so: Drehzahlsollwertsprung -> Prüfstand -> Drehzahl. In der Systemidentifikation machst Du Drehzahlsollwertsprung -> PT2-Glied -> Drehzahl. Das PT2-Glied ist dann Deine Strecke, deren Parameter Du suchst. |
Könnte ich auch nochmal probieren jedoch habe ich dann noch das Problem, dass ich am Prüfstand nur mein Output gemessen wurde und ich somit ein Inputsignal "Faken" müsste oder?
Epfi hat Folgendes geschrieben: |
Nein,
fminsearch
passt die Parameter einer von Dir definierten Funktion für Dich so lange an, bis der Ausgangswert der Funktion (=Summe der Quadrate der Abweichung) minimal ist. Deine Funktion wird dann mit so vielen Paramtern aufgerufen, wie Dein PT-Glied hat (wahrscheinlich 3), simuliert das Verhalten und berechnet als Ausgangswert die Güte der Simulation. Als Gütemaß sollst Du die Summe der quadratischen Abweichung benutzen, im Prinzip kannst Du Dir aber auch ein anderes ausdenken. |
Hier muss ich jedoch erstmal rausfinden wie ich als fun in der
fminsearch
ein PT2-Glied nehmen kann da ich hier ja meine DGL 2 Ordnung im Zeitbereich eintragen muss oder?
|
|
|
tkrzyzan |
Themenstarter
Forum-Newbie
|
|
Beiträge: 5
|
|
|
|
Anmeldedatum: 16.06.17
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 21.06.2017, 15:32
Titel:
|
|
|
|
|
tkrzyzan hat Folgendes geschrieben: |
Könnte ich auch nochmal probieren jedoch habe ich dann noch das Problem, dass ich am Prüfstand nur mein Output gemessen wurde und ich somit ein Inputsignal "Faken" müsste oder?
|
So habe jetzt mal ein Eingangssignal "gefaked", da ich ja weiß welche Drehzahl ich als Sollwert haben wollte habe jetzt folgende Parameter:
Mithilfe dieser Parameter bekomme ich dann mithilfe einer Transferfunction mit 2 Polen und 1 Nullstelle folgende Funktion: (Plot der Annäherung im Anhang)
1.426 s + 0.3209
----------------------
s^2 + 3.583 s + 0.2909
Was an sich schon sehr gut ist schonmal vielen Dank hierfür
Jetzt habe ich noch das Problem das die Werte die ich als Input habe dauerhaft ein wenig ansteigen womit natürlich die Transferfunction nicht das richtige Maximum hat und über den Sollwert hinausläuft. (Dies habe ich auch nochmal im Anhang von meinem Scope ausgang aus dem Modell von oben)
Jetzt zu meiner nächsten Frage wie kann ich am besten dafür sorgen das die Transferfunction nicht über den SW hinausläuft?
1. Kann ich eventuell das Signal filtern oder glätten? Wenn ja wie einfach am Ende wo das Signal schwankt einen festen Wert eintragen?
2. Die Transferfunction im nachhinein ändern?
Beschreibung: |
|
Download |
Dateiname: |
Modell.png |
Dateigröße: |
15.25 KB |
Heruntergeladen: |
567 mal |
Beschreibung: |
|
Download |
Dateiname: |
Toolbox.png |
Dateigröße: |
13.46 KB |
Heruntergeladen: |
587 mal |
|
|
|
Epfi |
Forum-Meister
|
|
Beiträge: 1.134
|
|
|
|
Anmeldedatum: 08.01.09
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 22.06.2017, 20:21
Titel:
|
|
|
|
|
Das ist aber kein PT2-Glied, was Du da hast... Ein PT2 hat keine Nullstellen, Deine Übertragungsfunktion hat eine.
Die SysId-Toolbox findet ein System, was sich so verhält, wie Deine Messdaten. Siehst Du ja auch... Und die Übertragungsfunktion hat auch einen stationären Endwert - den kannst Du berechnen, indem Du den lim(s->0) von der Übertragungsfunktion ausrechnest. Bei Dir ist das so ungefähr 1,1031.
Wenn Du Dir die Eigenwerte ausrechnest, kannst Du ungefähr abschätzen, nach welcher Zeit Du sehr nah am stationären Endwert liegen wirst. Bei Dir sind die Eigenwerte -3.5rad/s und -0.0831rad/s. Den stationären Endwert erreichst Du dann so ungefähr bei fünf mal dem Kehrwert des kleinsten Eigenwertes, hier also bei etwa 60 Sekunden (so einfach klappt das aber nur bei nicht schwingfähigen Systemen). Deine Simulation geht nur bis 10 Sekunden - Du musst also nur etwas mehr Geduld haben...
Ansonsten noch etwas fachliches Blabla: mit dem Gaspedal gibt man eigentlich eher sowas wie das Drehmoment vor und keine Drehzahl...
|
|
|
tkrzyzan |
Themenstarter
Forum-Newbie
|
|
Beiträge: 5
|
|
|
|
Anmeldedatum: 16.06.17
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 26.06.2017, 15:16
Titel:
|
|
|
|
|
Epfi hat Folgendes geschrieben: |
Das ist aber kein PT2-Glied, was Du da hast... Ein PT2 hat keine Nullstellen, Deine Übertragungsfunktion hat eine. |
Hatte mehrere ausprobiert jedoch kam das oben erwähnte Glied laut Matlab besser an die Ergebnisse ran. Jedoch habe ich jetzt doch ein PT2-Glied genommen da ich dieses auch relativ einfach anpassen kann sodass alles stimmt
Habe somit jetzt folgendes:
38.5
---------------------------
s^2 + 13.6 s + 37.68
Epfi hat Folgendes geschrieben: |
Die SysId-Toolbox findet ein System, was sich so verhält, wie Deine Messdaten. Siehst Du ja auch... Und die Übertragungsfunktion hat auch einen stationären Endwert - den kannst Du berechnen, indem Du den lim(s->0) von der Übertragungsfunktion ausrechnest. Bei Dir ist das so ungefähr 1,1031.
Wenn Du Dir die Eigenwerte ausrechnest, kannst Du ungefähr abschätzen, nach welcher Zeit Du sehr nah am stationären Endwert liegen wirst. Bei Dir sind die Eigenwerte -3.5rad/s und -0.0831rad/s. Den stationären Endwert erreichst Du dann so ungefähr bei fünf mal dem Kehrwert des kleinsten Eigenwertes, hier also bei etwa 60 Sekunden (so einfach klappt das aber nur bei nicht schwingfähigen Systemen). Deine Simulation geht nur bis 10 Sekunden - Du musst also nur etwas mehr Geduld haben...
|
Da hast du natürlich überall recht. Ich habe jetzt die neue Übertragungsfunktion angepasst sodass ich dann einen stationären Endwert von 1 habe. Womit ich dann folgende Funktion bekomme.
38.5
---------------------------
s^2 + 13.6 s + 38.5
Und diese minimale Anpassung ist für mich völlig legitim da mir das erreichen des genauen Sollwerts wichtiger ist als eine Zeitverschiebung von 0.05s auf den Endwert.
Epfi hat Folgendes geschrieben: |
Ansonsten noch etwas fachliches Blabla: mit dem Gaspedal gibt man eigentlich eher sowas wie das Drehmoment vor und keine Drehzahl... |
Das ist natürlich richtig. Jedoch benutze ich dieses Modell um das Verhalten eines Verbrennungsmotors nachzubilden. Der Motor ist ein Kartmotor und hat eine Fliehkraftkupplung welche nochmal an eine Lamellenkupplung gekoppelt ist. Dadurch habe ich am Ende des Powertrains ein fast konstantes Moment (durch das Durchrutschen der Lamellenkupplung) aber ein schwankende Drehzahl. Aufgrund dessen brauche ich einen Drehzahlanstieg des Motors vor der Kupplung als Eingangsgröße für mein Modell der Kupplung.
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
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
| 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.
|
|