Thursday 21 September 2017

Moving Average Oder Tiefpass Filter


Ich kodiere etwas in dem Moment, wo ich bin ein paar Werte im Laufe der Zeit von einem Hardware-Kompass Dieser Kompass ist sehr genau und Updates sehr oft, mit dem Ergebnis, dass, wenn es leicht wackelt, ich am Ende mit dem seltsamen Wert, der s wild Im Widerspruch zu seinen Nachbarn möchte ich diese Werte ausgleichen. Wenn man einiges herumgelesen hat, scheint es, dass was ich will, ist ein Hochpass-Filter, ein Tiefpass-Filter oder ein gleitender Durchschnitt Moving-Durchschnitt kann ich mit, nur Behalte eine Geschichte der letzten 5 Werte oder was auch immer, und benutze den Durchschnitt dieser Werte stromabwärts in meinem Code, wo ich einmal nur mit dem aktuellsten Wert war. Das sollte ich, glaube ich, die Jiggles schön glätten, aber das schlägt mir das Es ist wahrscheinlich ziemlich ineffizient, und das ist wahrscheinlich eines dieser Bekannten Probleme zu ordnungsgemäßen Programmierern, zu denen es eine wirklich ordentliche Clever Math-Lösung gibt. Ich bin aber einer dieser schrecklichen selbstgelehrten Programmierer ohne einen Fetzen der formalen Bildung in irgendetwas sogar Vage im Zusammenhang mit CompSci oder Mathe Reading um ein bisschen deutet darauf hin, dass dies ein High-oder Tiefpass-Filter sein kann, aber ich kann nicht finden, was das erklärt, was für einen Hack wie mich verständlich ist, was die Wirkung dieser Algorithmen wäre auf einer Reihe von Werte, geschweige denn, wie die Mathematik arbeitet Die Antwort, die hier zum Beispiel gegeben wird, antwortet technisch auf meine Frage, aber nur für diejenigen, die wohl schon wissen wollten, wie man das Problem lösen könnte. Es wäre eine sehr schöne und kluge Person Könnte erklären, die Art von Problem, das ist, und wie die Lösungen funktionieren, im Sinne verständlich für ein Arts graduate. asked Sep 21 10 am 13 01.Wenn Ihr gleitender Durchschnitt muss lang sein, um die erforderliche Glättung zu erreichen, und Sie don Ich brauche wirklich eine bestimmte Form des Kernels, dann bist du besser dran, wenn du einen exponentiell abklingenden gleitenden Durchschnitt benutzt. Dort wählst du winzig, um eine passende Konstante zu sein, zB wenn du winzige 1- 1 N wählst, wird es die gleiche Menge an Mittelung haben Als ein Fenster der Größe N, aber verteilt anders über ältere Punkte. Anyway, da der nächste Wert des gleitenden Durchschnittes hängt nur von der vorherigen und Ihre Daten, müssen Sie nicht eine Warteschlange oder etwas zu halten Und Sie können daran denken So etwas wie, Nun, ich habe einen neuen Punkt, aber ich glaube es wirklich nicht, also gehe ich 80 meiner alten Schätzung der Messung, und vertraue nur diesem neuen Datenpunkt 20 Das ist so ziemlich das Genauso wie zu sagen, Nun, ich vertraue nur diesem neuen Punkt 20, und ich benutze 4 weitere Punkte, denen ich vertraue, die gleiche Menge, außer dass anstatt explizit die 4 anderen Punkte zu nehmen, nehmen Sie an, dass die Mittelung Sie das letzte Mal war Vernünftig, so können Sie Ihre vorherige work. answered Sep 21 10 bei 14 27.Hey, ich weiß, das ist 5 Jahre zu spät, aber danke für eine tolle Antwort Ich arbeite an einem Spiel, wo der Klang ändert sich auf Ihre Geschwindigkeit, aber fällig Um das Spiel auf einem langsamen Computer zu laufen, würde die Geschwindigkeit wild schwanken, was für das Lenken gut war, aber super nervig in Bezug auf Sound Dies war eine wirklich einfache und billige Lösung für etwas, was ich dachte, wäre ein wirklich komplexes Problem Adam Mar 16 15 bei 20 20.Wenn Sie versuchen, den gelegentlichen ungeraden Wert zu entfernen, ist ein Tiefpassfilter das Beste aus den drei Optionen, die Sie identifiziert haben. Tiefpassfilter erlauben niedrige Geschwindigkeitsänderungen wie die, die durch das Drehen verursacht werden Kompass von Hand, bei der Ablehnung von High-Speed-Änderungen wie die, die durch Stöße auf der Straße verursacht werden, zum Beispiel. Ein gleitender Durchschnitt wird wahrscheinlich nicht ausreichen, da die Auswirkungen eines einzelnen Blips in Ihre Daten beeinflussen mehrere nachfolgende Werte, abhängig von Auf die Größe Ihres gleitenden durchschnittlichen Fensters. Wenn die ungeraden Werte leicht erkannt werden, können Sie sogar besser mit einem Glitch-Entfernungs-Algorithmus, der sie völlig ignoriert. Hier ist ein Guick-Diagramm zu illustrieren. Der erste Graph ist das Eingangssignal, Mit einer unangenehmen Störung Die zweite Grafik zeigt die Wirkung eines 10-prozentigen gleitenden Durchschnitts Die endgültige Grafik ist eine Kombination aus dem 10-Sample-Durchschnitt und dem oben beschriebenen einfachen Glitch-Detection-Algorithmus Wenn der Glitch erkannt wird, wird der 10-Sample-Durchschnitt verwendet Anstatt der tatsächlichen Wert. answered Sep 21 10 bei 13 38.Nicely erklärt, und Bonuspunkte für die Grafik Henry Cooke Sep 22 10 bei 0 50.Wow Selten sah so eine nette Antwort Muis Jun 4 13 bei 9 14.Der gleitende Durchschnitt Ist ein Tiefpassfilter nomen Oct 21 13 at 19 36.Try eine laufende Streaming Median statt Kert Apr 25 14 um 22 09.Moving Durchschnitt kann ich mit unten, aber es schlägt mich, dass es wahrscheinlich ziemlich ineffizient. There s wirklich keinen Grund Ein gleitender Durchschnitt sollte ineffizient sein Sie halten die Anzahl der Datenpunkte, die Sie in irgendeinem Puffer wie eine kreisförmige Warteschlange wünschen. Auf jedem neuen Datenpunkt platzieren Sie den ältesten Wert und subtrahieren ihn von einer Summe und schieben den neuesten und fügen ihn der Summe hinzu Also jeder neue Datenpunkt bringt wirklich nur einen Pop-Push, eine Addition und eine Subtraktion Dein gleitender Durchschnitt ist immer diese Verschiebungssumme geteilt durch die Anzahl der Werte in deinem Puffer. Es wird ein wenig schwieriger, wenn du gleichzeitig Daten von mehreren Threads empfängst, Aber da deine Daten von einem Hardware-Gerät kommen, das mir höchst zweifelhaft erscheint. Oh und auch schreckliche, selbstgelehrte Programmierer vereinen. Der gleitende Durchschnitt schien mir ineffizient zu sein, weil du einen Puffer von Werten speichern musst - besser, nur etwas Clever zu machen Mathe mit Ihrem Eingabewert und aktuellem Wertsatz Ich denke, dass s, wie exponentiell gleitenden Durchschnitt funktioniert Eine Optimierung, die ich für diese Art von gleitenden Durchschnitt gesehen habe, beinhaltet die Verwendung einer festen Länge Warteschlange ein Zeiger auf, wo Sie sind in dieser Warteschlange, und nur wrapping der Zeiger um mit oder ein wenn Voila Kein teurer Push-Pop Power zu den Amateuren, Bruder Henry Cooke Sep 22 10 bei 0 54. Henry Für einen geradlinigen gleitenden Durchschnitt brauchst du den Puffer einfach so dass du weißt, welcher Wert geknallt wird, wenn der Nächster Wert wird gedrückt Das sagte, die feste Länge Warteschlange ein Zeiger, den du beschreibst, ist genau das, was ich mit kreisförmiger Warteschlange bedeutete. Darum habe ich gesagt, dass es nicht ineffizient ist Was hast du mir gemeint Und wenn deine Antwort ein Array ist, das sich verschiebt Seine Werte zurück auf jede indizierte Entfernung wie Std-Vektor in C gut, dann bin ich so verletzt Ich möchte nicht mal mit dir reden Dan Tao Sep 22 10 bei 1 58. Henry Ich weiß nicht, über AS3 wissen, aber ein Java Programmierer s hat Sammlungen wie CircularQueue zu seiner Verfügung Ich bin kein Java-Entwickler, also bin ich sicher, dass es bessere Beispiele gibt, dass s genau das, was ich von einer schnellen Google-Suche gefunden habe, die genau die Funktionalität implementiert, mit der wir reden, dass ich fair bin Zuversichtlich, die Mehrheit der Mittel-und Low-Level-Sprachen mit Standard-Bibliotheken haben etwas ähnliches zB in dort s Queue T Jedenfalls war ich Philosophie selbst, so ist alles vergeben Dan Tao Sep 22 10 bei 12 44. Ein exponentiell verfallenden gleitenden Durchschnitt kann sein Von der Hand berechnet nur mit dem Trend, wenn Sie die richtigen Werte verwenden Siehe für eine Idee, wie man dies schnell mit einem Stift und Papier zu tun, wenn Sie auf der Suche nach exponentiell geglätteten gleitenden Durchschnitt mit 10 Glättung Aber da Sie einen Computer haben, möchten Sie wahrscheinlich Um eine binäre Verschiebung im Gegensatz zur dezimalen Verschiebung zu machen. Auf diese Weise ist alles, was Sie brauchen, eine Variable für Ihren aktuellen Wert und eine für den Durchschnitt. Der nächste Durchschnitt kann dann berechnet werden Genannt ein Range-Tor, das gut funktioniert mit Low-Auftreten falsche Proben unter der Verwendung einer der Filter-Techniken erwähnt oben gleitenden Durchschnitt, exponentiell, sobald Sie genügend Geschichte haben eine Zeit Konstante können Sie die neue, eingehende Datenmuster für Angemessenheit testen, bevor Es wird der Berechnung hinzugefügt. Eine Kenntnis der maximal vernünftigen Änderungsrate des Signals ist erforderlich, daß die Rohprobe mit dem letzten geglätteten Wert verglichen wird und wenn der Absolutwert dieser Differenz größer als der zulässige Bereich ist, Dass die Probe aus irgendeiner Heuristik herausgeworfen oder ersetzt wird, z. B. eine Vorhersage, die auf der Steigungsdifferenz basiert, oder der Trendvorhersagewert von der doppelten exponentiellen Glättung. Siehete Apr 30 16 at 6 56.Moving Average Filter. Der MovingAverageFilter implementiert einen Tiefpass-Gleitwertfilter MovingAverageFilter ist Teil der Vorverarbeitungsmodule. Ein Beispiel für ein Signal Sinuswellen-Zufallsrauschen, das mit einem gleitenden Mittelfilter gefiltert wird Das rote Signal ist das ursprüngliche Signalrauschen, das grüne Signal ist das gefilterte Signal unter Verwendung eines gleitenden Durchschnittsfilters mit einer Fenstergröße von 5 , Und das blaue Signal ist das gefilterte Signal unter Verwendung eines gleitenden Durchschnittsfilters mit einer Fenstergröße von 20. Der MovingAverageFilter eignet sich gut zum Entfernen einer kleinen Menge an Hochfrequenzrauschen aus einem N-dimensionalen Signal. Der Hauptnachteil des MovingAverageFilters ist das in Ordnung Um signifikant hochfrequentes Rauschen herauszufiltern, muss die Fenstergröße des Filters groß sein. Das Problem mit einem großen Filterfenster besteht darin, dass dies eine große Latenz in jedem Signal induziert, das durch den Filter hindurchgeht, was möglicherweise nicht für Echtzeit - Zeit-Anwendungen Wenn Sie feststellen, dass Sie ein großes Filterfenster benötigen, um Hochfrequenzrauschen herauszufiltern, und die Latenz, die durch diese Fenstergröße verursacht wird, eignet sich nicht für Ihre Echtzeitanwendung, dann möchten Sie vielleicht entweder einen Double Moving Average Filter oder Low versuchen Pass Filter statt. Beispielcode. GRT MovingAverageFilter Beispiel Dieses Beispiel veranschaulicht, wie das GRT MovingAverageFilter PreProcessing Module erstellt und verwendet wird. Der MovingAverageFilter implementiert einen Tiefpass mit durchschnittlichem Filter. In diesem Beispiel erstellen wir eine Instanz eines MovingAverageFilters und verwenden diese, um einige Dummy-Daten zu filtern, die von einem Sinus erzeugt werden Wellen-zufälliges Rauschen Das Testsignal und die gefilterten Signale werden dann in einer Datei gespeichert, so dass Sie die Ergebnisse in Matlab, Excel, etc., falls erforderlich, darstellen können. Dieses Beispiel zeigt Ihnen, wie Sie - eine neue MovingAverageFilter-Instanz mit einer bestimmten Fenstergröße für eine 1 erstellen Dimensionales Signal - Filtern Sie einige Daten mit dem MovingAverageFilter - Speichern Sie die MovingAverageFilter-Einstellungen in eine Datei - Laden Sie die MovingAverageFilter-Einstellungen aus einer Datei. Beinhalten GRT h unter Verwendung von Namespace GRT. int main int argc const char argv Erstellen Sie eine neue Instanz eines gleitenden Durchschnittsfilters mit einer Fenstergröße von 5 für ein 1-dimensionales Signal MovingAverageFilter-Filter 5 1. Erstellen und öffnen Sie eine Datei, um die Daten-Fstream-Datei zu speichern Datei offen fstream out. Generieren Sie einige Daten Sinuswellenrauschen und filtern Sie es doppelt x 0 const UINT M 1000 Zufall zufällig für UINT i 0 i M i Doppelsignal sin x zufällig getRandomNumberUniform - 0 2 0 2.double filteredValue filter filter signal. file signal t filteredValue endl. x TWOPI double M 10. Schließen Sie die Datei Datei schließen. Speichern Sie die Filtereinstellungen in einem Dateifilter saveSettingsToFile. Wir können dann die Einstellungen später laden, wenn nötig Filter loadSettingsFromFile. return EXITSUCCESS. Der MovingAverageFilter arbeitet auch mit jedem N-dimensionalen Signal. Erstellen Sie eine neue Instanz des MovingAverageFilters mit einer Fenstergröße von 10 für ein dreidimensionales Signal MovingAverageFilter-Filter 10 3. Der Wert, den Sie filtern möchten Vektor-Doppeldaten 3 Daten 0 0 Erhalten Sie den Wert aus den Sensordaten 1 0 Erhalten Sie den Wert aus den Sensordaten 2 0 Wert vom Sensor erhalten Filtern Sie den Signalvektor doppelt gefiltertValue Filter Filter data. Code Resources. Moving Durchschnittliche Filter MA Filter. Loading Der gleitende durchschnittliche Filter ist ein einfacher Low Pass FIR Finite Impulse Response Filter häufig für die Glättung eines Arrays von abgetasteten Datensignal verwendet Es dauert M Proben der Eingabe Zu einer Zeit und nehmen Sie den Durchschnitt dieser M-Samples und produziert einen einzigen Ausgangspunkt Es ist eine sehr einfache LPF Low Pass Filter-Struktur, die praktisch für Wissenschaftler und Ingenieure ist, um unerwünschte geräuschvolle Komponente aus den beabsichtigten Daten zu filtern. Wenn die Filterlänge zunimmt Der Parameter M erhöht sich die Glätte des Ausgangssignals, während die scharfen Übergänge in den Daten zunehmend stumpf sind. Dies bedeutet, dass dieser Filter eine ausgezeichnete Zeitbereichsantwort hat, aber eine schlechte Frequenzantwort aufweist. Der MA-Filter führt drei wichtige Funktionen aus.1 Es nimmt M-Eingang Punkte, berechnet den Mittelwert dieser M-Punkte und erzeugt einen einzelnen Ausgangspunkt 2 Aufgrund der Berechnungsberechnungen führt der Filter eine bestimmte Verzögerung ein 3 Der Filter fungiert als Tiefpassfilter mit schlechter Frequenzbereichsantwort und einem guten Zeitbereich Response. Matlab Code. Following Matlab Code simuliert die Zeitbereich Antwort eines M-Punkt Moving Average-Filter und zeichnet auch die Frequenzantwort für verschiedene Filter lengths. Time Domain Response. Input zu MA Filter.3-Punkt MA Filter Ausgang. Input to Bewegen des durchschnittlichen Filters. Response von 3 Punkt Moving Average Filter.51-Punkt MA Filterausgang.101-Punkt MA Filterausgang. Response von 51-Punkt Moving Average Filter. Response von 101-Punkt Moving Average Filter.501-Punkt MA Filterausgang. Response von 501 Punkt Bewegen des durchschnittlichen Filters. Auf dem ersten Plot haben wir die Eingabe, die in den gleitenden Mittelwertfilter geht. Der Eingang ist verrauscht und unser Ziel ist es, das Rauschen zu reduzieren. Die nächste Figur ist die Ausgangsreaktion eines 3-Punktes Moving Average Filter Es kann aus der Figur abgeleitet werden, dass der 3-Punkt Moving Average Filter nicht viel beim Ausfiltern des Rauschens getan hat. Wir erhöhen die Filterhähne auf 51 Punkte und wir können sehen, dass das Rauschen im Ausgang viel reduziert hat , Die in der nächsten Abbildung dargestellt ist. Frequenz-Response von Moving Average Filters von verschiedenen Längen. Wir erhöhen die Hähne weiter auf 101 und 501 und wir können beobachten, dass auch - obwohl das Rauschen fast Null ist, die Übergänge abgestumpft werden drastisch beobachten die Steigung Auf der beiden Seite des Signals und vergleichen sie mit dem idealen Ziegelwandübergang in unserem input. Frequency Response. From der Frequenzantwort kann man behaupten, dass der Roll-off sehr langsam ist und die Stopbanddämpfung nicht gut ist Band-Dämpfung, klar, die gleitenden durchschnittlichen Filter kann nicht trennen ein Band von Frequenzen von anderen Wie wir wissen, dass eine gute Leistung im Zeitbereich führt zu schlechter Leistung im Frequenzbereich und umgekehrt Kurz gesagt, ist der gleitende Durchschnitt ein außergewöhnlich gut Glättung Filter die Aktion in der Zeit-Bereich, sondern eine außergewöhnlich schlechte Tiefpass-Filter die Aktion in der Frequenz domain. External Links. Recommended Books. Primary Sidebar.

No comments:

Post a Comment