Ich schreibe gerade etwas, wo ich im Laufe der Zeit eine Reihe von Werten aus einem Hardware-Kompass nehme. Dieser Kompass ist sehr genau und wird sehr oft aktualisiert, mit dem Ergebnis, dass, wenn er leicht wackelt, ich den seltsamen Wert erhalte, der mit seinen Nachbarn völlig inkonsistent ist. Ich möchte diese Werte glätten.Werte im Zeitverlauf glätten: gleitender Durchschnitt oder etwas Besseres?
Nachdem ich etwas gelesen habe, scheint es, dass ich einen Hochpassfilter, einen Tiefpassfilter oder einen gleitenden Durchschnitt möchte. Moving Average, mit dem ich auskommen kann, behalte einfach einen Verlauf der letzten 5 Werte oder was auch immer, und verwende den Durchschnitt dieser Werte in meinem Code, wo ich einmal den letzten Wert verwendet habe.
Das sollte, denke ich, diese Jiggles schön glätten, aber es fällt mir auf, dass es wahrscheinlich ziemlich ineffizient ist, und dies ist wahrscheinlich eines der bekannten Probleme mit Proper-Programmierern, auf die es eine wirklich clevere Math-Lösung gibt.
Ich bin jedoch einer dieser schrecklichen autodidaktischen Programmierer ohne eine Spur formaler Bildung in irgendetwas auch nur vage mit CompSci oder Math verwandt. Ein wenig herumzulesen legt nahe, dass dies ein Hoch- oder Tiefpassfilter sein könnte, aber ich kann nichts finden, was einem Hack wie mir verständlich erklärt, welche Auswirkungen diese Algorithmen auf eine Reihe von Werten haben würden, geschweige denn wie die Mathematik funktioniert. Die Antwort here beispielsweise beantwortet technisch meine Frage, aber nur in Begriffen, die für diejenigen verständlich sind, die wahrscheinlich bereits wissen, wie man das Problem löst.
Es wäre in der Tat eine sehr liebenswerte und schlaue Person, die die Art von Problem erklären könnte und wie die Lösungen funktionieren, was für einen Kunstabsolventen verständlich ist.
Gute Erklärung, danke Rex. Würde ich recht haben, wenn ich denke, dass eine andere Art dasselbe auszudrücken wäre: workingAverage = (newValue * smoothingFactor) + (workingAverage * (1.0 - smoothingFactor))? –
@Henry - Richtig, das ist der Weg, es ohne zusätzlichen Speicher zu tun. –
Hey, ich weiß, das ist 5 Jahre zu spät, aber danke für eine tolle Antwort. Ich arbeite an einem Spiel, bei dem sich der Sound je nach Anschlag ändert, aber da das Spiel auf einem langsamen Computer läuft, würde die Geschwindigkeit stark schwanken, was für das Lenken gut war, aber in Bezug auf den Sound sehr nervig ist. Dies war eine wirklich einfache und billige Lösung für etwas, von dem ich dachte, dass es ein wirklich komplexes Problem sein würde. – Adam