Forum: Digitale Signalverarbeitung / DSP / Machine Learning Matlab - Simulation von Einzelwerten (Echtzeit)


von Fabian K. (Firma: TUM) (fkrueger)


Lesenswert?

Hi zusammen!

Entschuldigt bitte im Vornherein mein Unwissen :-D Habe mich im Studium 
im großen und ganzen um Matlab drücken können, jedoch holt einen sowas 
immer ein ..

In meinem Problem handelt es sich um eine Performanceanalyse von 
Simulationsmodellen, heißt ich habe im Matlab Workspace einen CPU-Timer 
implementiert der die Zeit vor dem Start einer Simulation und die Zeit 
zum Ende der Simulation festhalten soll. Aus der Differenz berechnet 
sich die Zeit die die Simulation benötigt hat.

Die Simulationsmodelle sind in Simulink implementiert!

Bei den Simulationen handelt es sich um Batteriesimulationen die über 
ein input Signal mit gesampleten Stromwerten gefüttert werden und zu den 
entsprechenden Stromsamplen dann Spannungsample ausgeben.

Mein Ziel war es die Berechnungszeit pro Sample zu messen, jedoch ist es 
mir über die Inport-Funktion bisher nur möglich komplette Vektoren 
einzuspielen... Das Problem wenn ich statt einem Vektor nur ein 
diskretes Element angebe ist, dass mir für die fortlaufende Simulation 
die Historie der vorangegangen Simulation fehlt.

Gibt es eine Möglichkeit eine Interaktion zwischen Matlab und Simulink 
aufzustellen, bei der Simulink sich nach Beedigung der Berechnung eines 
Samples an Matlab wendet und meldet "ich bin fertig gib mir das nächste 
Sample"?

Danke schonmal für eure Hilfe!!

Best Grüße
Fabian

von aSma>> (Gast)


Lesenswert?

Servus,
ich hoffe, dass hilft dir:
http://www.hs-augsburg.de/~ragr/Topics/Matlab/Skript/Simulink_4.pdf

Ist eigentlich ganz einfach die Geschichte. Du musst halt ein 
Script/Protokoll schreiben, dass dein ganzes Problem lösst.

von Fabian K. (Firma: TUM) (fkrueger)


Lesenswert?

Die Seite ist mir bei der Recherche schon über den Weg gelaufen.

Mein Problem ist, dass die Simulation nach jedem berechneten Wert nicht 
"stoppen" darf. Die Simulation muss praktisch weiterlaufen, da sonst die 
Anfangswerte (ausgenommen des Inputs) wieder initialisiert werden. Im 
Fall der Batteriesimulation würde ich Veränderungen in Alterung und 
State of Charge verlieren.
Ziel ist es in der laufenden Simulation die Zeit für den Durchlauf genau 
eines Samples zu messen.

Best Grüße
Fabian

von aSma>> (Gast)


Lesenswert?

Willst du eine Echzeit Simulation erreichen oder willst du wissen, 
welche max. Abtastzeit zu wählen ist?

Generell versuche ein Skript zu schreiben, in dem du den Ablauf debuggen 
kannst! Deine Aufgabenstellung müsste mit einer while-/for-Schleife zu 
lösen sein. Alte Werte speichern neue initialisieren...

von Fabian K. (Firma: TUM) (fkrueger)


Lesenswert?

Im Prinzip brauche ich ein Echtzeit-System. Es soll später möglich sein 
mit aktuell an der Hardware eingelesenen Daten zu arbeiten und die 
simulierten Daten dann praktisch in "Echtzeit" an die Hardware 
zurückgeben zu können. <- Aber da ist im Moment noch nebensächlich.

Die vorgeschlagene Lösung würde funktionieren wenn ich auf alle 
abgespeicherten Werte Zugriff hätte. Leider handelt es sich bei den 
Simulationsmodellen um FMU-Modelle die nicht alle Daten als Variablen 
ausgeben sondern mit internen Werten weiterrechnen. Bei einer neuen 
initialisierung der Simulation sind die internen Daten also 
unwiderruflich weg.

Wird das Problem langsam klarer?

Beste Grüße
Fabian

von aSma>> (Gast)


Lesenswert?

Servus,
ich habe eigentlich keine Lust aus dir jede kleine Info rauszuquetschen. 
Entweder du stellst dein Problem den Entwickler vor oder arbeitest dich 
in die Materie selbst ein. Ohne das Model zu sehen, wird dir hier kaum 
einer helfen können!

Bei Simulink kann man doch "inf" bei der Zeitangabe angeben. Dann läuft 
das unendlich lang. K.A.

von Jan K. (jan_k)


Lesenswert?

Eventuell gibt es die Möglichkeit, in Simulink ein event zu triggern, 
wobei der observer mit callback Funktion in Matlab implementiert ist.
http://de.mathworks.com/help/matlab/matlab_oop/listener-callback-functions.html
Bin mir aber nicht sicher, ob man in embedded matlab function blocks 
sowas benutzen kann.

Allerdings wird das arg aufwändig und langsam für jedes Sample - falls 
es überhaupt funktioniert. Wie viele samples/second sollen das werden?

: Bearbeitet durch User
von Martin (Gast)


Lesenswert?

Eventuell willst Du Simulink in Echtzeit laufen lassen? Das wird nicht 
ganz klar... dazu gibt es drei Möglichkeiten:
- Poor man's realtime: Ein Bremsblock, der die Ausführung von 
Simulink-Modellen auf Echtzeit herunterbremst (ist irgendwo im file 
exchange zu finden)
- das gleiche in Richtig heisst Simulink Desktop Realtime (einen halben 
Schritt weiter mit Coder mit kompilierten Modellen)
- Simulink Realtime mit dedizierter Hardware: Sehr schön, sehr teuer...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.