axes(handles.plot1_l) plot(time,U_AI3,'LineWidth',1);
title('Digital Echo','FontWeight','bold');
xlabel('Laufzeit in ms','FontWeight','bold');
ylabel('Spannung in Volt','FontWeight','bold');
guidata(hObject, handles); %updates the handles
Generell kannst Du alles auslagern, was Du in C (oder C++) programmieren kannst. Das Problem dabei ist, dass Du eben viel selber machen musst, das Du in Matlab schon als Funktoin implementiert hast. Die Variablen in C sind nicht so gross, wie in Matlab, wo praktisch jede Variable, egal ob das nur eine einfache Zahl, oder eine 3dim Matrix ist, eine riesen Struktur mit sich schleift. Das hat also einen Vorteil in der Geschwindigkeit.
Nur solltest Du möglichst wenige Aufrufe von MEX-Files verwenden, da das wieder Zeit kostet. AUslagern rentiert sich also, wenn Du einmal ein MEX-File aufrufst, da dann viel und schnell rechnest, und dann fertig bist. Wegen jeder Kleinigkeit ein MEX-File aufzurufen kostet DIch mehr Zeit, als es gleich in Matlab zu machen.
Da Du aber in Deinem Code das Zeug schön plottest, erledigt sich MEX glaub ich. Das ist einfacher in Matlab.
ich würde da auch aus der Sicht herangehen, nachzusehen, ob der MATLAB-Code verbessert kann.
Beispiele:
ist guidata(hObject, handles) wirklich nötig? Und das noch 2 Mal?
Wie groß sind die Daten? Sind sie eventuell so groß, dass es die Bildschirmauflösung bei weitem überschreitet? Dann könnte man downsamplen versuchen.
Ansonsten auch mal mit dem Profiler schauen, was eigentlich lange braucht.
Vielen Dank ersteinmal für Eure Mühe.
Ist es sinnvoll Variablen explizit einen Datentypen zuzuweisen? Wenn ich das mache, optmiert Matlab trotzdem zum Datentyp Double, warum?
Ein Frage hab ich auch noch zum axes Object.
Momentan mache ich das in einer Whileschleife. Das bedeutet ich führe title,xlabel,ylabel immer wieder aus.
wenn ich das vor die whileschleife bringe, verschwindet title,xlabel,ylabel wenn axes wieder ausgeführt wird.
Code:
axes(handles.plot1_l);
%adds a title, x-axis description, and y-axis description
plot(time,U_AI3,'LineWidth',1);
title('Digital Echo','FontWeight','bold');
xlabel('Laufzeit in ms','FontWeight','bold');
ylabel('Spannung in Volt','FontWeight','bold');
Wie ich schon geschrieben habe, bildet Matlab zu jeder Variablen eine riesen Struktur. Darin speichert es eine Menge Zusatzinfos. Z.B. Dimensionen, real oder imaginär,.... Und diese Struktur ist immer die gleiche. Ist also völlig egal, ob Du eine Variable als Bool oder als Double deklarierst, die ist praktisch immer gleich gross. Sie unterscheiden sich eigentlich nur in der Menge an "echten Daten", die Du darin abspeicherst. Also ob Du nur eine '3' oder '1 2 3 4 5 6 7 8 9' speicherst.
Speicherallocation brint bei Matlab vorallem was, wenn sich die Grösse einer Variablen dynamisch ändert. Sonst kannst Du Dir das sparen. Ist sogar eher schlecht, weil es eine Anweisung mehr ist. Wenn Du also in einer Schleife Vektoren aneinander hängst, ist Matlab schneller, wenn es vorher die Grösse des resultierenden Vektors/Matrix kennt. Aber darauf macht es Dich selbst aufmerksam!
Ach ja, zu axis kann cih nicht viel sagen, aber schreib die label-ANweisung doch nach die while Schleife. Oder ist die Beschriftung schon während dem Ausführen notwendig?
Typzuweisung in Matlab funktioniert nicht wie in C/ C++.
single ist eine Matlab Funktion, und
der Aufruf single temp; bewirkt dass single einen Übergabe Parameter bekommt, welcher einen String-Wert temp hat.
Resultat wird an ans geschrieben.
Code:
% Aufruf single temp;
%
% entspricht den Aufruf single('temp')
Es ist genau wie in C/C++,
Resultat soll dem Typ von zugewiesenen Variable entsprechen.
Bloß in Matlab wird der Typ des Resultats übernommen
in C kommt da zu einem Fehler.
Code:
% wenn U_Mean von Typ double ist, % dann ist das Ergebnis von Typ double % deswegen muss sichergestellt sein, % dass alle Variablen gleichen Typs sind % sonst muss typecasting betrieben werden % wenn man Typ beibehalten möchte
temp = single((U_Mean /0.01002)-273.15);
Speicherallocation ist besonders sinnvoll, wenn man in einer Schleife die Werte an Array zuweist.
z.B so:
Code:
tic
A=zeros(1,1000);
A(1)=1;
for k=2:1000
A(k)=A(k-1)+k;
end toc % Dynamisch erweitern von Array ist zwar auch möglich, % aber langsamer und Speicher intensiver tic
B(1)=1;
for k=2:1000
B(k)=B(k-1)+k;
end toc
Wenn man mit Matrizen direkt arbeitet, dann ist die Allocation
nicht nötig. z.B A=B*C,
da Matlab auf Matrixoperationen optimiert worden ist.
Belegt dann automatisch richtig Speicherplatz
Code:
% in diesem Fall ist Speicherallocation nicht nötig
U_AI0 = [U_AI0_AI1(:,1)];
Ach ja, zu axis kann cih nicht viel sagen, aber schreib die label-ANweisung doch nach die while Schleife. Oder ist die Beschriftung schon während dem Ausführen notwendig?
vielleicht sollst du einfach nicht jedes mal plot-Befehl aufrufen, dann wäre xlabel, ylabel und title in der Schleife nicht nötig.
dazu sollst du dir einfach das handle von plot abgreifen und nur Daten darin verändern.
vielleicht sollst du einfach nicht jedes mal plot-Befehl aufrufen, dann wäre xlabel, ylabel und title in der Schleife nicht nötig.
dazu sollst du dir einfach das handle von plot abgreifen und nur Daten darin verändern.
Genau das was ich gesucht habe, Du bist der Größte!!! Vielen Dank an alle beteiligten!!!!
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.