Forum: Digitale Signalverarbeitung / DSP / Machine Learning Glättung von Messwerten


von Nikolas S. (dustinthewind)


Angehängte Dateien:

Lesenswert?

Hallo,

ich würde gerne die Messwerte, die im angehängten Screenshot blau 
dargestellt sind glätten.
Dazu habe ich ein Kalmanfilter angewandt, den ich in einem anderen Forum 
gefunden habe (grün dargestellt).
Da das Kalmanfilter komplex und schwer zu beschreiben ist, habe ich eine 
exponentielle Glättung (wird eher im Wirtschaftlichen Bereich genutzt) 
angewandt (grau dargestellt).
Die Formel für die exponentielle Glättung habe ich aus einem Video 
(https://www.youtube.com/watch?v=W0oSM7AkU-0).
Formel: Y'1 = α*X1 + (1-α)*Y'0

Kann mir jemand sagen was der Unterschied zwischen den beiden 
Glättungsverfahren ist?

von Dennis (Gast)


Lesenswert?

Oha, da fehlen aber ganz schön viele Grundlagen.

Mach doch erst einmal ein Tiefpass drüber, und schau mal welche 
Verzugszeit für dich noch akzeptabel ist.

von Hannes (Gast)


Lesenswert?

Nikolas S. schrieb:
> Dazu habe ich ein Kalmanfilter angewandt, den ich in einem anderen Forum
> gefunden habe (grün dargestellt).

Ich mag da in meinem Horizont beschränkt sein, aber ein Kalmanfilter 
mit keinen weiteren Eingangsdaten als einer einzelnen Messreihe 
erscheint mir etwas sinnlos. Wie sieht die Implementierung denn aus?

von sid (Gast)


Lesenswert?

Dennis schrieb:
> Oha, da fehlen aber ganz schön viele Grundlagen.
>
> Mach doch erst einmal ein Tiefpass drüber
HUST!

und er schrieb
Nikolas S. schrieb:
> Formel: Y'1 = α*X1 + (1-α)*Y'0

das ist ein Tiefpassfilter erster Ordnung
(0 < a < 1)

filterwert_neu = a*Eingangswert + (1-a)*filterwert_alt
filterwert_alt = filterwert_neu

na? erkennstes jetzt oder "fehlen da die Grundlagen" ;)

'sid

von sid (Gast)


Lesenswert?

Nikolas S. schrieb:
> Kann mir jemand sagen was der Unterschied zwischen den beiden
> Glättungsverfahren ist?

Oh verzeihung, vergessen.

der Tiefpassfilter verschiebt den "neuen" Wert möglichst nah in Richtung 
des "alten" werts eben mit dem faktor dem Du ihm zugeschrieben hast.

ein (vereinfachter iterativer) kalmanfilter versucht anhand bekannter 
Werte den neuen Wert vorherzusagen (er schätzt also den Grad der 
Änderung)
und versucht dann den neuen wert möglichst in richtung des 
'geschätzteen' wertes zu verschieben.

stark vereinfacht gesagt
in der Folge 10,20,30,40,50 (und neuem wert) 65
versucht der tiefpass die 65 in richtung 50 zu korrigieren,
der kalman versucht die 65 in richtung 60 zu korrigieren.

kalman filter gibt es aber unterschiedliche Ansätze, komplexere und 
weniger komplexe, iterative und rekursive filter usw usf.
sowie es auch beim Tiefpassfilter mehrere Ansätze gibt.

Welcher der für Dich richtige ist, kann man NUR anhand bekannter 
Messdaten schätzen und dem Zweck besagter Daten.
Am besten ist Du schaust Dir ein paar filter funktionen an,
und implementierst möglichst viele unterschiedliche für ein und dieselbe 
Messreihe.
(im ideal in einzelnen graphen für die Übersichtlichkeit jeweils mit 3 
oder 4 unterschiedlichen koeffizienten/parametern)
und dann suchst Du dir den graphen raus, der die für dich wichtige 
Information möglichst klar darstellt.

Im Grunde ist das nämlich "geschmacksache" was man für 
sinnvoll/übersichtlich hält.

'sid

Beitrag #6383666 wurde von einem Moderator gelöscht.
von Dennis (Gast)


Lesenswert?

