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

Zeitvektor und Datenmatrix auffuellen

 

RatioTM
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 51
Anmeldedatum: 24.04.18
Wohnort: Genf
Version: ---
     Beitrag Verfasst am: 30.07.2018, 20:21     Titel: Zeitvektor und Datenmatrix auffuellen
  Antworten mit Zitat      
Hallo,

ich moechte eine function schreiben, die mir eine beliebige m x n- Matrix und einen Zeitvektor bei Unterbrechungen ergaenzt. Das Problem ist im Anhang gezeigt: ich habe verschiedene Datensaetze mit unterschiedlichem Hintergrund. Wenn ein Instrument beispielsweise gewartet wurde, sammelt es ueber diesen Zeitraum keine Daten und ich erhalte einen Sprung in der Datenerfassung.
Diese Spruenge zeigen sich als kurze Stufen in unterem Plot.

Nehmen wir an, das Instrument sammelt 50 verschiedene Daten zur gleichen Zeit; nun moechte ich dass immer dann, wenn ich eine Stufe in der Zeit habe, die Daten durch NAN-Werte aufgefuellt werden und zugleich die Zeit weiter laeuft, sodass ich einen konstanten Zeitvektor ohne unterbrechungen erhalte.

Mein Konzept sieht bisher wie folgt aus:

Code:
function [newtime,newData]=timefill (time,data)
%[time,data]= timefill(time,data)
% -> time and data will be filled with nans wherever the data series is interrupted

n = time(end);
newData = nan(n, 1);
newData(time) = data;
newtime= nan(n,1);
newtime(time)= time;


Das ganze ist schoen und gut, jedoch funktioniert es
i) nur fuer n x 1 matrizen (was sich mit einer schleife allerdings beheben lassen sollte)
ii) nur solange der Zeitvektor aus integers besteht...

fuer i) sieht meine erste Idee folgendermassen aus:

Code:
function [newtime,newData]=timefill (time,data)
%[time,data]= timefill(time,data)
% -> time and data will be filled with nans wherever the data series is interrupted

n = time(end);
newData= zeros(size(data));
newtime= zeros(size(time));
for i=1: size(data,1)
newData(i,:) = nan(n, i);
newData(time) = data;
newtime= nan(n,1);
newtime(time)= time;
end


Wobei das noch nicht ausgereift ist. Ich habe jedoch das Gefuehl, mit meinem Ansatz in eine Sackgasse zu kommen und da irgendein Denkfehler drin ist, weshalb das so nicht moeglich ist.

Kennt ihr eine MATLAB Function/ eine Syntax, mit der ich hier weiterkomme (die ich womoeglich nicht kenne)?

Vielen Dank fuer eure Ratschlaege!

HTOF_averaging.png
 Beschreibung:

Download
 Dateiname:  HTOF_averaging.png
 Dateigröße:  34.12 KB
 Heruntergeladen:  251 mal
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


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

timetable und vor allem retime könnte helfen.

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
 
RatioTM
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 51
Anmeldedatum: 24.04.18
Wohnort: Genf
Version: ---
     Beitrag Verfasst am: 31.07.2018, 13:01     Titel:
  Antworten mit Zitat      
Hallo,

Vielen Dank fuer den Tipp!
das geht auf jeden Fall in die Richtung; der Documentation zu Folge muss ich jedoch hierbei wie folgt vorgehen:
Code:
dt = minutes(x);
TT2 = retime(TT1,'TimeStep',dt)


jetzt gibt es dabei ein Problem: Ich moechte, dass der Code auf verschiedene Instrumente anwendbar ist, wobei ich so gut wie nie eine "glatte Zahl" habe (also beispielsweise habe ich folgende Zeitstempel: 14.10. 23:58:43; 15.10. 00:03:42; 15.10. 00:08:41; .....)

