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

gleichzeitiges einlesen von 32 UND 64-Bit Gleitkomma-Wert

 

jens85

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.04.2013, 15:17     Titel: gleichzeitiges einlesen von 32 UND 64-Bit Gleitkomma-Wert
  Antworten mit Zitat      
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.


nun habe ich versucht diese Datei zu öffnen mit
Code:
>> fid = fopen('unit1.1.Q');
>> Q = fread(fid,'float64') ;


bzw. mit float32.
Er zeigt mir dann eben immer entweder die TE-Ereignisse richtig und die Zeit falsch an, oder eben umgekehrt.

Meine Frage ist, gibt es eine Möglichkeit beide Werte also die 32-Bit und die 64-Bit Gleitkomma-Zahl mit einmal auszulesen???

Ansonsten müsste ich umständlich (für mich jedenfalls) erst beides einzeln auslesen und dann wieder zusammen führen.

ich bedanke mich schon einmal im Voraus
Gruß Jens


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 23.04.2013, 16:07     Titel: Re: gleichzeitiges einlesen von 32 UND 64-Bit Gleitkomma-Wer
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
jens85

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.04.2013, 12:34     Titel:
  Antworten mit Zitat      
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
 
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 - 2024 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.