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

Unrelevante Werte rauslöschen

 

Amateur12345
Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 29.01.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.02.2015, 16:05     Titel: Unrelevante Werte rauslöschen
  Antworten mit Zitat      
Servus zusammen,

ich habe mal wieder eine Frage.
Ich möchte gerne eine Messung auswerten.
Die Messung beschreibt eine Geschwindigkeit über die Zeit (x-Wert: Zeit, y-Wert Geschwindigkeit).
Problem ist jetzt, dass die Messung erst bei 2 Sekunden startet. Für diese Zeit läuft die Messung quasi auf 0!

Ich möchte nun die Werte für diese Zeit rauslöschen, weil sie unrelevant sind.

Habe mir das in etwa so gedacht, das funktioniert aber nicht:

Code:


c= v1;
find(c>0);
c=find(c>0);
figure(1)
hold on
grid on
plot(c(:,1),c(:,2),'r','LineWidth',2);
 


Es erscheint dann folgende Fehlermeldung:

??? Index exceeds matrix dimensions.

Ich habe auch kein Problem damit, es nicht über "find" zu machen, sondern irgendwie anders mit dem Wert der 2 Sekunden, also sozusagen manuell.

Hat jemand eine Idee?
_________________

Grüße Amateur
Private Nachricht senden Benutzer-Profile anzeigen


Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 03.02.2015, 16:17     Titel:
  Antworten mit Zitat      
Der Beispielcode schmeisst verschiedene Dinge zusammen. Zunächst einmal: Um unnötige Werte nicht darzustellen muss man sie nicht zwangsläufig löschen. Beispiel:

Code:

v=[0 0 0 0 1 2 3 4] % Die Nullen sind "falsch"
%plot(v) % alles darstellen
plot(v(5:8)) % nur den relevanten Teil darstellen
 


Wenn man aber löschen will

Code:

v=v(5:8)
 


Natürlich gibt es Fälle, wo man auch FIND anwendet um unrealistische Werte zu identifizieren, oder andere Ausreissertests, aber hier ist es ja nur der Anfang eines Signals.

Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 03.02.2015, 16:18     Titel:
  Antworten mit Zitat      
Hallo,

vermutlich so:
Code:
relevant = c(:,2) > 0;
plot(c(relevant,1),c(relevant,2),'r','LineWidth',2);


Du kannst auch mit dem Debugger durch den Code navigieren. Dann siehst du z.B., dass du mit c=find(c>0); deine Daten den relevanten Indizes überschreibst, was du sicher nicht willst.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 29.01.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.02.2015, 16:30     Titel:
  Antworten mit Zitat      
Hallo zusammen,

danke für eure Hilfe.

@Andreas: Ich kann das so nicht machen, weil das ja unendlich viele Werte sind, kann ja nicht sagen wie viele Werte =0 sind bis die Geschwindigkeit >0 ist. Oder habe ich das nur nicht verstanden?

@Harald: Ich habe deinen Hinweis so übernommen, leider wird der Graph genauso abgebildet wie vorher.

-.-
_________________

Grüße Amateur
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 03.02.2015, 16:57     Titel:
  Antworten mit Zitat      
Hallo,

ich schrieb ja "vermutlich", denn ich konnte anhand der Beschreibung nur raten, wo nun die zu ignorierenden Nullen sind: In der ersten Spalte? In der zweiten Spalte? In einer der beiden? - Ich habe mich für die zweite entschieden.

Für
Code:
c = [1 0;
    2 0;
    3 1;
    4 2];

passiert auch das gewünschte.

Wenn es also für deine Daten nicht klappt, musst du entweder
a) selbst herausfinden wieso und den Vorschlag entsprechend anpassen oder
b) uns Daten zur Verfügung stellen, bei denen das Problem auftritt.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 29.01.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.02.2015, 08:57     Titel:
  Antworten mit Zitat      
Hi Harald,

ja hast Recht. ich plotte es ursprünglich ganz einfach so:

Code:

figure(1)
hold on
grid on
plot(v1(:,1),v1(:,2));
 


Das gibt den gewünschten Graphen wieder. Da läuft die Messung halt die ersten 2 Sekunden auf "0", das möchte ich halt weg bekommen.
Der Graph soll also direkt im Ursprung starten. und Nicht erst 2 Sekunden lang als waagrechte Linie auf "0" laufen.
_________________

Grüße Amateur
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

die Frage, wo in den Daten die Nullen sind, ist damit leider nicht wirklich beantwortet.
Die Linie sollte mit meinem Vorschlag erst bei der ersten Nicht-Null starten. Wenn du sie in den Ursprung verschieben willst, dann wird es am einfachsten sein, den ersten Nicht-Null-Zeitpunkt vom Zeitvektor abzuziehen.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 29.01.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.02.2015, 12:40     Titel:
  Antworten mit Zitat      
