Friday 27 January 2017

Moving Average Filter Java Code

Ich habe im Wesentlichen ein Array von Werten wie folgt: Das obige Array ist oversimplified, Im sammeln 1 Wert pro Millisekunde in meinem realen Code und ich muss die Ausgabe auf einem Algorithmus, den ich schrieb, um die nächste Peak vor einem Zeitpunkt zu finden verarbeiten. Meine Logik schlägt fehl, weil in meinem Beispiel oben 0.36 die wahre Spitze ist, aber mein Algorithmus würde rückwärts schauen und sehen die sehr letzte Zahl 0.25 als die Spitze, als theres eine Abnahme zu 0.24 vor ihm. Das Ziel ist, diese Werte zu nehmen und einen Algorithmus auf sie, die glätten sie ein wenig, so dass ich mehr lineare Werte. (Dh: Id wie meine Ergebnisse curvy, nicht jaggedy) Ive wurde gesagt, um einen exponentiellen gleitenden durchschnittlichen Filter auf meine Werte anzuwenden. Wie kann ich dies tun Es ist wirklich schwer für mich, mathematische Gleichungen zu lesen, gehe ich viel besser mit Code. Wie verarbeite ich Werte in meinem Array, die Anwendung einer exponentiellen gleitenden Durchschnittsberechnung, um sie herauszufordern, um einen exponentiellen gleitenden Durchschnitt zu berechnen. Müssen Sie einige Zustand zu halten und Sie benötigen einen Tuning-Parameter. Dies erfordert eine kleine Klasse (vorausgesetzt, Sie verwenden Java 5 oder höher): Instantiate mit dem Decay-Parameter, die Sie wollen (kann Abstimmung sollte zwischen 0 und 1) und dann mit Average () zu filtern. Beim Lesen einer Seite auf einige mathematische Rekursion, alles, was Sie wirklich wissen müssen, wenn Sie es in Code ist, dass Mathematiker gerne Indizes in Arrays und Sequenzen mit Indizes schreiben. (Theyve einige andere Anmerkungen außerdem, die nicht helfen.) Jedoch ist die EMA ziemlich einfach, da Sie nur an einen alten Wert erinnern müssen, der keine komplizierten Zustandarrays erfordert. Beantwortet Feb 8 12 at 20:42 TKKocheran: Ziemlich viel. Isn39t es schön, wenn die Dinge einfach sein können (Wenn Sie mit einer neuen Sequenz beginnen, erhalten Sie einen neuen Mittelwert.) Beachten Sie, dass die ersten paar Begriffe in der durchschnittlichen Sequenz wird ein bisschen durch Randeffekte springen, aber Sie erhalten die mit anderen gleitenden Durchschnitten auch. Allerdings ist ein guter Vorteil, dass Sie die gleitende durchschnittliche Logik in die Mittelung einwickeln und experimentieren können, ohne den Rest des Programms zu viel zu stören. Ndash Donal Fellows Ich habe eine harte Zeit, Ihre Fragen zu verstehen, aber ich werde versuchen, trotzdem zu beantworten. 1) Wenn Ihr Algorithmus 0,25 statt 0,36 gefunden hat, dann ist es falsch. Es ist falsch, weil es eine monotone Zunahme oder Abnahme (das ist immer nach oben oder immer nach unten). Wenn Sie ALLE Ihre Daten nicht klassifizieren, sind Ihre Datenpunkte - wie Sie sie darstellen - nichtlinear. Wenn Sie wirklich den maximalen Wert zwischen zwei Zeitpunkten finden wollen, dann schneiden Sie Ihr Array von tmin zu tmax und finden Sie das Maximum dieses Unterarrays. 2) Nun ist das Konzept der gleitenden Durchschnitte sehr einfach: vorstellen, dass ich die folgende Liste haben: 1.4, 1.5, 1.4, 1.5, 1.5. Ich kann es glätten, indem ich den Durchschnitt von zwei Zahlen: 1.45, 1.45, 1.45, 1.5. Beachten Sie, dass die erste Zahl ist der Durchschnitt von 1,5 und 1,4 (zweite und erste Zahlen) die zweite (neue Liste) ist der Durchschnitt von 1,4 und 1,5 (dritte und zweite alte Liste) die dritte (neue Liste) der Durchschnitt von 1,5 und 1,4 (Vierte und dritte), und so weiter. Ich könnte es Zeitraum drei oder vier gemacht haben, oder n. Beachten Sie, wie die Daten viel glatter sind. Ein guter Weg, um zu sehen, gleitende Durchschnitte bei der Arbeit ist, gehen Sie zu Google Finance, wählen Sie eine Aktie (versuchen Tesla Motors ziemlich volatil (TSLA)) und klicken Sie auf Technische Daten am unteren Rand des Diagramms. Wählen Sie Moving Average mit einer bestimmten Periode und Exponential gleitenden Durchschnitt, um ihre Differenzen zu vergleichen. Exponentielle gleitende Durchschnitt ist nur eine weitere Ausarbeitung dieser, aber Gewichte die älteren Daten weniger als die neuen Daten ist dies ein Weg, um die Glättung nach hinten auszugleichen. Bitte lesen Sie den Wikipedia-Eintrag. Also, dies ist eher ein Kommentar als eine Antwort, aber die kleine Kommentar-Box war nur zu klein. Viel Glück. Wenn Sie Probleme mit der Mathematik haben, könnten Sie mit einem einfachen gleitenden Durchschnitt statt exponentiell gehen. Also die Ausgabe erhalten Sie die letzten x-Terme durch x geteilt werden. Ungetestetes Pseudocode: Beachten Sie, dass Sie die Anfangs - und Endteile der Daten behandeln müssen, da deutlich, dass Sie die letzten 5 Ausdrücke nicht durchschnittlich sind, wenn Sie auf Ihrem 2. Datenpunkt sind. Außerdem gibt es effizientere Methoden, diesen gleitenden Durchschnitt (sum sum - älteste neueste) zu berechnen, aber dies ist, um das Konzept von dem, was passiert, zu bekommen. Beantwortet Feb 8 12 at 20:41 Deine Antwort 2016 Stack Exchange, IncMean Filter, oder durchschnittliche Filter Kategorie. Digitale Signal - und Bildverarbeitung (DSP und DIP) Softwareentwicklung. Abstrakt. Der Artikel ist ein praktischer Leitfaden für durchschnittliche Filter oder durchschnittliche Filter Verständnis und Umsetzung. Artikel enthält Theorie, C-Quellcode, Programmieranleitung und Beispielanwendung. 1. Einführung in das Mittelfilter oder Mittelfilter Mittelwertfilter. Oder Durchschnittsfilter ist ein Fensterfilter der linearen Klasse, der das Signal glättet (Bild). Der Filter arbeitet als Tiefpaß. Die Grundidee hinter dem Filter ist für jedes Element des Signals (Bild) nehmen einen Durchschnitt über seine Nachbarschaft. Um zu verstehen, wie das in der Praxis gemacht wird, beginnen wir mit der Fensteridee. 2. Filter Fenster oder Maske Lassen Sie uns vorstellen, sollten Sie einen Brief lesen und was Sie sehen im Text durch Loch in spezielle Schablone wie diese eingeschränkt. Also, das Ergebnis des Lesens ist Sound t. Ok, lassen Sie uns den Brief wieder lesen, aber mit Hilfe einer anderen Schablone: ​​Jetzt ist das Ergebnis des Lesens t ist Sound 240. Lassen Sie uns den dritten Versuch machen: Jetzt lesen Sie Buchstaben t als Ton 952. Was passiert hier Zu sagen, dass In der mathematischen Sprache, machen Sie eine Operation (Lesen) über Element (Buchstabe t). Und das Ergebnis (Ton) hängt von der Elementnachbarschaft (Buchstaben neben t) ab. Und diese Schablone, die hilft, Elementnachbarschaft aufzuheben, ist Fenster Ja ist Fenster nur eine Schablone oder ein Muster, durch das Sie das Elementnachbarschaft 0151 einen Satz von Elementen um das gegebene 0151 vorwählen, um Ihnen zu helfen, Entscheidung zu treffen. Ein anderer Name für Filter-Fenster ist Maske 0151 Maske ist eine Schablone, die Elemente, die wir nicht darauf achten, versteckt. In unserem Beispiel ist das Element, das wir am linken Rand des Fensters betätigen, in der Praxis jedoch seine übliche Position die Mitte des Fensters. Lassen Sie uns einige Fenster Beispiele sehen. In einer Dimension. Feige. 4. Fenster oder Maske der Größe 5 in 1D. In zwei Dimensionen. Feige. 5. Fenster oder Maske der Größe 3times3 in 2D. In drei Dimensionen. Denken Sie über Gebäude. Und jetzt mdash über Raum in diesem Gebäude. Der Raum ist wie 3D-Fenster, das ausschneidet einige Unterraum aus dem gesamten Raum des Gebäudes. Sie finden 3D-Fenster in Volumen (Voxel) Bildverarbeitung. 3. Verständnis der mittleren Filter Nun wollen wir sehen, wie man einen Durchschnitt über Elemente neighborhoodrdquo. Die Formel ist einfach 0151 Summe Elemente und dividieren die Summe durch die Anzahl der Elemente. Wir wollen z. B. einen Durchschnitt für den Fall berechnen, der in Abb. Fig. 7 Feige. 7. Durchschnittlich. Und das ist alles. Ja, wir haben nur 1D-Signal durch Mittelfilter gefiltert Lassen Sie uns fortsetzen und schreiben Sie Schritt für Schritt Anleitungen für die Verarbeitung durch Mittelfilter. Mittleren Filter oder durchschnittlichen Filter-Algorithmus: Platzieren Sie ein Fenster über Element Nehmen Sie eine durchschnittliche 0151 Summe Elemente und dividieren Sie die Summe durch die Anzahl der Elemente. Nun, wenn wir den Algorithmus haben, ist es an der Zeit, einige Code mdash schreiben lassen uns auf die Programmierung kommen. 4. 1D-Mittelfilter-Programmierung In diesem Abschnitt entwickeln wir 1D-Mittelfilter mit Fenster der Größe 5. Wir haben 1D-Signal der Länge N als Eingang. Der erste Schritt ist die Platzierung der Fenster 0151 wir tun, dass durch Änderung der Index der führenden Element: Achten Sie darauf, dass wir mit dem dritten Element beginnen und Finishing mit den letzten zwei. Das Problem ist, dass wir nicht mit dem ersten Element beginnen können, da in diesem Fall der linke Teil des Filterfensters leer ist. Wir werden unten diskutieren, wie dieses Problem zu lösen. Der zweite Schritt ist die durchschnittliche, ok: Nun, schreiben Sie uns den Algorithmus als Funktion: Typ-Element könnte definiert werden als: 5. Behandlung von Kanten Für alle Fenster-Filter gibt es ein Problem. Das ist Kante behandeln. Wenn Sie Fenster über das erste (letzte) Element platzieren, ist der linke (rechte) Teil des Fensters leer. Um die Lücke zu schließen, sollte das Signal verlängert werden. Für Mittelfilter ist es sinnvoll, Signal - oder Bildsymmetrie so zu verlängern: So, bevor das Signal an unsere mittlere Filterfunktion weitergegeben wird, sollte das Signal verlängert werden. Lassen Sie uns aufschreiben die Hülle, die alle Vorbereitungen macht. Wie Sie sehen können, berücksichtigt unser Code einige praktische Fragen. Zuerst prüfen wir unsere Eingangsparameter 0151 Signal sollte nicht NULL sein und Signallänge sollte positiv sein: Zweiter Schritt 0151 prüfen wir Fall N1. Dieser Fall ist ein spezieller Fall, denn um eine Erweiterung zu bauen, brauchen wir mindestens zwei Elemente. Für das Signal von 1 Elementlänge ergibt sich das Signal selbst. Wie auch darauf achten, unsere mittlere Filter arbeitet an Ort und Stelle, wenn Ausgangsparameter Ergebnis NULL ist. Lassen Sie uns jetzt Speicher für Signalverlängerung zuteilen. Überprüfen Sie die Speicherzuweisung.


No comments:

Post a Comment