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

Einlesen einer Textdatei die Tab getrennt ist

 

Siegfried112
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 18.12.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.12.2019, 00:13     Titel: Einlesen einer Textdatei die Tab getrennt ist
  Antworten mit Zitat      
Halle wehrte Matlab Gemeinde,

ich bin auf der Suche nach einer Möglichkeit schnell sehr große Textdateien einlesen und diese in einen Vektor umwandeln zu können. Danach will ich aus den Samplings den Offset abzeihen und sie normalisieren, um sie dann der audiowrite Funktion zu übergeben. (Die Textdatei habe ich angehangen)
Diese Textdateien enthalten ADC Samples einer Audioaufnahme, wobei jedes Sample aus 4 Zahlen besteht, die durch ein Tab getrennt sind. Diese Samples sind einfach in eine lange Reihe geschrieben. Die Anzahl der Samples kann gut 20 Millionen (ca. 100MB) betragen; für 10 min Aufnahme.
Ich habe mittlereweile schon 6 Befehle probiert, wobei ich mit keinem zu einem Ergebnis kam:

% es kommen nur zwei stelligen Zahlen raus
read_data1 = uint16(importdata(filename,'\t'));
read_data = read_data1{1}(:);

% sehr langsam beim import
read_data = tdfread(filename,'\t');

% viel zu wenige Werte sind in read_data vorhanden
fileID = fopen(filename);
read_data = textscan(fileID,'%u16','Delimiter','\t');
fclose(fileID);
read_data = read_data{1}(:);

% sehr langsam beim import
read_data = textread(filename);

% gibt eine Fehlermeldung raus
read_data = dlmread(filename,'');

% gibt einen leere Table aus
read_data = readtable(filename);


Vielleicht habt ihr eine Idee. Über einen Tipp würde ich mich sehr freuen.

Beste Grüße
Siegfried

DATA_ADC1.TXT
 Beschreibung:

Download
 Dateiname:  DATA_ADC1.TXT
 Dateigröße:  2.34 MB
 Heruntergeladen:  215 mal
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 20.12.2019, 11:44     Titel:
  Antworten mit Zitat      
Hallo,

ich habe den textscan-Ansatz getestet. Damit bekomme ich 4682 Werte, und die letzten davon sind wie ich es in der Datei sehe 2115; 2063; 2029.

Wie viele Werte erwartest du denn?

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Siegfried112
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 18.12.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.12.2019, 12:47     Titel:
  Antworten mit Zitat      
Hallo Harald,

danke für deine Antwort. Mit textscan hatte ich es auch schon probiert und genau solche Werte rausbekommen. 4000 sind nur leider zu wenig. Jedes Sample besteht aus 4 Zahlen und einem Tab, also insgesamt 5 Bytes.

Eine kleine Rechnung:
2,34 MB * 1024^2 = 2.453.668 Byte / 5 = 490.734 Werte

Also weit über 4000. Ich habe keine Ahnnung warum die Befehle das nicht richtig einlesen können.

Beste Grüße
Siegfried
Private Nachricht senden Benutzer-Profile anzeigen
 
Siegfried112
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 18.12.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.12.2019, 13:03     Titel:
  Antworten mit Zitat      
Harald hat Folgendes geschrieben:
Hallo,

ich habe den textscan-Ansatz getestet. Damit bekomme ich 4682 Werte, und die letzten davon sind wie ich es in der Datei sehe 2115; 2063; 2029.

Wie viele Werte erwartest du denn?

Grüße,
Harald


Ich glaube ich weiß warum nur 4682 Wert gelesen werden.
Ich habe die Datei mit dem Editor "Atom" geöffnet und gesehen, dass die Werte dort in großen Blöcken stehen. (siehe Bild im Anhang) Ich habe den ersten Block markiert. Ganz unten auf dem Bild steht "1:23410". Die erste Zahl ist die Anzahl der Zeilen und die zweite die Anzahl der Zeichen. Teile ich die Anzahl der Zeichen durch 5 komme ich genau auf die 4682.
Das heißt, z. B. Textscan ließt nur den ersten Block ein. Nun stellen sich mir zwei Fragen:
1. Wie kann ich Matlab damit umgehen?
2. Woher kommt diese Blockeinteilung, denn, wenn wir die Samples mit dem Microcontroller schreiben, schreiben wir die einfach hintereinander weg?

Beste Grüße,
Siegfried

Anmerkung 2019-12-20 115707.png
 Beschreibung:

Download
 Dateiname:  Anmerkung 2019-12-20 115707.png
 Dateigröße:  320.67 KB
 Heruntergeladen:  289 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 20.12.2019, 13:20     Titel:
  Antworten mit Zitat      
Hallo,

mit
Code:

siehst du, dass neben den Ziffern noch 0 und 9 als Trennzeichen vorkommen.

Also:
Code:
fileID = fopen('DATA_ADC1.TXT');
read_data = textscan(fileID,'%u16','Delimiter',{char(9), char(0)});
fclose(fileID);
read_data = read_data{1}(:);


Keine Ahnung, warum die Hardware das so rausschreibt.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Siegfried112
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 18.12.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.12.2019, 15:01     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Code:

siehst du, dass neben den Ziffern noch 0 und 9 als Trennzeichen vorkommen.


Als Trennzeichen sollten eigentlich nur Tabs vorkommen. Komisch.


Zitat:
Code:
fileID = fopen('DATA_ADC1.TXT');
read_data = textscan(fileID,'%u16','Delimiter',{char(9), char(0)});
fclose(fileID);
read_data = read_data{1}(:);


Danke, das hat super geklappt! Ich musste nur noch %u16 nach %n ändern da die audiowrite Funktion uint16 nicht nimmt.
Also nächtes muss ich wohl meinem Microcontrollerprogramm auf den Zahn fühlen warum da so ein so was raus kommt.

Beste Grüße
Siegfried
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.