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

Binär-Datei als Logical-Matrix einlesen

 

Ajax
Forum-Century

Forum-Century


Beiträge: 176
Anmeldedatum: 09.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.12.2011, 13:00     Titel: Binär-Datei als Logical-Matrix einlesen
  Antworten mit Zitat      
Hallo zusammen,
ich stehe mal wieder vor einem Problem:
Ich habe eine mitunter sehr große Datei, in welcher Datenpackete in binärem Format gespeichert sind. Jedes Datenpacket hat eine Länge von 48 bit und es können sehr viele Millionen solcher Packete vorliegen. Der Zugriff muss auf die einzelnen bits möglich sein. Daher habe ich die Datei wie folgt eingelesen anschließend mit logical() umgewandelt:
Code:

binaryFile = logical(fread(fid,[48 nDataPacket], 'ubit1'));
 

Wenn ich es richtig verstehe, dann liest Matlab die Datei auf diesem Weg bitweise ein und jedes bit wird zuerst als double abgespeichert. Erst im Anschluss erfolgt die Umwandlung in das deutlich weniger speicherintensive logical Format. Daher kann ich so nur relativ kleine Dateien einlesen, da ansonsten sehr schnell mein Arbeitsspeicher voll ist.
Wenn ich das ganze als Schleife aufbaue und nur kleine Abschnitte einlese, umwandle und speichere, dann kann die Datei zwar größer sein, das einlesen braucht aber extrem lange.
Lese ich als 'ubit48' ein und wandle z.B. mit dec2bin() in einen binär-String um, dann habe ich erstens Strings, was ich aufgrund der weiteren Verarbeitung umgehen will und zweitens dauert das umwandeln ebenfalls sehr lange.
Daher hier meine Frage: gibt es eine Möglichkeit eine binäre Datei direkt als logical einzulesen, ohne den Umweg 'ubit1' einlesen und in logical umwandeln gehen zu müssen? Oder hat jemand eine bessere Idee, wie ich solche extrem großen Dateien mit Rohdaten verarbeiten kann?
Vielen Dank für schon einmal im voraus für alle hilfreichen Kommentare.
mfg

Ajax
Private Nachricht senden Benutzer-Profile anzeigen


denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 08.12.2011, 13:09     Titel:
  Antworten mit Zitat      
Hallo

du kannst ja die Werte in UINT8 einlesen ist genau so groß wie LOGIC
und danach konvertieren
so:
Code:

binaryFile = logical(fread(fid,[48 nDataPacket], 'ubit1=>uint8'));
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Ajax
Themenstarter

Forum-Century

Forum-Century


Beiträge: 176
Anmeldedatum: 09.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.12.2011, 13:16     Titel:
  Antworten mit Zitat      
Hallo denny,

vielen Dank für die schnelle Antwort. Das hört sich auf jeden Fall sinnvoll an und ich werde es sofort mal ausprobieren.

mfg

Ajax
Private Nachricht senden Benutzer-Profile anzeigen
Verschoben: 09.12.2011, 11:22 Uhr von denny
Von Matlab intern nach Programmierung
 
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.