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

Spikes

 

Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.03.2013, 21:22     Titel: Spikes
  Antworten mit Zitat      
Hallo Matlabfreunde,

mein simuliertes Messgerät könnte mir Daten mit Spikes liefern. Die Abweichungen von erwarteten Wertveerlauf können positiv wie auch negativ sein.

Bislang habe ich versucht mit:

Code:
Rt = [false, diff(A) > 5];


abzufangen, also wenn aufeinanderfolgende Werte eine Differenez von 5 hat, wird es erkannt.

Doch gibt es eine bessere Möglichkeit es abzufangen?


Harald
Forum-Meister

Forum-Meister


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

inwiefern soll es denn besser sein? Viel kompakter kann nicht gehen.

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



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.03.2013, 20:44     Titel:
  Antworten mit Zitat      
Das Problem ist halt folgendermaßen zu sehen, beispielsweise wenn ich zwei arrays hätte

A = [0 1 2 3 0 1 2 3 4 2 -30 -31 -32 -30 - 25]
B = [0 1 2 3 0 1 2 3 4 2 -30 -31 2 3 1 5 6 ]

Laut meinem Filter wird der Wert von 2 auf -30 als Spike angesehen.

Bei dem Array B ist es der Fall, doch bei A verhält es sich wieder normal.

Würde gerne sowas abfangen!
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 23.03.2013, 00:04     Titel:
  Antworten mit Zitat      
Hallo,

du fängst mit deinem Befehl lediglich ab, wenn (neuer Wert - alter Wert) > 5. Wenn du Sprünge in beide Richtungen abfangen willst, musst du eben den Betrag nehmen:

Code:
Rt = [false, abs(diff(A)) > 5];


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



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.03.2013, 01:08     Titel:
  Antworten mit Zitat      
Ich habe mich nicht gut ausgedrückt.

Bei dem Beispielarray A, da wechselt ja die Amplitude um -30. Dies ist für mich kein spike sondern korrekter verlauf. weil die nächsten werte nach dem sprung sich halt um die -30 bewegen.


Wobei bei dem Beispiel B von 2 auf -30 und danach wieder auf 2 gesprungen wird.
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.03.2013, 14:56     Titel:
  Antworten mit Zitat      
ist es immer noch nicht klar genug
 
Nras
Forum-Meister

Forum-Meister


Beiträge: 608
Anmeldedatum: 21.02.12
Wohnort: ---
Version: 7.12.0.635 (R2011a)
     Beitrag Verfasst am: 24.03.2013, 15:35     Titel:
  Antworten mit Zitat      
Hallo,

ich fürchte, zuerst musst Du genauer werden. Ist bei Dir definiert, wie lang so eine Folge von Werten maximal sein darf, damit es ein Spike ist? Dann könntest du nach Haralds Vorschlag
Code:
Rt = [false, abs(diff(A)) > 5];

einfach den Abstand zwischen zwei Einsen auslesen. Ist der Abstand klein genug, dann ist es ein Spike, ansonsten verhält es sich "normal".

Viele Grüße,
Nras.
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.03.2013, 19:55     Titel:
  Antworten mit Zitat      
Ein kleines problem hätte ich auch noch
Code:
A = 66 * rand(1000,1) - 333; %zufälllig
Rt = [false, abs(diff(A)) > 5];
 

Code:
Error using horzcat
Dimensions of matrices being concatenated are not consistent.
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 25.03.2013, 20:08     Titel:
  Antworten mit Zitat      
Hallo,

Bitte poste neue Fragen in einem neuen Thema. Beim sog. Thread-Highjacking verwirrt es, das niemand mehr weiß, welche Antworten zu welchen Fragen gehören.

Du erstellst zuerst einen [1000 x 1] Vektor. DIFF(A) gibt dann einen [999 x 1] Vektor aus, weil es ja eine Differenz weniger gibt als Elemente. Das kann man dann aber nicht mehr horizontal zusammenfügen.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

in Ergänzung zu Jans Kommentar:

Code:
Rt = [false, abs(diff(A)) > 5];

setzt voraus, dass A ein Zeilenvektor ist. Wenn A ein Spaltenvektor ist, dann geht
Code:
Rt = [false; abs(diff(A)) > 5];


Und bitte sage wenigstens, ob eine Frage beantwortet ist, bevor du die nächste dranhängst.

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



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.03.2013, 18:42     Titel:
  Antworten mit Zitat      
eine frage hätte ich dennoch und zwar wie kann man jetzt gefundene bereiche beim plotten farblich darstellen. ich könnte jetzt beispielsweise bar funktion nehmen.. wie lässt sich das realisieren.
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 28.03.2013, 20:30     Titel:
  Antworten mit Zitat      
Hallo,

Es ist effizienter, wenn Du zeigst, was Du bisher versucht hast, und was nicht wie gewünscht funktioniert hat. Es ist immer sehr arbeitsintensiv ein Beispiel-Code zu erfinden, wenn das Problem nur grob geschildert wird. Dementsrpechend selten sind dann auch hilfreiche Antworten.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.03.2013, 21:46     Titel:
  Antworten mit Zitat      
Bisheriger Versuch war halt folgendes code, wobei dieser Ansatz auch von euch der runde kam

Code:
Rt = [false; abs(diff(A)) > 5];
 
Andy386
Forum-Guru

Forum-Guru


Beiträge: 485
Anmeldedatum: 24.06.09
Wohnort: ---
Version: 7.1/8
     Beitrag Verfasst am: 31.03.2013, 04:08     Titel:
  Antworten mit Zitat      
es wäre DURCHAUS hilfreich wenn du mal etwas mehr schreiben würdest.
* was hast du
* was geht nicht
* was wünscht du dir

und nicht in jedem Post extra und dann noch zu drei (3!) völlig verschiedenen Themen, sondern erstmal zu einem.
_________________

Ich hasse es wenn die Leute Fragen stellen, man dann versucht sich Mühe zu geben, und diejenigen ihren Thread nie wieder besuchen...
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.04.2013, 13:24     Titel:
  Antworten mit Zitat      
Eine Frage noch zu dem Post hier, wenn ich das unten stehende code verwende, wird mir nur der ausgangspunkt mit false versehen, jedoch sollte auch der nächste wert auch false angegeben werden.

Code:
Rt = [false; abs(diff(A)) > 5];



beispiel:

1 2 3 4 10 daraus wird doch

1 1 1 false 1
 
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.