sid schrieb:
> Am besten ist Du schaust Dir ein paar filter funktionen an,
> und implementierst möglichst viele unterschiedliche für ein und dieselbe
> Messreihe.
> (im ideal in einzelnen graphen für die Übersichtlichkeit jeweils mit 3
> oder 4 unterschiedlichen koeffizienten/parametern)
> und dann suchst Du dir den graphen raus, der die für dich wichtige
> Information möglichst klar darstellt.

Bullshit, das ist basteln bzw. dumm rumprobieren. Wenn du es halbwegs 
wie ein Profi machen willst: du machst ein FFT über dein Signal und 
schaust dein Spektrum an. Definierst den Frequenzbereich der für dich 
von Nutzen ist. Den Rest filterst (also bedämpfst) du soweit weg bis es 
nicht mehr stört. Abhängig vom Bereich eignet sich dazu ein Tiefpass gut 
(idealerweise diskret vor dem Meßeingang, dann hast du auch direkt die 
anti-aliasing mit dabei sowie ein paar weitere Vorteile). Den Rest kann 
man digital filtern (Tiefpass , Bandpass , Whatever).

sid schrieb:
> Im Grunde ist das nämlich "geschmacksache" was man für
> sinnvoll/übersichtlich hält.

Ebenfalls blödsinn. Da kommen eher Sachen wie Filterstabilität, 
Gruppenlaufzeit u.ä. ins Spiel, und es ist definitiv nicht 
"Geschmacksache".

Sid: für dich speziell mal eine kleine Denksportaufgabe, da du ja so 
überzeugt von dir bist: Was unterscheidet einen echten Tiefpass von 
deinem oben dargestellen Formel? Bitte nicht vereinfachen, ruhig mal den 
Könner raushängen lassen :-)

von Operator S. (smkr)


Lesenswert?

Such mal nach FIR und IIR, das sind zwei Implementationsarten für 
digitale Tiefpässe. 
https://de.wikipedia.org/wiki/Filter_mit_endlicher_Impulsantwort

Wenn man den Anfang und das Ende deines Signals anschaut, ist kaum etwas 
periodisches erkennbar, lediglich in der Mitte gibt es einen Auschlag, 
der eine Schwingung verursacht hat.

Als sehr einfacher Filter würde ich dir einmal zum Medianfilter raten. 
Dieser filter Rauschen besonders gut weg. Sollte die Filtergrösse 
grösser sein, als deine Schwingung, bringst du auch diese gut weg.

von Anonym (Gast)


Lesenswert?

Dennis schrieb:
> Was unterscheidet einen echten Tiefpass von
> deinem oben dargestellen Formel?

Gar nichts, aber ich bin mal auf deine Erklärung gespannt, warum das 
kein "echtes" Tiefpassfilter sein soll.

von sid (Gast)


Lesenswert?

Dennis schrieb im Beitrag #6383666:
> bezaubernden Persönlichkeit

Ach Bübchen, wenn Du Nikolas anranzt aber den Tiefpassfilter SELBER 
nicht erkennst, was erwartest Du? Lob für deine unzulängliche 
Persönlichkeit?

Und Filter liefern immer "Näherungswerte"
im besten Fall um Messungenauigkeiten zu unterdrücken;
im gewöhnlichen Fall um Messdaten in ansehnliche anschauliche bunte 
Bildchen
zu verwandeln um Prinzipien und Vorgänge einer breiteren (unbedarfteren) 
Masse zugänglich zu machen.
Da ich einen Graphen in einer Exceltabell sehe, gehe ich von letzerem 
aus;
eventuell zu unrecht, nicht aber ganz unbegründet.

schon Messdaten sind leider nie so genau wie man es gerne hätte;
auch die Skalenteilung und damit Auflösung des Graphen liefert eine 
Ungenauigkeit etc.pp.

DESWEGEN ist die Genauigkeit des Graphen zugunsten der besseren 
Veranschauung zu vernachlässigen.

Und das ist nicht Bastelei,
es ist sehr wohl "rumprobieren" zugegeben,
dumm ist es nur ausprobieren als etwas schlechtes zu bezeichnen.
Denn "zu probieren" ist eine sinnvolle Methode ein Gefühl für 
Filterfunktionen und deren Parametern und Koeffizienten zu bekommen wenn 
man sich erst kurz mit solchen Themen beschäftigt und Vor und Nachteile 
einzelner Varianten noch nicht nur anhand der Formel abwägen kann.