Servus Harald,

ja genau! Ich weiß eben nicht genau, wo die erste Null ist. Sie lagt bei dem X-Wert 2! Also X-Wert= 2.00!

Wie würdest du dass dann machen?
_________________

Grüße Amateur
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

die Frage ist doch eher, wo die erste Nicht-Null ist?

Das wäre in Anlehnung an obigen Code:
Code:
tstart = c(find(relevant, 1, 'first'), 1);

Dabei gehe ich davon aus, dass in der ersten Spalte die Zeiten stehen.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 29.01.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.02.2015, 14:38     Titel:
  Antworten mit Zitat      
Servus Harald,

danke für deine Hilfe. Ich geb es jetzt aber auf, bekomme es nicht hin.
Schade, trotzdem danke!

Grüße Crying or Very sad
_________________

Grüße Amateur
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

ich hätte mir auch gewünscht, dass wir schneller vorankommen.
Dazu benötigt man jedoch eindeutige Aussagen, welche Daten vorliegen und was genau damit erreicht werden soll. Für dich wird das intuitiv klar sein, für Leute die mit deiner Anwendung nichts zu tun haben jedoch nicht unbedingt. Ich habe jedenfalls anscheinend entweder noch nicht verstanden, wie deine Daten vorliegen oder was du genau erreichen möchtest.

Ich hatte dich ja um Beispieldaten gebeten, da dies wohl das Problem aufklären würde. Leider hast du jedoch keine bereitgestellt.

Hier nochmal das komplette Beispiel:
Code:
c = [1 0;
    2 0;
    3 1;
    4 2
    5 2.5];
relevant = c(:,2) > 0;
tstart = c(find(relevant, 1, 'first'), 1);
plot(c(relevant,1)-tstart,c(relevant,2),'r','LineWidth',2);


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

Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 29.01.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.02.2015, 15:23     Titel:
  Antworten mit Zitat      
Servus Harald,

danke für deine Geduld. Ich fang jetzt mal ganz von vorne an, eventuell kannst du mir dann helfen.

Ich lade ein Messfile, in diesem Messfile wurde die Geschwindigkeit eines Objektes gemessen. Dieses Geschwindigkeitssignal weise ich zuerst einer Variablen zu. Diese Variable heißt: v1

Wenn ich nun v1 wie folgt plotte, erhalte ich den Graphen genau so wie ich ihn haben will, mit einer Ausnahme.
Code:

plot(v1(:,1),v1(:,2),'LineWidth',2);
 


Die Ausnahme ist jetzt das Problem, dass das Objekt erst nach 2 Sekunden beschleunigt wird und somit auch erst nach 2 Sekunden eine Geschwindigkeit v1>0 aufweist.
Diese 2 Sekunden möchte ich aus dem Plott raushaben, sodass der Geschwindigkeitsgraph schon direkt im Urpsung eine Steigung aufweist.

Ich hänge mal ein Bild an.
Eventuell hilft ja das.

Ma.PNG
 Beschreibung:

Download
 Dateiname:  Ma.PNG
 Dateigröße:  2.36 KB
 Heruntergeladen:  290 mal

_________________

Grüße Amateur
Private Nachricht senden Benutzer-Profile anzeigen
 
Amateur12345
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 29.01.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.02.2015, 15:25     Titel:
  Antworten mit Zitat      
Der Bereich der geschweiften Klammer soll bitte weg und die gelb markierte Stelle in den Ursprung^^

Danke und viele Grüße aus Hamburg
_________________

Grüße Amateur
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 04.02.2015, 15:34     Titel:
  Antworten mit Zitat      
Hallo,

gut, so hatte ich das verstanden.
Wenn du mein Beispiel mit meinen Beispieldaten ausführst, klappt es dann wie gewünscht?

Wenn nein, inwiefern nicht?
Wenn ja, sind wir wieder fast an der alten Stelle:
Zitat:
Wenn es also für deine Daten nicht klappt, musst du entweder
a) selbst herausfinden wieso und den Vorschlag entsprechend anpassen oder
b) uns Daten zur Verfügung stellen, bei denen das Problem auftritt.


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

Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 29.01.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.02.2015, 08:24     Titel:
  Antworten mit Zitat      
Servus Harald,

ja mit deinen Beispieldaten klappt es, genau so möchte ich es haben!
Ich habe nur Probleme, deinen Code jetzt auf meine Anwendung zu übertragen.. Ist ganz schön schwer als Neuling.
_________________

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

Gehe zu Seite 1, 2  Weiter

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.