Verfasst am: 01.02.2012, 23:14
Titel: Measurement Data Format einlesen
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.
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
Hilfesuchender_2012
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 05.02.2012, 21:08
Titel:
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
Options and Permissions
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.