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

Time alignment

 

Harald
Forum-Meister

Forum-Meister


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

Das Problem bei deinen Daten ist, dass du kaum Messungen zu vollen Minuten hast.

Du solltest noch angeben, wie die minütlichen Werte bestimmt werden sollen, wenn es zu dem Zeitpunkt keinen Wert gibt. Soll interpoliert werden, soll der vorherige Wert genommen werden?

Code:
Aligned = synchronize (Time_freq, Time_nfreq, 'minutely', 'previous');

oder
Code:
Aligned = synchronize (Time_freq, Time_nfreq, 'minutely', 'interp');


Es kann auch sinnvoll sein, die Datensätze mit retime erst mal auf eine andere Skala zu bringen und sie dann zusammenzufügen.

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


Lisa_88
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 26
Anmeldedatum: 18.12.17
Wohnort: ---
Version: R2016b
     Beitrag Verfasst am: 11.01.2018, 10:48     Titel:
  Antworten mit Zitat      
Und wenn ich die knnsearch Funktion nehmen würde?

LG
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: 11.01.2018, 10:55     Titel:
  Antworten mit Zitat      
Hallo,

es kann auch eine Kombination aus beiden sinnvoll sein.

Für mich ist die Frage, was du bei dem Datensatz eigentlich letztlich als Ergebnis haben willst. Es ist ja keiner der beiden Datensätze minütlich. Wenn du also überall, wo du keine genauen Daten hast, NaN reinschreibst, dann hast du praktisch nur NaN. Wenn du interpolierst, dann hast du keine NaN. Du willst also vermutlich irgendwas dazwischen. Mir ist aber leider nicht klar was.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 26
Anmeldedatum: 18.12.17
Wohnort: ---
Version: R2016b
     Beitrag Verfasst am: 11.01.2018, 11:24     Titel:
  Antworten mit Zitat      
Hallo,

ja das stimmt bei den Daten die nicht nur fast alle 24 Stunden aufgenommen wurden habe ich keine minütliche Aufzeichnung, beim anderem Datensatz schon. Was ich gerne haben würde ist: Überall wo ein Datenpunkt (Datanfreq) vorhanden ist zu den Daten (Datafreq) zuordnen und ansonsten immer NaN dazuschreiben/dazwischen schreiben, bis zum nächsten Datanfreq gemessenen Zeitpunkt.

Danke und LG
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: 11.01.2018, 11:31     Titel:
  Antworten mit Zitat      
Hallo,

es sind nur leider nirgends Daten vorhanden, die genau dazu passen.

Eine Möglichkeit wäre noch, von Anfang an auf volle Minuten zu runden.

Code:
Datafreq.Time_h = duration(round(Datafreq.Time_h*60)/60, 0,0);
Datanfreq.Time_h = duration(round(Datanfreq.Time_h*60)/60, 0,0);
Time_freq = table2timetable(Datafreq);
Time_nfreq = table2timetable(Datanfreq);

Aligned = synchronize (Time_freq, Time_nfreq, 'first');


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

Forum-Anfänger

Forum-Anfänger


Beiträge: 26
Anmeldedatum: 18.12.17
Wohnort: ---
Version: R2016b
     Beitrag Verfasst am: 11.01.2018, 15:10     Titel:
  Antworten mit Zitat      
Hey,

zu den minütlichen Daten gibt es auch dazugehörige Daten im Stundenformat. Deshalb dachte ich mir das es in Matlab funktionieren sollte das man sich den nächst gelegenen Zeitwert der zu den Stundenwerten dazugehört, zuordnen könnte.

LG
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: 11.01.2018, 15:46     Titel:
  Antworten mit Zitat      
Hallo,

möglich ist viel. Die Frage ist nur, wieviel Aufwand es ist.

Wenn ein Ansatz für verschiedene Szenarien funktionieren soll, ist es hilfreich, von Anfang an auch die möglichen Varianten anzugeben.

Hast du denn den letzten Vorschlag mal ausprobiert?

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 26
Anmeldedatum: 18.12.17
Wohnort: ---
Version: R2016b
     Beitrag Verfasst am: 11.01.2018, 16:20     Titel:
  Antworten mit Zitat      
Hey,

ja hab ich und er sagt mir folgendes:

>> Datafreq.Time_h_ = duration(round(Datafreq.Time_h_*60)/60, 0,0);
Error using duration (line 250)
Parameter name must be text.

Nur ich möchte die Daten nicht aufrunden, ich würde es so belassen wie die Orginaldaten sind und es gerne so zuordnen wie oben erwähnt. Mir fällt grad nichts mehr ein bzw. bin ich schon voll verwirrt Smile.

LG
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: 11.01.2018, 17:26     Titel:
  Antworten mit Zitat      
Hallo,

hatte ich auch vorhin mal... du musst die Daten nochmal von vorne importieren, weil die Stunden schon in durations umgewandelt sind.

Alternative dann:
1. Spalten mit NaN in 1. Table hinzufügen.
2. Für jede Zeile des zweiten Tables
i. Suche nach nächstem Datum im ersten Table
ii. Schreibe die Beobachtung des 2. Tables in diese Zeile des 1. Tables.
Ist halt etwas mühsam.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 26
Anmeldedatum: 18.12.17
Wohnort: ---
Version: R2016b
     Beitrag Verfasst am: 26.01.2018, 11:17     Titel:
  Antworten mit Zitat      
Hallo,

danke nochmals für deine Hilfe. Ich habs soweit hinbekommen wie ich es haben wollte. Eine kurze Frage hätte ich dennoch und zwar kann bei dieser Funktion:

Aligned = synchronize (Time_freq, Time_nfreq, 'first');

auch Zeitintervalle angeben, z.B. alle 12 minuten. Ich habe folgendes ausprobiert jedoch bekomme ich diesen Error:

Aligned = synchronize (Time_freq, Time_nfreq, 'Uniform', 'Interval', 0.2);

Error:'Uniform' is not a valid specification of target time vector for synchronization.

Mir fällt leider nichts anderes ein was ich ausprobieren könnte.

Danke und lg
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: 26.01.2018, 16:56     Titel:
  Antworten mit Zitat      
Hallo,

du müsstest die Syntax
Code:
TT = synchronize(TT1,TT2,newTimes,method)

nutzen.

newTimes ist dabei ein datetime-Vektor, z.B.
Code:
t = datetime('now'):minutes(12):datetime('now')+caldays(1);


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite Zurück  1, 2

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.