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

Frage zu fread

 

Fread_Verstaendnisfrage

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.02.2014, 17:22     Titel: Frage zu fread
  Antworten mit Zitat      
Hi,
ich habe ein File mit x-beliebiger Anzahl von Messkanaelen. Die Datei ist folgender Massen aufgebaut. Kanal1 Messpunkt1, Kanal2 Messpunkt1, KanalX Messpunkt1, Kanal1 Messpunkt2,, Kanal2 Messpunkt2, KanalX Messpunkt2, etc.
Mit zwei for Schleifen könnte man die Daten einlesen.

Code:

for Zeitpunkt = 1:Anzahl_Messpunkte
    for Messkanal = 1:Anzahl_Messkanaele
      Datenstruktur(Messkanal,1).Daten =  [Datenstruktur(Messkanal,1).Daten; fread(file,1,'single']
    end
end
 


Durch die for-Schleifen dauert das lesen extrem lange. Da ich aber den abgespeicherten Datentyp kenne, weiß im vorraus, an welcher Stelle jeder Messpunkt abgespeichert ist. Exemplarisch nur mal für einen Kanal.
Für KanalX befinden sich die Messpunkte an folgenden Stellen [36;376;744;1112;....]
Wie muss ich den fread Befehl mit der Option "sizeA" verwenden, dass ich den Kanal direkt ohne die Schleifen lesen kann.

Code:

Datenstruktur(X,1).Daten = fread(file,[1 36; 1 376; 744;1 1112],'single');
 

Irgendwo habe ich einen Fehler, denn als Fehlertext kommt "Invalid size". Oder gibt es einen besseren Befehl?

MfG


denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 17.02.2014, 17:37     Titel:
  Antworten mit Zitat      
Hallo

dem Size im FREAD dürfte nur ein Zeilenvektor übergeben werden.

besser wäre wohl TEXTSCAN zu verwenden
Wie ist denn dein File genauer aufgebaut? Was fürs Trennzeichen werden zwischen den Spalten verwendet?

Zuletzt bearbeitet von denny am 18.02.2014, 12:40, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
Fread_Verstaendnisfrage

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.02.2014, 18:25     Titel:
  Antworten mit Zitat      
Hi Denny,

die ersten 32 Byte ist ein Header, dann kommen die Daten, dann allgemeiner Header und zu letzt der die Kanalinformationen. Am 8 Byte des Headers steht die Adresse zum allgemeinen Header. Diesen und den Kanalheader liest man Zeilenweise mit fgetl ein und überprüft diese auf Schlüsselwörter.
Die Daten sind binär aufgebaut, dort kommst du mit textscan nicht weiter, da dort Steuerzeichen verloren gehen.
Wenn alle Kanaele ein und den selben Datentyp haben, kann man alles in einem Vektor als Single einlesen und für jeden Kanal mit Index arbeiten. Aber jeder Kanal kann ein unterschiedliches Datenformat besitzen.
MfG
 
Fread_Verstaendnisfrage

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.02.2014, 12:06     Titel:
  Antworten mit Zitat      
Hi,

wenn die Kanaele alle ein und das selbe Datenformat haben und jeweils nur ein Messpunkt pro Kanal hintereinander weggespeichert ist, kann ich die Datei wie folgt lesen.

Code:

Datenmatrix = fread(file,[Kanalanzahl, Messpunktanzahl], 'single');

 


Leider akzeptiert fread bei precision nur ein Datenformat. Gibt es eine Möglichkeit dort, für jeden Messkanal hintereinander weg, in geschweiften Klammer das Format zu schreiben. Wie folgt zum Beispiel

Code:

Datenmatrix = fread(file,[3, 10], {'single';'int16';'uint8'});
 


Falls jemand eine Idee hat, wäre ich froh. Bei rund 100 Kanaelen, 400000 Messpunkten pro Kanal mit unterschiedlichen Datenformaten, wurde sonst der fread Befehl 100*400000 mal aufgerufen werden müssen. Da dauert der Import mehrere Stunden.

MfG
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 18.02.2014, 13:48     Titel:
  Antworten mit Zitat      
Hallo

Sorry hatte oben unrecht, dem Size darf man einen Zeilenvektor übergeben.

Zitat:

Leider akzeptiert fread bei precision nur ein Datenformat. Gibt es eine Möglichkeit dort, für jeden Messkanal hintereinander weg, in geschweiften Klammer das Format zu schreiben. Wie folgt zum Beispiel

Code:

Datenmatrix = fread(file,[3, 10], {'single';'int16';'uint8'});

nein so was gibt es nicht, FREAD kann ja nicht wissen an welcher Stelle welches Format dann auftaucht.

FREAD liest ja nur die Bytes. deswegen, wenn die Formate sich in den Spalten unterscheiden, können doch eingelesene Werte nicht mehr stimmen? Sind es immer 4 Bytes?
Irgendwie verstehe ich den Aufbau deiner Datei noch nicht.
Private Nachricht senden Benutzer-Profile anzeigen
 
Fread_Verstaendnisfrage

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.02.2014, 14:47     Titel:
  Antworten mit Zitat      
Hi Denny,

das Datenformat ist ein spezielles Messformat EdasWin. Zwischen den Daten gibt es kein Trennzeichen. Es wird alles hintereinander weg geschrieben.
Bis jetzt sind es immer 4 Bytes. Deshalb klappt die Codezeile
Code:

Datenmatrix = fread(file,[Kanalanzahl, Messpunktanzahl], 'single');
 

Sie erzeugt eine Matrix mit den Messdaten innerhalb von wenigen Sekunden.
Aber laut Spezifikationen und anderen Messungen die ich gesehen habe, kann sich das Format von Kanal zu Kanal unterscheiden. Hatte halt gehofft, dass mit der precision fread immer im wechseln zum Beipiel erst, ein single, dann int16, dann uint8 liest. Anschließend interpretiert er das nächste Zeichen wieder als single, int16, uint8 und dies solange, bis Messpunktanzahl erreicht ist.
Dann muss ich halt in den sauren Apfel beißen und es byteweise einlesen.
 
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.