Hallo zusammen,
ich baue, wie beschrieben, gerade eine Bluetooth-Steuerung für den SBrick, mit Potentiometer.
Leider hat der Prozessor keine analogen Eingänge.
Also wird ein Kondensator entladen und dann über das Poti geladen, die Zeit hierfür ist ein Maß für die Stellung des Potis.
Leider ist das nicht ganz unabhängig von den Prozessen, die gerade im Hintergrund laufen.
So sieht das aus:
106
109
112
105
104
102
107
108
114
79
115
115
101
113
106
108
115
105
110
113
108
103
109
Die 79 und die 115 sind die Ausreisser.
Wie findet man die?
Man müsste das Ergebnis also "glätten".
Mein Excel kann das:
Das einfachste ist, immer den Durchschnitt der letzten x Werte zu nehmen. X dabei so groß machen, dass es zu keiner erheblichen Verzögerung kommt.
Hallo Werner,
Kurzkommentar auf die Schnelle:
Lok24 hat geschrieben:
LEGO kennt kein Valsch (alte Klemmbaustein-Weisheit)
Lok24
04.11.2016, 10:11
Als Antwort auf den Beitrag von IngoAlthoefer
Editiert von
Lok24
04.11.2016, 10:14
Moin Ingo,
IngoAlthoefer hat geschrieben:
Lieber Werner,
als Mathematiker finde ich Deine Frage spannend.
Ich halte es für möglich, dass Durchschnitt-Bilden und "Wegwerfen"
oder Einglätten von Ausreißern nicht die beste Lösung sein muss.
Allerdings kenne ich von Dir bisher nur eine Serie mit 24 Datenpunkten.
Könntest Du für mich und meine Studenten, die auch immer Herausforderungen
brauchen, mehr und längere Serien (z.B. mehrere 100er) zur Verfügung stellen?
Dann hätten wir bessere Chancen, Strukturen zu erkennen.
Viele Grüsse, Ingo.
PS. Dr. Stephan Kolassa, einer meiner früheren Schüler, ist ein
führender Kopf in der (wirtschaftlichen) Forecasting-Szene.
LEGO kennt kein Valsch (alte Klemmbaustein-Weisheit)
Hallo Ingo,
IngoAlthoefer hat geschrieben:
Hallo Werner,
Lok24 hat geschrieben:
LEGO kennt kein Valsch (alte Klemmbaustein-Weisheit)
Saluton!
Ich weiß nicht, ob Du Dein Problem inzwischen gelöst hast, aber …
Lok24 hat geschrieben:
„Altgrau“ facere necesse est.
Wer Rechtschreibfehler findet, darf sie mir nennen. Ich lerne nämlich gerne dazu (ich bin allerdings „Altschreiber“).
Der_Architekt
25.01.2017, 10:49
@IngoAlthoefer
Die 1 ist KEINE Primzahl!
"Je mehr ich von den Menschen sehe, umso lieber habe ich meine Hunde."
Der Alte Fritz
Hallo Werner,
ich würde das ganze weniger als eine Mathematik-Frage sondern eher als eine Ingenieurs-Frage betrachten und mir dann einen Algorithmus basteln, der das Ziel näherungsweise erreicht.
Also was willst du erreichen? So wie ich es verstanden habe, sollen die Messwerte vom Poti um Abweichler bereinigt werden, so dass die Messwerte möglichst gleich bleiben, wenn man nicht am Poti dreht.
Ein gleitender Mittelwert ist da schon mal ein guter Ansatz, also in jedem Schleifendurchlauf einen Mittelwert über die letzten n Werte (z. B. "Breite" n=10) bilden. Nachteile dieser Methode sind, dass krasse Ausreißer den Mittelwert doch um ein paar Prozent verschieben können und dass eine Änderung am Poti durch den Benutzer erst mit Verzögerung wahrgenommen wird. Na ja, die Änderung kann schon schnell wahrgenommen werden, der Messwert-Mittelwert pendelt sich allerdings erst nach n Schleifendurchläufen auf den neuen Zielwert ein - je nach Abfrageintervall (z. B. 1 Messwert pro Sekunde) kann dem Benutzer viel das zu lange dauern.
Aufgrund deiner Beispiel-Messwert-Reihe gehe ich mal davon aus, dass es sich mit großer Wahrscheinlichkeit immer um einzelne Ausreißer handelt. Wenn zwei Ausreißer nacheinander auftreten hat, sei das ein Indikator dafür, dass am Poti gedreht wurde. Um die einzelnen Ausreißer zu eliminieren und auf Änderungen am Poti mit geringer Nachlaufzeit zu reagieren, würde ich daher einen gleitenden Mittelwert mit variabler Breite anwenden. Man muss detektieren, ob am Regler gedreht wurde, und dann die Breite des gleitenden Mittelwerts herabsetzen. In der Folge wird zur Stabilisierung des Mittelwerts die Breite schrittweise wieder heraufgesetzt:
n=1
Schleifenbeginn
Bilde den Mittelwert aus den letzten n Werten.
Prüfe, ob der neue Messwert mehr als XX vom alten Mittelwert abweicht.
Falls nein (es handelt sich nicht um einen Ausreißer):
-Setze n=n+1, sofern n<10 ist.
-Beginne die Schleife von vorne.
Falls ja (Ausreißer, Prüfung ob am Regler gedreht wurde):
-Warte auf den nächsten neuen Messwert (bilde aber keinen neuen Mittelwert).
-Prüfe, ob der neue Messwert wieder mehr als XX vom alten Mittelwert abweicht.
-Falls ja (2 Ausreißer hintereinander -> es wurde vermutlich am Regler gedreht):
--Setze n=2.
--Beginne die Schleife von vorne.
-Falls nein (es handelt sich nicht um einen Ausreißer):
--Setze n=n+1, sofern n<10 ist.
--Beginne die Schleife von vorne.
Schleifenende
XX ist eine Variable, die du durch Ausprobieren selbst finden musst. Das kann eine Prozentangabe sein (z. B. 20 %) oder eine feste Abweichung in Messeinheiten (z. B. 20). Auch die maximale Breite des gleitenden Mittelwerts (im obigen Beispiel 10) kannst du variieren.
Hallo Matthias,
vielen Dank für die Ausführliche Antwort.
Das hatte ich gemacht ist aber eben sehr träge.
Ich habe jetzt einen A/D Wandler hier, der auf den Einbau wartet.
Der Raspberry löst das über das Laden eines C, das ist eher Murks.
Ich hatte das hier such unter "Fahrpult SBrick" gepostet.
Grüße
Werner