ich bin dabei meine m-File zu optimieren, um die Speicherbelegung und Verarbeitungszeit zu minimieren. In meiner File lasse ich mehrere Figure erstellen, eines davon mit 6 Subplots. Zur besseren Auswertung meiner Signale soll eine Linie durch den Mittelwert in den Plot gelegt werden.
Code:
... subplot(3,2,3) plot(t,b,'r') hold on
plot(t,b_mean,'y');
hold on
grid on
ylabel('Beschleunigung [m/s²]') xlabel('Zeit t [s]') title(sprintf('Beschleunigungsverlauf %s File: %d \nMean: %02.3g Min: %02.3g Max: %02.3g',Sensoren{sensor2}, f, b_mean, b_min, b_max)) ...
rauskommentiere dann gehts um einiges schneller (~10 Sekunden Zeitersparnis). Da wird doch eigentlich nur eine Linie gedruckt, ich frage mich was da solange bei dauert. Da das in jedem Subplot (also 6 Mal) gemacht wird, kann ich mir gut eine Minute Zeit sparen. Hat jemand eine Idee, wie man das schneller machen kann?
weiss nicht ob dies die maximale Optimierung ist, aber in dem von mir gebastelten Beispiel (auf meinen PC) auf jeden Fall schonmal den Faktor 80 schneller.
Code:
t = 1:100000;
b = rand([1100000]);
b_mean = mean(b);
In Deinem Code-Ausschnitt wird sehr oft auf GCA zugegriffen, ohne dass man es sieht: PLOT, HOLD (doppelt?), GRID, YLABEL, XLABEL, TITLE.
SUBPLOT ist auch ausgesprochen langsam, da es die Figure nach existierenden AXES-Objekten mit passenden Positionen durchsucht und dabei Rundungsfehler akzeptiert. Wenn man die Achsen einfach nur hübsch verteilen will, geht das viel schneller, wenn man einfach die Position entsprechend setzt (die kann man sich ja von SUBPLOT abschauen).
Wenn man nur eine Linie für den Mittelwert zeichnen möchte, reichen die Start- und Endpunkte.
Dies sieht zwar etwas komplizierter aus. Es verbraucht aber immer Rechenzeit, Matlab alles nötige automatisch finden zu lassen.
Weitere Rechenzeoit läßt sich sparen, wenn die Figure zunächst unsichtbar ist ("figure('Visible', 'off')"), weil dann keine Update des Displays notwendig sind, während die Figure noch erstellt wird. Erst wenn alle SubPlots fertig sind, wird die Sichtbarkeit dann eingeschaltet.
Nebenbei: Hast Du wirklich 10.000 Punkte in einem Plot? Soviele Pixel hat das Display gar nicht, oder? Eigentlich müsste es reichen, die Anzahl der Ausgabepunkte auf die Anzahl der verfügbaren Pixels zu reduzieren. Das ist leider nicht trivial, sollte die Rechenzeit aber dramatisch reduzieren.
Wow, das ist mal eine amtliche Ansage - vielen Dank erstmal dafür.
Ich werd mir das gleich mal in Ruhe durcharbeiten und dann berichten wie das Endprodukt aussieht. Der erste Vorschlag hier war schon sehr hilfreich und hat die Dauer drastisch reduziert, aber man will ja immer noch nen bisserl mehr lernen.
Also soweit Euch erstmal besten Dank.
Jan
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
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.