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

Measurement Data Format einlesen

 

Hilfesuchender_2012

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.02.2012, 23:14     Titel: Measurement Data Format einlesen
  Antworten mit Zitat      
Hi,

unter der Adresse http://code.google.com/p/mdfreader/.....mdf_specification_3.3.pdf habe ich den Standard einer mdf Datei gefunden. Ich habe mir einen Import gebastelt, welcher die Spezifikationen ausliest und falls die mdf sortiert ist, die Daten korrekt importiert.

Code:

fid = fopen(Dateinamen, 'r'); % oeffnet die zu lesende Datei mit schreibschutz
fseek(fid, pointer_zur_speichestelle, 'bof'); % Springe zur entsprechenden Stelle
fread(fid, (zusaetzlicher_Offset + mod(nummer_des_ersten_Bits,8)), 'ubit1'); % lese das bit aus
% ist nun z.B. der gesuchte Datentyp ein float64
Rohdaten= fread(fid, nummer_des_signals, 'float64', groesse_des_Signals-8);
 


Nun erhalte ich aber immer wieder Dateien die unsortiert sind. Um diese lesen zu können, muss man die record id verwenden (steht auf der 28-te Seite). Im sortierten Zustand ist die ID Null (alle Daten stehen hinterinander). Die dazu benötigte Information laut Seite 16 lese ich ein. Ich verstehe aber nicht, wie ich den zusaetzlichen Offset durch die Record ID einfügen muss. Laut Spezifikation muss das Byte der Record-ID übersprungen werden. Egal ob ich in der Zeile fseek(fid, pointer_zur_speichestelle, 'bof'); einen zusaetzlichen Offset von 1 oder 2 einfüge, erhalte ich falsche Daten.

Über eure Hilfe wäre ich dankbar.


Sirius3
Forum-Guru

Forum-Guru


Beiträge: 441
Anmeldedatum: 12.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.02.2012, 12:17     Titel:
  Antworten mit Zitat      
Hallo,
eine kurze Suche im Matlab-FileExchange liefert etliche Funktionen zum Lesen von mdf-Dateien. Warum machst Du Dir die Mühe machen, eine eigene zu schreiben?

Gruß
Sirius
Private Nachricht senden Benutzer-Profile anzeigen
 
Hilfesuchender_2012

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.02.2012, 21:08     Titel:
  Antworten mit Zitat      
Hi,

falls du z.B. das MDF Import Tool and Function by Stuart McGarrity ansprichst. Dieses und die anderen hatte ich ausprobiert. Sie tun aber nicht genau was ich will. Ebenfalls lesen Sie nur sortierte mdf ein!!!!

Sie lesen die Daten nicht als Strukt ein. Es kommt bzw. kam bei manchen Dateien zu Fehler beim Import (dies wird erst deutlich, wenn man jeden Datenpunkt in Canape und Matlab vergleicht, hatte ich auch erst bei unplausiblen Werte im Matlab gemerkt). Dies liegt daran, dass die Daten einer Kanalgruppe hintereinander weg eingelesen werden. Die Imports springen aber nicht zur korrekten Position im mdf File. In einer mdf liegen aber nicht immer die Kanäle einer Gruppe direkt hintereinander (besonders bei sehr größen Dateien). Deshalb springe ich lieber zu jedem Sartpunkt.
Dann möchte ich gerne die Umrechnungstabellen und Texte mit haben. Bei meinen Daten gibt es Signale, welche physisch zwar von 0 bis 20 gehen, aber jede Zahl steht zusätzlich für einen String. Desweiteren wird der Quellenort etc. nicht mit angegeben. Es gibt noch einige andere Punkte, die ich jetzt nicht aufzählen möchte. Dies soll die Programme aus dem Matlab Fileexchange nicht schmälern, für einfache Messungen bzw. kleine Daten tun Sie ihren Dienst. Nur bei mir sind es sehr viele extrem große Messungen dabei.
Aber zu guter Letzt war es ein gute Übung und hat nicht lange gedauert.

MfG
 
sexyphil
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 58
Anmeldedatum: 19.08.14
Wohnort: Bayern
Version: 2013a
     Beitrag Verfasst am: 27.02.2015, 00:31     Titel:
  Antworten mit Zitat      
Hallo,

ich würde gerne dieses Thema hier nochmals aufgreifen.
Anhand der Erklärung meines Vorredners habe ich es geschafft den ID Block einer MDF Datei teilweise in Matlab auszulesen. Mit folgendem Befehl

t = fread(fid,64,'uint8=>char');

konnte ich den enthaltenen Text des ID Blocks der Datei anzeigen. Laut Spezifikation (siehe Link oben) ist zB der File Identifier ein Datentyp "char". In Matlab muss ich diesen als "uint8" einlesen und in "char" ausgeben. Das hat soweit funktioniert. Laut Spezifiaktion ist die Versionsnummer ein Datentyp "uint16", der mir folgendes Anzeigen sollte laut Erklärung:

"Version number of MDF format, i.e. 330 for this version"

also sollte quasi als Asgabe "330" ergeben. Bei mir müsste "300" dastehen.
Leider bekomme ich mit dem Befehl von oben umgewandelt

t = fread(fid,64,'uint16');

nur lauter Zahlen raus:

17485
8262
8224
8224
11827
12336
8224
8224
17485
8257
14198
12334
0
0
300
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
17480
164
1312
0
228
0
0
0
5
14385
12346
14898
12338
13105
14129
12602
14904
12851
30018
26723
28020
28257
110
0
0
0
0
0
0
0
0
0

Ich sehe richtig, dass er die ersten 64 Bytes mit der precision 'uint16' versucht einzulesen oder? In Zeile 15 taucht der Wert "300" auf, dies würde aber der Spezifikation widersprechen, die sagt die Versionsnummer befindet sich bei Byte 27 (siehe Seite 10).

Wäre nett, wenn sich jemand damit auskennt. Vielen Dank!
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.