WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Datenübertragung beschleunigen

 

Matiii

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.02.2012, 11:42     Titel: Datenübertragung beschleunigen
  Antworten mit Zitat      
Hi, ich konnte das Problem, dass ich hier hatte lösen.

Das Messgerät tut was es soll. Das Übertragen der Daten dauert aber recht lange (je nach Auflösung bis zu einer Minute) und der Prozessor ist voll ausgelastet.

Der Code sieht folgendermaßen aus:

Code:

for pp=1:nii
               for p=0:1:17
                  calllib('CG_lib','CG_BidiMea_GetValue',A2C(pp,1),int32(p),ptr1); %(pos,ch,Value)  
                  werte(1:5,(p+1))   = ptr1.value;
                  curData            = werte;
               S.Automatic.Measurement(ii).Data.Mean{pp,kk}  = mean(curData,1);
               S.Automatic.Measurement(ii).Data.Std{pp,kk}   = std( curData,0,1);
               S.Automatic.Measurement(ii).Data.Value{pp,kk} = curData;
                                         
               Meas = S.Automatic.Measurement;
            if kk == 1  
                save(fileMat,'Meas');
            else
                save(fileMat,'Meas','-append');
            end   %if          
        end %for p
end %for pp
 


Ich weiß, dass man Schleifen vermeiden sollte, aber mir fällt keine andere Möglichkeit ein. Kann zudem die Funktion CG_BidiMea_GetValue ausgelagert werden?

Gruß


Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 08.02.2012, 13:01     Titel:
  Antworten mit Zitat      
speicher vorher schon reserviert ? sowas beschleunigt den prozess erheblich
Private Nachricht senden Benutzer-Profile anzeigen
 
Matiii

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.02.2012, 14:15     Titel:
  Antworten mit Zitat      
Hey, was genau meinst du damit? Smile

Bin nicht allzu sehr vertraut mit Matlab und programmieren!

Gruß
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 08.02.2012, 14:24     Titel:
  Antworten mit Zitat      
kleines beispiel zur veranschlaulichung
Code:
clear
tic
for k=1:100
    x(k)=k;
end
toc
clear
x=nan(100,1);
tic
for k=1:100
    x(k)=k;
end
toc
Private Nachricht senden Benutzer-Profile anzeigen
 
Matiii

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.02.2012, 15:33     Titel:
  Antworten mit Zitat      
Ahso, jetzt versteh ich was du meinst!

pp=nan(nii,1);
p=nan(18,1);

Habe das eingefügt und es wird dadurch leider nicht schneller! :/

Ich habe ein paar Probeläufe durchgefüht.

Eine Idee ist noch, in der innersten Schleife (for p=...) nicht das komplette "S.Automatic.Measurement" zu speichern (weil da schon paar Daten drinne sind), sondern lediglich sowas hier in der Art: "S.Automatic.Measurement(ii).Data"

Und dieses dann irgendwie weiter hinten im Code in die restlichen Daten zu integrieren. Das übersteigt aber leider meine Kenntisse! :/
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 08.02.2012, 15:38     Titel:
  Antworten mit Zitat      
nein du verstehst nicht was ich meine ^^
du sollst nicht die laufwariablen anlegen sond die variablen die erstellt werden.
zb
Code:
werte(1:5,(p+1))   = ptr1.value;
 
der wird dynamisch bei dir erzeugt. das braucht viel zeit wenn p entsprechend groß wird.
außerdem speicherst du bei jedem durchlauf der schleife. reicht es nicht am ende einmal alles zu speichern?
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 09.02.2012, 13:12     Titel: Re: Datenübertragung beschleunigen
  Antworten mit Zitat      
Hallo Matiii,

Die Variable "Meas" wird in jeder Iteration im MAT-File überschrieben. Die benötigte Rechenzeiot dafür steigt exponentiell. Es wäre viel effizienter, den SAVE ausserhalb der Schleife aufzurufen.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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 | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 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.