gleichzeitiges einlesen von 32 UND 64-Bit Gleitkomma-Wert
jens85
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 23.04.2013, 15:17
Titel: gleichzeitiges einlesen von 32 UND 64-Bit Gleitkomma-Wert
Hallo erstmal,
bin absoluter Neuling auf dem Gebiet Matlab und habe ein gewisses Problem.
Aus einer Teilentladungsmessung bekomme ich eine .Q-Datei, die wie folgt beschrieben wird:
Zitat:
Die .Q-Dateien enthalten jedes TE-Ereignis, das im Wiedergabe
Bereich verarbeitet wurde. Für jedes TE-Ereignis enthält die Datei einen
32-BitGleitkomma-Wert, der die Ladung des TE-Ereignisses darstellt (in
Coulomb),direkt gefolgt von einem 64-Bit Wert, der den Zeitpunkt desTE
Ereignisses repräsentiert (in Sekunden). Der Zeitpunkt des ersten
TE-Ereignisses ist 0. Alle TE-Ereignisse werden in chronologischer Folge
lückenlos gespeichert.
Verfasst am: 23.04.2013, 16:07
Titel: Re: gleichzeitiges einlesen von 32 UND 64-Bit Gleitkomma-Wer
Hallo jens85,
Du willst abwechselnd 32 und 64-Bit einlesen. Mit einer Schleife ginge das, aber die Pre-allocierung wäre recht umständlich. Nun erklärt "doc fread", wie man nach jeder eingelesenen Zahl Bytes skippen kann. Das Lesen der Dokumentation kann ich wie immer nur wärmstens empfehlen!
Code:
fid = fopen('unit1.1.Q');
Q = fread(fid, Inf, 'float32', 8);
% Zurückspulen: fseek(fid, 0, -1);
% Ein SINGLE verwerfen: fread(fid, 1, 'float32');
T = fread(fid, Inf, 'float64', 4);
fclose(fid);
Statt ganz nach vorne zu spulen und wieder 4 Bytes auszulesen, hätte man auch gleich nach "fseek(fid, 3, -1)" spulen können (das erste Byte ist 0, nicht 1!).
Eine andere Idee:
Code:
fid = fopen('unit1.1.Q');
Data = fread(fid, Inf, 'float32');
fclose(fid);
Q = Data(1:3:end);
Data(1:3:end) = [];
T = typecast(Data, 'double');
Es werden also zunächst alle Daten als SINGLEs eingelesen, dann die Ladungen extrahiert und schließlich die Daten so uminterpretiert, dass die benachbarten 8 Bytes als DOUBLE gelten. TYPECAST ändert dabei nichts and der Bit-Representation der Daten. Nur die Grenzen der Elemente werden neu gesetzt.
Gruß, Jan
jens85
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 25.04.2013, 12:34
Titel:
Hallo Jan S,
ich danke dir für deinen Lösungsvorschlag. Genauso hatte ich mir das vorgestellt. Das mit dem Bytes skippen hatte ich auch schon versucht aber das ging irgendwie nicht....
danke nochmal
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.