|
|
Structs auf Echtzeitmaschinen - numerische Probleme |
|
Max24 |
Forum-Fortgeschrittener
|
|
Beiträge: 60
|
|
|
|
Anmeldedatum: 29.06.14
|
|
|
|
Wohnort: Deutschland
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 26.07.2018, 09:17
Titel: Structs auf Echtzeitmaschinen - numerische Probleme
|
|
|
|
|
Hallo,
ich implementiere aktuell ein Unscented Kalman Filter auf einer Echtzeitmaschine.
Um mir die Berechnung von einigen Parametern zu ersparen, werden diese zu Beginn ausgeführt und in einem struct params gespeichert:
Dieses struct wird zu Beginn gebaut und mit persistent permanent im Speicher gehalten.
Ich gebe das struct dann an die verschiedenen Funktionen weiter, die die Parameter nutzen.
Es treten jedoch numerische Problem auf (Divergenz des Filters...), wenn ich das so mache.
Werden die Berechnungen in die einzelnen Funktionen ausgelagert und jedes mal durchgeführt (ohne struct), treten keine numerischen Probleme auf.
Woran kann das liegen?
Meine Idee ist, dass ich noch irgendwie definieren muss, dass es sich um double handelt um mit maximaler Präzision auf der Echtzeitmaschine gerechnet werden muss. Wird das bei structs eventuell nicht automatisch gemacht?
Vielleicht hat jemand hier schonmal ein solches Verhalten mit dem Embedded Coder beobachten können.
Beste Grüße,
Max
|
|
|
|
|
Jan S |
Moderator
|
|
Beiträge: 11.057
|
|
|
|
Anmeldedatum: 08.07.10
|
|
|
|
Wohnort: Heidelberg
|
|
|
|
Version: 2009a, 2016b
|
|
|
|
|
|
Verfasst am: 27.07.2018, 13:44
Titel: Re: Structs auf Echtzeitmaschinen - numerische Probleme
|
|
Hallo Max24,
Nein, man muss bei Matlab nicht explizit angeben, dass es sich um doubles handelt, denn das ist der Default-Typ für numerische Variablen. Falls Du unsicher bist, kannst Du Dir die Typen der Felder ja einfach anschauen.
Zitat: |
Ich gebe das struct dann an die verschiedenen Funktionen weiter, die die Parameter nutzen. |
Bist Du sicher, dass sie in dem Struct nur lesen und nicht auch schreiben?
Zitat: |
Es treten jedoch numerische Problem auf (Divergenz des Filters...), wenn ich das so mache.
Werden die Berechnungen in die einzelnen Funktionen ausgelagert und jedes mal durchgeführt (ohne struct), treten keine numerischen Probleme auf. |
Das liegt garantiert an einem anderen Unterschied und nicht daran, dass Du einen Struct speicherst.
Gruß, Jan
|
|
|
Max24 |
Themenstarter
Forum-Fortgeschrittener
|
|
Beiträge: 60
|
|
|
|
Anmeldedatum: 29.06.14
|
|
|
|
Wohnort: Deutschland
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 31.07.2018, 18:14
Titel: Re: Structs auf Echtzeitmaschinen - numerische Probleme
|
|
Tatsächlich lag es daran. Mein Vorgänger hat innerhalb der Matlab Function explizit 32-bit Gleitkommadarstellung eingestellt (zu finden unter "edit data" innerhalb von Matlab Functions für Simulink).
Ein Umstellen auf 64-bit oder noch besser eine explizite Zuweisung des Datentyps:
löst das Problem. Defaultmäßig ist 64-bit eingestellt (bei 64-bit Matlab Installation), deswegen war das Problem schwierig zu finden.
Gruß,
Max
|
|
|
|
|
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.
|
|