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

Große *.mat Files verarbeiten, Timeseries

 

fraank
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 12.02.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.02.2015, 17:28     Titel: Große *.mat Files verarbeiten, Timeseries
  Antworten mit Zitat      
Hi,
wieder einmal ein Problem mit mat-files. Ich soll die Dateien auswerten, die bis zu 60GB große sind und in Simulink mit dem Block „To File“ http://de.mathworks.com/help/simulink/slref/tofile.html erzeugt werden.
Die Parameter sind vom Block sind format: Timeseries, Decimation: 1, Sample time: -1). Das Format "Timeseries" hab ich noch nicht ganz verstanden. Kann das bitte jemand kurz erklären?

Als Vorlage dient ein Programm, das ähnlich oder sogar gleiche Daten, die in *.dat Dateien abgespeichert sind, auswerten kann.
Nach Öffner der Datei mit fopen, werden die Daten in Paketen auslesen:
Code:
[rawSignal, samplesRead] = fread(fin, 1e8, 'float');

Und dann mit dem Vektor rawSignal weiterverarbeitet.

Auf der Suche nach einer Lösung bin auf diese Seite http://de.mathworks.com/help/matlab.....ables-from-mat-files.html gestoßen. Den Vorschlag
Code:
matObj = matfile('example.mat')
hab ich gleich mal mit einer kleinen Datei (9GB) ausprobiert, dabei wurde der Ram zweimal etwas vollgeschrieben und als Antwort bekam ich das:
Zitat:
matObj =
matlab.io.MatFile

Properties:
Properties.Source: 'C:\Users\admin\...\example.mat'
Properties.Writable: false
s_sdru: [1x1 timeseries]

Methods


Das macht auch Sinn aber Helfen tut es mir leider nicht viel!
Ich würde gerne einen Vektor wie rawSignal auch mit der Länge von 1e8 aus dem .mat erzeugen.

Gruß und Dank
Fraank
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 12.02.2015, 17:53     Titel:
  Antworten mit Zitat      
Hallo,

mit
Code:
matObj.s_sdru.  (...)

solltest du jetzt Teile der Daten laden können.

Partielles Laden ist allerdings nur unterstützt, wenn das .mat File mit Option '-v7.3' gespeichert wurde.

Siehe auch hier:
http://www.mathworks.com/help/matla.....ables-from-mat-files.html

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
fraank
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 12.02.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.02.2015, 18:42     Titel:
  Antworten mit Zitat      
Danke für die schnelle Antwort!
Auf der Seite war ich auch.

Code:
rawSignal = matObj.s_sdru(:,20)

Das funktioniert leider nicht.

Was mir auch noch zum Nachdenken gibt ist, dass die Fkt mazfile() erstmal das .mat File zweimal in den RAM laden muss. Bei 9GB und 16GB RAM ist das noch drinnen aber bei den größeren Dateien wird es eng.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 12.02.2015, 20:13     Titel:
  Antworten mit Zitat      
Hallo,

wenn etwas "nicht funktioniert", dann bitte immer sagen, inwiefern es nicht funktioniert. Fehlermeldung? Welche? Unerwartetes Verhalten? Inwiefern?

Wenn s_sdru eine timeseries ist, dann kann es gut sein, dass man da nicht in dieser Form hineinindizieren kann. Dann wird es am einfachsten sein, wenn du anhand eines kleinen Beispiel mal schaust, wie man damit arbeitet.

Zitat:
dass die Fkt mazfile() erstmal das .mat File zweimal in den RAM laden muss.

Woraus schließt du das?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
fraank
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 12.02.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.02.2015, 09:33     Titel:
  Antworten mit Zitat      
Sorry, dass ich keine Fehlermeldung mit gepostet habe.
Hatte die Fehlermeldung nicht mehr offen und schon am Code weitergearbeitet. Hier ist die Fehlermeldung
Zitat:
The variable 's_sdru' is of class 'timeseries'. To use 's_sdru', load the entire variable.

Anscheinend liegt alles an dem Objekt timeseries.

Zitat:
Woraus schließt du das?

Im Task-Manager ergibt sich ein Sägezahn Form beim Arbeitsspeicher, die bei der 9GB großen Datei bis ca. 12GB ansteigt und bei einer 4.5GB großen Datei nur bis 8GB ansteigt.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 16.02.2015, 09:44     Titel:
  Antworten mit Zitat      
Hallo,

dann unterstützen timeseries anscheinend kein partielles Laden.
Im "To File"-Block könntest du das Speicherformat von timeseries auf Array umstellen. Dann sollte es auch mit dem partiellen Laden klappen.

Was den Speicherbedarf angeht: das wird vermutlich daran liegen, dass .mat komprimiert und es im Speicher dann wieder voll geladen werden muss.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
fraank
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 12.02.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.02.2015, 09:55     Titel:
  Antworten mit Zitat      
Hallo Harald,

Das nenn ich mal eine schnelle Antwort!!

Im Block „To File“ kann ich das Speicherformat nicht ändern, da der Block zuvor komplexe Werte ausgibt, die nur als timeseries abgespeichert werden können.

Gruß
Frank
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 16.02.2015, 10:22     Titel:
  Antworten mit Zitat      
Hallo,

dann würde ich darüber nachdenken, das Signal für die Speicherung in Real- und Imaginärteil aufzuspalten.

Grüße,
Harald
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.