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

txt-File auslesen mit Uhrzeit Daten darin und plotten lassen

 

sawyer_ma
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 75
Anmeldedatum: 13.03.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.07.2017, 10:16     Titel: txt-File auslesen mit Uhrzeit Daten darin und plotten lassen
  Antworten mit Zitat      
Hi alle zusammen,

ich habe eine txt die ich einlesen möchte. Das klappt alles auch sehr gut. Jedoch bekome ich eine Fehlermeldung wenn ich die erste Spalte einlese da diese eine Uhrzeit ist mit Millisekunden. Wie ann ich diese Spalte einlesen und über b = matrix1(:,3);plotten?


Code:

clc;
clear all;
close all;

%% Messwerte
   
fid = fopen('mer_omiso_zeit.txt');
matrix1 = fscanf(fid,'%f %f',[4 10]);
matrix1 = matrix1';

    a = matrix1(:,1);
    b = matrix1(:,3);
    close
   
    x1 = a./1;
    y1 = b./10;

%Plot
   
figure(1);
hold on;
grid on
plot(x1,y1,'b')
xlabel('MER');
ylabel('Time');
title('MER-Messung');

 



Das txt file sieht so aus: (kleiner Ausschnitt davon)


Code:

 15:54:23.17 356080073 386 389
 15:54:24.15 356080171 389 389
 15:54:25.16 356080272 389 389
 15:54:26.15 356080372 389 389
 15:54:27.15 356080472 386 386
 15:54:28.15 356080571 389 389
 15:54:29.15 356080671 389 389
 15:54:30.15 356080772 389 386
 15:54:31.15 356080872 389 389
 15:54:32.15 356080971 386 386
 15:54:33.15 356081071 386 389
 15:54:34.15 356081172 389 389
 15:54:35.15 356081272 389 389
 15:54:36.15 356081372 389 389
 15:54:37.15 356081471 389 389
 15:54:38.15 356081571 386 386
 15:54:39.15 356081672 389 389
 15:54:40.15 356081771 389 386
 15:54:41.15 356081872 386 386
 15:54:42.15 356081972 389 389
 15:54:43.15 356082071 389 389
 15:54:44.15 356082171 389 389
 15:54:45.15 356082272 389 389
 15:54:46.14 356082371 386 389
 15:54:47.14 356082471 389 389
 15:54:48.15 356082571 389 386
 15:54:49.15 356082671 389 386
 



Vielen Dank für eure Hilfe. Bin so langsam ein wenig ratlos.
Private Nachricht senden Benutzer-Profile anzeigen


sawyer_ma
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 75
Anmeldedatum: 13.03.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.07.2017, 20:09     Titel:
  Antworten mit Zitat      
Keiner einen Rat?

[EDITED, Jan, Bitte kein Bumping innerhalb von 24 Stunden - Danke!]
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

die Datei sollte sich gut als Table importieren lassen ( readtable ).
Wenn du mit den Datumsangaben arbeiten willst, würde ich sie in datetime umwandeln.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
sawyer_ma
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 75
Anmeldedatum: 13.03.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.07.2017, 21:19     Titel:
  Antworten mit Zitat      
Also erst einmal ein großes Dank an den Tipp Smile Jedoch stehe ich nun wieder still. Irgendwas passt Matlab nicht. Die Tabelle wird super eingelesen. Ich kann super auf die Spalten zugreifen. Mit der if abfrage wollte ich sicherstellen das auch was in der Tabelle drin ist. Das geht aber nicht richtig. Anschließend wollte ich das ganze Plotten, aber auch das wirft mir den Fehle:

"Non-numeric data is not supported in 'Line'
Error in o_miso_read (line 19)
plot(a,b,'b’)".


Code:

clc;
clear all;
close all;

%% Messwerte einlesen
   
t = readtable('mer_omiso.txt', 'Format','%s%f%f%f');
% if t = 0
%   error('Cannot open file');
% else
   
a = t(:,1);
b = t(:,3);

figure(1);
hold on;
grid on
plot(a,b,'b')
xlabel('Time');
ylabel('MER [dB]');
title('MER-Fluctuation');
 
% end
 


Nun die Frage ob ich vollständig auf den Kopf gefallen bin oder ich einfach nur sehr sehr ungeübt mich anstelle. Vielen Dank schon mal im Vorraus
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.435
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 04.07.2017, 21:24     Titel:
  Antworten mit Zitat      
Hallo,

bitte alle Tipps lesen und befolgen ;)
Zitat:
Wenn du mit den Datumsangaben arbeiten willst, würde ich sie in datetime umwandeln.

Mit Datumsangaben meinte ich die Zeitstempel.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
sawyer_ma
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 75
Anmeldedatum: 13.03.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.07.2017, 22:11     Titel:
  Antworten mit Zitat      
Also ich kann mich ja noch so anstrengend :/ Warum nimmt er das nicht? So ist halt das Format das mir mein Messgerät ausgibt.


Code:

clc;
clear all;
close all;

%% Messwerte einlesen
   
t = readtable('mer_omiso.txt', 'Format','%s%f%f%f');

a = t(:,1);
time = datetime(a,'InputFormat','HH:MM:SS:FF');