Ich moechte also im Grunde, dass der Code die Zeitmittelung entweder erkennt, oder in der function vorgegeben bekommt (was hier durch x erfuellt waere).
retime scheint mir hier jedoch die Zeit anzunaehern statt sie fortzufuehren. Hinzukommend packe ich meine Zeitstempel stets in double Matrizen mit matlab zeitstempel; ich muesste also eigentlich nur das delta der matlabzeitstempel erkennen lassen und im Falle von unterbrechungen dieses fortfuehren..meiner Meinung nach wuerde mein erster Ansatz weiter oben dies erfuellen koennen, sofern ich diesen "auf Matlabzeit" beziehen kann und von den integers wegkomme. Was ist deine Meinung dazu?
Private Nachricht senden Benutzer-Profile anzeigen
 
DerElch
Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 18.07.18
Wohnort: Wien
Version: 2017b
     Beitrag Verfasst am: 31.07.2018, 17:21     Titel:
  Antworten mit Zitat      
Da ich keine Daten derzeit habe folgendes:

Die Stellen finden wo der Zeitsprung ist (siehe diff )
Anhand von Messfrequenz und linspace einen Vektor bauen
Länge von Vektor nehmen und passende Anzahl an NaN Spalten generieren.
Neues Array bauen mit Länge Alt + Länge neu hinzugefügt

Fertig Wink
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

mir ist die Problematik nicht klar. Ein nachvollziehbares Beispiel wäre sehr hilfreich. Dann wüsste man auch, was "in double Matrizen mit matlab zeitstempel" heißen soll.

Bei retime gibt es verschiedene Aufrufmöglichkeiten. Es wäre verwunderlich, wenn das, was du brauchst, nicht dabei ist.

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
 
RatioTM
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 51
Anmeldedatum: 24.04.18
Wohnort: Genf
Version: ---
     Beitrag Verfasst am: 05.08.2018, 17:36     Titel:
  Antworten mit Zitat      
Hallo,

ich habe euch eine typische Zeitserie angehaengt. Wenn ihr diese plottet, werdet ihr sehen, dass es dort immer wieder kleine unterbrechungen gibt, die es auch im dazugehoerigen datensatz zur gleichen Zeit gibt. Dies passiert wegen beispielsweise Wartungen am Instrument und ist bei jedem Instrument anders in Laenge und Regelmaessigkeit.
Ziel muesste sein
i)diese Unterbrechungen per Programm zu erkennen und die Zeitserie hier zum einen weiterzufuehren
ii) den Zugehoerigen Datensatz zu diesen Zeitpunkten mit NaN Werten aufzufuellen.

time.mat
 Beschreibung:

Download
 Dateiname:  time.mat
 Dateigröße:  27.85 KB
 Heruntergeladen:  250 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
RatioTM
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 51
Anmeldedatum: 24.04.18
Wohnort: Genf
Version: ---
     Beitrag Verfasst am: 05.08.2018, 19:17     Titel:
  Antworten mit Zitat      
DerElch hat Folgendes geschrieben:
Da ich keine Daten derzeit habe folgendes:

Die Stellen finden wo der Zeitsprung ist (siehe diff )
Anhand von Messfrequenz und linspace einen Vektor bauen
Länge von Vektor nehmen und passende Anzahl an NaN Spalten generieren.
Neues Array bauen mit Länge Alt + Länge neu hinzugefügt

Fertig Wink


Hallo,

grundsaetzlich ist dieser Ansatz nicht schlecht; er wuerde sich fuer die Zeit auch wie folgt verwirklichen lassen (fuer obigen Datensatz):

Code:

a=mean(diff(time(1:x)))
time_new=linspace(min(time),max(time),(max(time)-min(time))/a)
 


Jedoch muss ich die NaN Werte genau an jenen Orten einsetzen, an denen ich bei time die unterbrechungen habe, da ich sonst die Messwerte verzerren wuerde. Das scheint mir hier komplizierter, da ich einfach die NaN Werte demnach aufaddieren wuerde bei der Data Matrix...
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 - 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.