fouriertransformation auf Messdaten anzuwenden ist eine unfassbar 
dämliche Idee sobald die Messdaten keiner kontinuierlichen Funktion 
folgen;
Du also Daten hast, die einer gewissen Zufälligkeit unterliegen.
(Anzahl der Regentropfen pro Zeiteinheit innerhalb einer bestimmten 
Fläche zB sowas Bizarres wie Anzahl gefundener Blöcke eines 
Cryptominer(pool)s)
da kann dir keine Frequenzzerlegung weiterhelfen.
Selbst periodische Zyklen innerhalb bestimmter Datensätze weisen nicht 
immer zwingend auf zugrundeliegende Funktionsbeschreibung hin.
(Im Herbst regnet's mehr als im Sommer, deswegen ist der akute Schauer 
vor meiner Tür aber nicht irrelevant!)

Und deine FFT würde Dir interessante Frequenzen liefern, die aber 
allesamt vollständig unbrauchbar sind, falls Du nur anhand derer zu 
filtern versuchst.

Da ich die Quelle der Messdaten nicht kenne und anhand des Graphen auch 
vermutlich mehrere Dinge in Frage kämen,
ist also deine Annahme es handelte sich um eine zeitabhängig 
vorhersehbare Datenquelle ein wenig einschränkend.

Aber wie das so ist, gell?
wenn man nur einen Hammer hat ist jedes Problem ein Nagel ;)
Wenn man nur Audiodaten kennt, dann ist alles Frequenz.

'sid

von Steff (Gast)


Lesenswert?

von sid (Gast)
>HUST!

>und er schrieb
>Nikolas S. schrieb:
>> Formel: Y'1 = α*X1 + (1-α)*Y'0
>das ist ein Tiefpassfilter erster Ordnung

In der Tat fehlen da einigen die Grundlagen. Das ist nämlich ein sehr 
einfaches Kalman-Filter, so wie 1+1 eine Rechnung ist.

von never ever (Gast)


Lesenswert?


von sid (Gast)


Lesenswert?

Steff schrieb:
>>Nikolas S. schrieb:
>>> Formel: Y'1 = α*X1 + (1-α)*Y'0
> In der Tat fehlen da einigen die Grundlagen. Das ist nämlich ein sehr
> einfaches Kalman-Filter, so wie 1+1 eine Rechnung ist.

wüsste jetzt nicht inwiefern Du das als Kalman Filter auslegen kannst um 
ehrlich zu sein;
würde aber gerne die Implementierung sehen,
die aus dem Tiefpass erster ordnung da die Vorhersage zieht.

Ich glaube eine kalman-esque Filterung bekämst Du daraus nur,
falls Du den Koeffizienten ab dem Zweiten Schritt iterativ anpasst 
(mittelst),
um dann darus dan den folgenden Wert vorabzuschätzen;
hab ich so zwar noch nicht gesehen,
könnte aber in der Tat funktionieren mit wenigen weiteren Schritten.
Ist nicht das was sich die drei Jungs (kalman, bucy und der dessen Name 
mir immer entfällt.. stochinovitsch? ...ne tut mir leid ..weg!)
sich dabei gedacht haben, würde aber vermutlich die zu Grunde liegende 
Idee
vereinfacht abbilden können.

die Gleichung für sich alleine indes
(mit dem Übertrag von Y'1 als Y'0 für den folgenden Schritt)
ist allerdings nur ein Tiefpass, kein kalman.

'sid

von Mess-Man (Gast)


Lesenswert?

Da sollte man wohl lieber mal die Messwerte posten damit man mal ein 
Spektrum aufzeichnen und die Problemfrequenzen identifizieren kann.

von DSPASM (Gast)


Lesenswert?

