Forum: Mikrocontroller und Digitale Elektronik Tendenz bestimmen


von Kalle (Gast)


Lesenswert?

Hi,

ich habe verschiedene Messwerte, die zeitlich nacheinander liegen. 
Welche einfache Algorithmen oder Methoden kennt ihr um mit einem 
Mikrocontroller zu prüfen, ob die Messwerte nach oben, unten oder 
seitwärts wandern? Besonderheit, die Messwerte können auch mal Ausreißer 
nach oben oder unten haben.

Beispiel:
1
Zeitpunkt | 0  |   1   |   2       |   3    |    4     |    5     |   6
2
--------------------------------------------------------------------------
3
Messwert: | 204| 0 (A) |  150 (B)  |  180   |    153   |   128    |  128
4
5
A = Ausreißer
6
B = Ausläufer von einem Ausreißer
Im Beispiel soll als Ergebnis "fallend" herauskommen.

Ich mache es gerade mit der Methode der kleinsten Quadrate und bestimme 
die Ausgleichsgerade. Das ist bei kleiner Anzahl von Messwerte, die 
Ausreißer enthalten, manchmal sehr ungenau und ergibt auch ein falsches 
Ergebnis.
In diesem Beispiel würde als Steigung zum Beispiel gerundet 1, also 
steigend, herauskommen.

Danke

von Klaus R. (klara)


Lesenswert?

Hallo,
lineare Regressionsanalyse.
mfg klaus

von Mike (Gast)


Lesenswert?

Klaus Ra. schrieb:
> lineare Regressionsanalyse.

Und wie unterscheidet die sich von einer Ausgleichgeraden, die mit der 
Methode der kleinsten Fehlerquadrate bestimmt wurde?

Kalle schrieb:
> Ich mache es gerade mit der Methode der kleinsten Quadrate und bestimme
> die Ausgleichsgerade. Das ist bei kleiner Anzahl von Messwerte, die
> Ausreißer enthalten, manchmal sehr ungenau und ergibt auch ein falsches
> Ergebnis.

Der Median ist bei Ausreißern wesentlich stabiler.

Um eine Tendenz zu erkennen, könntest du auch den Run-Test verwenden. 
Dafür müssen aber Ausreißer bereits entfernt sein.

von Oldie (Gast)


Lesenswert?

Du nennst die Messwerte der Zeitpunkte 1 und 2 Ausreißer,
bzw. vom Ausreißer abhängig.
Das "weiß" ein Tendenz-Algorithmus nicht.

Wenn (!) du ein Erkennungsmerkmal für Ausreißer benennen
kannst, z.B. Sprung nach oben/unten absolut größer, als ein
vorgegebenes absolut Limit, könntest du diesen Ausreißer
durch den vorigen Wert +/- Limit ersetzen.

Sind die Ausreißer nicht zu häufig, pendelt sich das ganz
schnell wieder auf den "wahren" Ablauf ein.

Wenn dadurch eine Tiefpass-Wirkung entsteht, schadet das
der Tendenz-Erkennung auch nicht.

Bei Limit = 50 würde aus der Abfolge

| 204 |   0   |    150    |  180   |    153   |   128    |  128

die Änderungs-begrenzte Abfolge

| 204 |  154  |    150    |  180   |    153   |   128    |  128

Diese sollte bei der Betrachtung durch Tendenz-Algorithmen
ohne Schwierigkeit als "fallend" erkannt werden.

von Kalle (Gast)


Lesenswert?

@Mike: Wie ich den Run-Test auf das geschilderte Problem anwenden kann, 
ist mir noch nicht ganz klar. Kannst du das näher erläutern?

@Oldie: Deine Idee finde ich gut. Ich werde das Limitieren an Hand von 
realen Werten prüfen. Bin gespannt auf das Resultat. Gut gefällt mir 
daran auch, dass das ganze bei Ausreißern im ersten Messwert 
funktionieren sollte.

von Johnny (Gast)


Lesenswert?

Ich würde ein schnelles und ein langsames Tiefpassfilter implementieren 
(z.B. IIR, das geht super einfach mit ca. 3 kurzen Zeilen C Code) und 
dann für die Tendenz diese gefilterten Werte miteinander vergleichen.

von Klaus P (Gast)


Lesenswert?

Kalle schrieb:
> Hi,
>
> ich habe verschiedene Messwerte, die zeitlich nacheinander liegen.
> Welche einfache Algorithmen oder Methoden kennt ihr um mit einem
> Mikrocontroller zu prüfen, ob die Messwerte nach oben, unten oder
> seitwärts wandern? Besonderheit, die Messwerte können auch mal Ausreißer
> nach oben oder unten haben.

Besonders einfache Methode: Gleitender Mittelwert. Reicht häufig aus.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.