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

Definition der float Dateien in Matlab

 

dresi
Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 02.01.09
Wohnort: Zürich
Version: ---
     Beitrag Verfasst am: 10.02.2010, 16:47     Titel: Definition der float Dateien in Matlab
  Antworten mit Zitat      
Hallo miteinander,

Ich will eine binäre Datei einlesen und habe Probleme bei der Typen convertierung. Die Datei stammt von einem Messgerät. Der Kanal ist als float-Typ gespeichert (nach IEEE-Standard) und zwar in folgender Form:

Adresse+0 Adresse+1 Adresse+2 Adresse+3
7 - 0 15 - 8 0, 22 - 16 0, 7 - 1
mmmmmmmm mmmmmmmm emmmmmmm seeeeeee

wobei:
m : Mantisse
e : Exponent
s : Vorzeichen

wenn ich nun eine Kanal mit fread einlese:
Code:
a=fread(fid, 4800, 'float');

dann kommt nur nonsens raus (dasselbe bei Single, float32 etc).
Wenn ich Matlab vorschreibe es solle 32 bit einlesen
Code:
a=fread(fid, 4800, 'bit32');

dann sehe ich zwar das Signal dass ich suche, aber nur die werte grösser eins. diejenigen zwischen 0 und 1 werden als integer interpretiert und sind natürlich viel zu gross.

FRAGE:
Wie kann ich die Daten einlesen so dass es passt?
Was läuft bei der konvertierung falsch? Wie ist Float in Matlab definiert?

Vielen Dank im Voraus.
Beste Grüsse,
Dresi
Private Nachricht senden Benutzer-Profile anzeigen


Tim
Forum-Century

Forum-Century



Beiträge: 140
Anmeldedatum: 03.11.07
Wohnort: Stuttgart
Version: 2011b+aktuellstes Release
     Beitrag Verfasst am: 10.02.2010, 19:30     Titel:
  Antworten mit Zitat      
Matlabs single und double sind auch IEEE 754 single und double. Eigentlich sollte die Nutzung von
Code:

reichen. Evtl. macht fread noch irgendwas komisches und versaut die eigentlich richtige Byteorder (so wie du es hingemalt hat, ist es little endian, was auch einem intel PC entspricht) die kannst du dann mittels
Code:

fixen.

hth
Private Nachricht senden Benutzer-Profile anzeigen
 
dresi
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 02.01.09
Wohnort: Zürich
Version: ---
     Beitrag Verfasst am: 10.02.2010, 22:08     Titel:
  Antworten mit Zitat      
Danke Tim für die Antwort,

jetzt habe ich aber ein kleines Logikproblem:
wie verwende ich denn nun dem fread?
Soll ich einen float einlesen den ich dann über
Code:
in single umwandle (was in meinen Augen wenig Sinn macht) und mit
Code:
zurück auf die ursprüngliche Form wurschtle:
Code:

A=typecast(fread(fid, 4800, 'float'),'single');
B=swapbytes(A);
 


oder wurschtle ich direkt die Ausgabe von fread:
Code:
A=swapbytes(fread(fid, 4800, 'float32'),'single');


oder muss ich gar float einlesen, in einen double "typecasten" und dann Gehirnblitzdingsen wegen little Indian:
Code:

A=typecast(fread(fid, 4800, 'float'),'double');
B=swapbytes(A);
 


Ich bin zwar ein wenig müde, was den Eindruck noch verstärken mag, aber wie fread mit den Bytes herumjongliert ist mir ein wenig suspekt...

Gute Nacht allerseits
Private Nachricht senden Benutzer-Profile anzeigen
 
Tim
Forum-Century

Forum-Century



Beiträge: 140
Anmeldedatum: 03.11.07
Wohnort: Stuttgart
Version: 2011b+aktuellstes Release
     Beitrag Verfasst am: 11.02.2010, 10:13     Titel:
  Antworten mit Zitat      
Hmmm, eigentlich sollte das alles bereits mit fopen und fread erschlagen werden können. Man kann die byteorder (MACHINEFORMAT) ja auch bei fopen bzw. fread angeben. Damit würde ich mal rumspielen. Wobei es wie gesagt bereits das richtige Format sein sollte...
Private Nachricht senden Benutzer-Profile anzeigen
 
dresi
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 02.01.09
Wohnort: Zürich
Version: ---
     Beitrag Verfasst am: 16.02.2010, 09:07     Titel:
  Antworten mit Zitat      
Ok, hat sich erledigt,Danke.
Der Fehler lag in einer etwas falschen Definition des Startpunktes, so dass fread zwar das richtige eingelesen hat, aber beim falschen Byte begonnen hat... Jetzt klappt's wunderbar.

Beste Grüsse,
Dresi
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 - 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.