Kalmanfilter setzt man eher bei autonomen Fahrzeugen ein oder auch in 
Navis, um auch bei Ausfall von einzelnen Sensoren den weiteren Verlauf 
abschätzen zu können. Beispiel: Auto fährt in Tunnel, GPS bricht ab, 
Lage- Und Beschleunigungssensoren liefern dem Kalmanfilter genug Daten, 
um die aktuelle Position abschätzen zu können.
Oder auch für AUV`s. Da unter Wasser kein GPS-Signal genutzt werden 
kann, muss eine Intertialsensorik plus Kalmanfilter herhalten, um die 
aktuelle Position zu ermitteln.

von DDR3 (Gast)


Lesenswert?

Hallo,

Tiefpassfilter sind, wie der Name schon sagt, Filter, die nur Tiefe 
Frequenzen durchlassen und höhere blockieren. Es gibt dafür verschiedene 
Ansätze. Dein exponentiell gewichtetes Mittelwertfilter ist ein 
Tiefpassfilter. Vorteil: Sehr einfache Implementierung. Nachteil: Es 
gibt keine einstellbare Grenzfrequenz. Die Kurve geht ab Frequenz = 0 
kontinuierlich nach unten, wird aber auch sehr schnell weniger steil. 
Also kein sehr gutes Filter. Aber durchaus häufig ausreichend.

Ein Kalmanfilter ist ein komplexerer Algorithmus, der Messdaten auf der 
Basis eines Modells filtert. Vereinfacht gesagt prüft der Kalmanfilter 
permanent, ob das gemessene Signal zum vorhergesagten Signal passt und 
regelt so gegen.
Das Kalmanfilter ist besonders dann gut zu nutzen, wenn man mehrere 
Sensoren hat und diese fusionieren will. Das Filter besitzt ebenfalls 
die Fähigkeit, konstante Fehler, wie Offsets, automatisch zu 
korrigieren.

Das kann man sich bspw so vorstellen: Du hast ein Auto, das sowohl einen 
Geschwindigkeitssensor am Rad hat, als auch einen Beschleunigungssensor. 
Der Beschleunigungssensor hat bspw ein Rauschen + Offset. Dein Filter 
soll möglichst präzise und mit hoher Frequenz die Geschwindigkeit des 
Autos anzeigen. Der Radsensor ist sehr genau, hat aber keine hohe 
Datenrate. Du kannst jetzt als Modell abbilden, dass das 
Beschleunigungssignal integriert die Geschwindigkeit ist. Das ist 
allerdings anfällig für Offsetfehler des Beschleunigungssignals. Ein 
Kalmanfilter kann nun mit dem richtigen Modell und den richtigen 
Koeffizienten, diese Sensordaten so fusionieren, dass durch den 
Radsensor der Offset des Beschleunigungssensors kompensiert werden kann, 
man aber trotzdem schnelle Werte für die Geschwindigkeit bekommt.

Ein Kalmanfilter benötigt dazu aber ein möglichst genaues mathematisches 
Modell. Für eine einfache Tiefpassfilterung ist ein Kalmanfilter nicht 
geeignet.

von Steff (Gast)


Lesenswert?

>Für eine einfache Tiefpassfilterung ist ein Kalmanfilter nicht
>geeignet.

Doch, wenn du Variablen der Matrizen des Kalmanfilters entsprechend 
wählst, ergibt sich ein Tiefpassfilter. Der Tiefpassfilter ist in den 
Formeln des Kalmanfilters enthalten und wenn du so willst ist der 
Tiefpassfilter eine sehr reduzierte Form des Kalmanfilters. Zur Übung 
dürft ihr die Gleichungen für einen Kalmanfilter heraussuchen und die 
Matrizen entsprechend wählen.

von Burkhard K. (buks)


Lesenswert?

Mess-Man schrieb:
> ieber mal die Messwerte posten damit man mal ein
> Spektrum aufzeichnen und die Problemfrequenzen identifizieren kann.

Ack. Wenn ich das richtig sehe, hast Du ca. 25 Werte/div (bzw. 50/s wenn 
die Einheit der X-Achse Sekunden sind) und eine dominante Schwingung bei 
ca. Fs/6 - die Du offensichtlich loswerden möchtest?

Das ginge mit mehr oder weniger steilem Tiefpass- oder Notchfilter - 
oder auch ganz anders durch Zerlegung des Signals in mehrere Moden (z.B. 
Wavelettransform). Was in Deinem Fall passt und welcher Aufwand dafür 
nötig ist, hängt von der spezifischen Messsituation und dem Ziel Deiner 
Analyse ab.

: Bearbeitet durch User
von Max H. (nilsp)


Lesenswert?

Wenn Du die über dem Signal liegende Schwingung loswerden willst gibt es 
ein recht einfaches Verfahren:

Suche die oberen und unteren Peaks des Signals und ziehe jeweils ein 
Spline durch die Punkte. Von den beiden erzeugten Splines nimmst Du dann 
für jeden X-Wert das Mittel beider Kurven.

Wird gern in der Seismologie angewendet um Frequenzbereiche voneinander 
zu trennen.

von sid (Gast)


Lesenswert?

Sag mal ich starre jetzt seit Tagen auf den Graphen da oben
irgendwie kommt der mir so bekannt vor,
kann es sein, dass ich seinen Bruder mal kennengelernt hab?

ich erklär mal kurz was ich meine..
ich hab mal mein Telefunkofon den Beschleunigungssensor überwachen 
lassen
um mir daraus (noch auf dem telefon allerdings) einen Graphen zu 
generieren. (Gesamtvektor aller drei Richtungsachsen)

die Scalen waren nicht unähnlich
(Zeit in zehntel sekunden auf der X, Beschleunigung in m/s² auf der 
y-Achse 0-10)

und diese hübsche periodische Schwankung grade als die Kurve sich im 
Mittel nach oben bewegt,
geführt und gefolgt von chaotischeren Werten
(Resonanzschwingung der Motordrehzal die sich übers Handgelenk und den 
Oberkörper in meine Brusttasche ins Handy frisst)

das sah alles sehr ähnlich aus wirklich,
8m/s² ist schon schnittig, kommt aber sogar (je nach Moped) hin.

Oh und ich hab's mit nem iterativen kalmanfilter versucht, schien mir 
dafür nicht das Richtige zu sein,
hab mich dann für jerk-compressed-data entscheiden
(also m/s³ begrenzt und dann mit mildem Tiefpass gespeichert)
das ganze lief dann zur grafischen Angeberei in einen rekursiven kalman 
um einen netten niedrig aufgelösten dafür hübsch interpolierten Graphen 
zu malen. (war ja eh nur eye-candy und hatte weiter keine relevante 
Funktion)

Also, ist das möglich, dass das da oben AUCH Daten einer 
Beschleunigungsmessung sind?
Nur um mich zu heilen vom michlangsam anfallenden Wahnsinn,
(den ich sonst nur kenne wenn ich alten entfernten Bekannten zufällig 
ins gesicht schaue und mir der Name nicht einfallen will)

'sid

von Hans Kanns (Gast)


Lesenswert?

sid schrieb:
> kann es sein, dass ich seinen Bruder mal kennengelernt hab?

könnte auch sein, dass es die Schwester "Interferrenz" oder Cousin 
"Rauschen" ist. Diese Messwerte haben ganz offensichtlich eine 
Schwingung drin, die entweder Störung, oder (wahrscheinlicher) Bewegung 
sind und genau die wäre erst einmal wegzufiltern.

Genau genommen darf überhaupt nur DIE weggefiltert werden, wenn man noch 
eine Information über haben will.

von Nikolas S. (dustinthewind)


Lesenswert?

Erstmal vielen Dank für eure konstruktiven Tipps und Vorschläge!
Ich habe es jetzt tatsächlich so gemacht, dass ich verschiedene Methoden 
ausprobiert habe und die dann verglichen hab.

Letztendlich habe ich mich für einen Median aus den letzten 10 
Sensorwerten entschieden. Dann werden auch die Ausreißer (im Graph nicht 
sichtbar) nicht berücksichtigt und ich bekomme eine relativ glatte 
Kurve, wie ich mir sie vorgestellt habe.

sid schrieb:
> Sag mal ich starre jetzt seit Tagen auf den Graphen da oben
> irgendwie kommt der mir so bekannt vor,
> kann es sein, dass ich seinen Bruder mal kennengelernt hab?

Da ich nur eine Schwester habe... eher nicht :D


Nur zur Erklärung, was es mit dem Graph aufsich hat...
Der Graph zeigt einen Winkel der mit einem Beschleunigungssensor erfasst 
wurde. Deshalb auch die Kurvenbezeichnung "acc Angle".

von sid (Gast)


Lesenswert?

sid schrieb:
> Also, ist das möglich, dass das da oben AUCH Daten einer
> Beschleunigungsmessung sind?

Nikolas S. schrieb:
> ... eher nicht :D
> ...
> Der Graph zeigt einen Winkel der mit einem Beschleunigungssensor erfasst
> wurde.

Naja, aber nah genug dran ;)

'sid

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.