b = t(:,3);


figure(1);
hold on;
grid on
plot(a,b,'b')
xlabel('Time');
ylabel('MER [dB]');
title('MER-Fluctuation');
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.435
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 04.07.2017, 22:21     Titel:
  Antworten mit Zitat      
Hallo,

mehrere Fehler:
Wenn du Daten aus Tables extrahieren willst, dann mit . oder { }.
Bei der Angabe des Datumsformats musst du dich an die Konventionen aus der Doku halten.
Zum Plotten solltest du auch time verwenden statt a.

Code:
t = readtable('mer_omiso.txt', 'Format','%s%f%f%f');

a = t{:,1};
time = datetime(a,'InputFormat','HH:mm:ss.SS');

b = t{:,3};


figure(1);
hold on;
grid on
plot(time,b,'b')
xlabel('Time');
ylabel('MER [dB]');
title('MER-Fluctuation');


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
sawyer_ma
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 75
Anmeldedatum: 13.03.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.07.2017, 23:01     Titel:
  Antworten mit Zitat      
super vielen Dank. Ja das mit der Zeitbeschreibung HH:mm:ss:SS war mit absolut nicht klar. Was ich jedoch seltsam finde das trotz der Zeile

time = datetime(a,'InputFormat','HH:mm:ss:SS');

mir ein Datum ausgegeben wird. Kann ich das auch ohne hinbekommen oder ist das bei datetime immer mit dabei?

Vielen Dank für deine Hilfe. Hat mir sehr viel geholfen.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.435
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 05.07.2017, 09:26     Titel:
  Antworten mit Zitat      
Hallo,

Code:
time.Format = 'HH:mm:ss.SS'


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
sawyer_ma
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 75
Anmeldedatum: 13.03.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.07.2017, 20:55     Titel:
  Antworten mit Zitat      
Hmmm, ich habe das mal so eingefügt. Is aber wohl falsch.

Code:

clc;
clear all;
close all;

%% Messwerte einlesen
   
t = readtable('mer_omiso.txt', 'Format','%s%f%f%f');

a = t{:,1};
time.Format = datetime(a,'InputFormat','HH:mm:ss:SS')

b = t{:,3};
b = b./10;

figure(1);
hold on;
grid on
plot(time,b,'b')
xlabel('Time');
ylabel('MER [dB]');
title('MER-Fluctuation');
 


Kannst du mir kurz erklären wie das gemeint ist. Ich vermute das die Zeile time.Format = 'HH:mm:ss.SS' bedeutet das datetime ja aus date und time Spalten aufgebaut ist und mit dem Punktoperator nur die Zeile Time der Variable time zugewiesen wird. Richtig? Aber warum wird trotzdem in time bei mir Datum und Zeit abgespeichert. Das seltsame finde ich auch das ich ja aus der Tabelle nur Zeiten auslese und der da einfach ein willkürliches Datum im Sinne von 'now‘ hinzu schreibt. Warum? Wie macht man das richtig?

Sorry das ich villt umständlich frage aber irgendwie verstehe ich es nicht Sad
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.435
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 05.07.2017, 21:05     Titel:
  Antworten mit Zitat      
Hallo,

die Zeile muss anschließend eingefügt werden, also
Code:
time = datetime(a,'InputFormat','HH:mm:ss.SS');
time.Format = 'HH:mm:ss.SS';

Das ist aber für die Anzeige im Command Window. Für das Datum im Plot hilft folgender Trick:
Code:
plot(time - datetime('today'),b,'b')


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
sawyer_ma
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 75
Anmeldedatum: 13.03.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.07.2017, 22:54     Titel:
  Antworten mit Zitat      
Super das war das was ich nirgends finden konnte. Das mit der Uhrzeit ist aber auch maximal kompliziert finde ich. Denn ich stehe schon wieder vor dem nächsten Problem. Wenn ich meinen Code nun laufen lasse bekomme ich ein unheimlich Dichte an Information geplottet.

Jetzt würde ich gerne sagen das ich im einfachsten fall die ersten 100 Werte anschauen möchte. Aber noch besser wäre es wenn ich sagen könnte das von 15 Uhr bis 15.30 Uhr die Werte geplottet haben möchte.

Geht das überhaupt?

Code:

clc;
clear all;
close all;

%% Messwerte einlesen
   
t = readtable('mer_omiso.txt', 'Format','%s%f%f%f');
[zeilen spalten] = size(t)

%%Wertebereich

a = t{:,1};
time = datetime(a,'InputFormat','HH:mm:ss:SS');
time.Format = 'HH:mm:ss.SS';

b = t{:,3};
b = b./10;

figure(1);
hold on;
grid on;
plot(time - datetime('today'),b,'b');
axis([x1 x2 y1 y2]);
xlabel('Time');
ylabel('MER [dB]');
title('MER-Fluctuation');


untitled.jpg
 Beschreibung:

Download
 Dateiname:  untitled.jpg
 Dateigröße:  34.45 KB
 Heruntergeladen:  254 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

du kannst isbetween zum Filtern verwenden.
Code:

select = isbetween(time, t1, t2);
time = time(select);
b = b(select);


Grüße,
Harald
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.