Verfasst am: 02.05.2013, 08:58
Titel: NaN Vektor an beliebiger Stelle(i) in Datenmatrix einfügen
Hallo zusammen,
ich versuche mittels MatLab Daten von graphomotorischen Tests auszuwerten. Das zur Datenerfassung verwendete Tablet liefert eine (mx6)Datenmatrix. Da bei der Schriebbewegung immer wieder abgesetzt wird, entstehen Sprünge (es wird nicht kontinuierlich aufgezeichnet, sondern nur wenn die Pen im aktiven Bereich ist) --> siehe Zeile 1103/1104
Nach genau diesen Sprüngen möchte ich in meiner Matrix eine Zeile NaN einfügen und alle anderen Zeilen nach unten verschieben, um die Bewegungen separieren zu können.
Irgendwie funktioniert das aber nicht so richtig.
Mit dieser Funktion wird logischerweise immer eine Zeile in der Matrix überschrieben, was unerwünscht ist.
Code:
function[Delta] = DetectInterrupt(Delta,Threshold) % if delta>threshold movement is interrupted --> pen not on display % --> set value NaN to seperate movements for i=1:length(Delta)-1 if(Delta(i+1,2)-Delta(i,2)>Threshold)
Delta(i+1,1)=NaN;
end end end
Ein Problem hab ich leider doch noch. Meine Zeile NaN wird eine Stelle zu früh eingefügt. Ich verstehe aber leider nicht wieso und wie ich das ändern kann?! Hab jetzt ein paar Varianten durchprobiert, aber keine Lösung gefunden.
Du siehst, der Sprung ist eigentlich zw. Zeile 841/842. daher sollte NaN dazwischen eingeschoben werden (842).
function[NewDelta] = DetectInt(Delta,Threshold) % if delta>threshold movement is interrupted --> pen not on display % --> set value NaN to seperate movements for i=0:length(Delta)
index = cumsum(([0; diff(Delta(:,2))>Threshold])+1);
NewDelta = NaN(index(end),2);
NewDelta(index,:) = Delta;
end end
Wenn ich deinen geposteten Code bei mir lauffähig umschreibe, macht er genau das, was er soll, findet also die Lücke an der richtigen Stelle.
Frage: wozu hast du die Schleife über alle Zeilen drinn?`die ist mMn überflüssig.
Und dein geposteter Code funktioniert nicht für Matrizen mit mehr als 2 Spalten, da du NewDelta nur mit 2 Spalten vorerstellst.
Code:
index = cumsum(([0; diff(Delta(:,2))>Threshold])+1);
NewDelta = NaN(index(end),size(Delta,2));
NewDelta(index,:) = Delta;
aber bei mir wird nach wie vor die NaN Zeile eine Stelle zur früh eingefügt - verstehe ich ehrlichgesagt nicht.
Wie sieht der cumsum-Vektor bei dir aus?
Es stimmt auch, denn die Differenz ist ja an Stelle 841 > Threshold.
Aber die Zeile NaN sollte danach eingefügt werden.
Eine Idee, wie ich das hinbekomme?
Ähm - Moooohment!
Wie sieht deine Matrix aus, die du dem Delta übergibst? Hat diese 2 oder 3 Spalten?
Ich ging davon aus, dass es drei Spalten sind. Aber evt. übergibst du ja nur Spalte 2 und 3 aus dem Beispiel -> dann würde das Ergebnis passen, da in Spalte 3 der Sprung an genau der Stelle ist.
_________________
LG
Martina
"Wenn wir bedenken, daß wir alle verrückt sind, ist das Leben erklärt." (Mark Twain))
Dann ist klar, woher der Fehler kommt: du suchst derzeit in der ZWEITEN Spalte nach einem Sprung, musst aber die 1.Spalte nutzen.
Du musst also in der cumsum-zeile "Delta(:,2)" in "Delta(:,1)" ändern.
Ich ging davon aus, dass du 3 Spalten hast...somit paßte es, dass er in der zweiten Spalte sucht.
Code:
index = cumsum(([0; diff(Delta(:,1))>Threshold])+1);
NewDelta = NaN(index(end),size(Delta,2));
NewDelta(index,:) = Delta;
ich habe meinen Fehler soeben gefunden. Ich habe in der Delta-Matrix bereits die Differenz der Zeitwerte drinnen.
Wenn ich nur die Zeitwerte nehme und die Berechnung durchführe klappts
Vielen Dank für deine Hilfe!!
lg Lisa
Einstellungen und Berechtigungen
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
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.