Exponential Gleitend Durchschnittlich Unregelmäßig
Exponentialbewegungsdurchschnitte für irreguläre Zeitreihen In der Zeitreihenanalyse gibt es häufig einen Bedarf an Glättungsfunktionen, die schnell auf Änderungen im Signal reagieren. In der typischen Anwendung können Sie ein Eingangssignal in Echtzeit verarbeiten und so etwas wie den aktuellen Durchschnittswert berechnen oder eine momentane Steilheit erhalten. Aber reale Welt Signale sind oft laut. Bei einigen verrauschten Abtastungen wird der aktuelle Wert des Signals oder seine Steigung stark variieren. Moving Averages Die einfachste Glättungsfunktion ist ein gleitender Durchschnitt. Als Muster kommen Sie in einen Durchschnitt der neuesten N-Werte. Dies führt zu einer Verzögerung 8211 oder Latenz. Ihr Durchschnitt wird immer um die Breite des gleitenden Durchschnitts verzögert. Das obige Beispiel ist relativ teuer zu berechnen. Für jede Probe müssen Sie über die gesamte Größe des Fensters iterieren. Aber es gibt billigere Möglichkeiten 8211 die Summe aller Samples im Fenster in einem Puffer zu halten und die Summe anzupassen, wenn neue Samples kommen: Ein anderer Typ von gleitendem Durchschnitt ist der 8220gewichtete gleitende Durchschnitt8221, der für jede Position im Sample-Fenster gewichtet wird. Vor dem Mitteln multiplizieren Sie jede Probe mit dem Gewicht dieser Fensterposition. Technisch wird dies als 8220convolution8221 bezeichnet. Eine typische Gewichtungsfunktion wendet eine Glockenkurve auf das Probenfenster an. Dies ergibt ein Signal, das stärker auf die Mitte des Fensters abgestimmt ist und noch etwas tolerant gegenüber verrauschten Abtastwerten ist. In der Finanzanalyse verwenden Sie häufig eine Gewichtungsfunktion, die die jüngsten Stichproben mehr bewertet, um einen gleitenden Durchschnitt zu geben, der die jüngsten Stichproben genauer verfolgt. Ältere Proben erhalten zunehmend weniger Gewicht. Dadurch werden die Effekte der Latenz etwas etwas gemildert und dennoch eine gute Glättung gegeben: Mit einem gewichteten Mittelwert müssen Sie immer über die gesamte Fenstergröße für jede Probe iterieren (es sei denn, Sie können die zulässigen Gewichte auf bestimmte Funktionen beschränken). Der exponentielle gleitende Durchschnitt Eine andere Art von Durchschnitt ist der exponentielle gleitende Durchschnitt oder EMA. Dies ist oft verwendet, wo Latenz ist kritisch, wie in Echtzeit Finanzanalyse. In diesem Durchschnitt nehmen die Gewichte exponentiell ab. Jede Probe wird um einige Prozent kleiner bewertet als die nächstfolgende Probe. Mit dieser Einschränkung können Sie den gleitenden Durchschnitt sehr effizient berechnen. Wo alpha eine Konstante ist, die beschreibt, wie die Fenstergewichte im Laufe der Zeit abnehmen. Zum Beispiel, wenn jede Probe mit 80 des Wertes des vorherigen Samples gewichtet werden sollte, würden Sie Alpha 0.2 setzen. Je kleiner alpha wird, desto länger ist Ihr gleitender Durchschnitt. (Z. B. wird es glatter, aber weniger reaktiv gegenüber neuen Proben). Die Gewichte für eine EMA mit alpha0.20 Wie Sie sehen können, müssen Sie für jede neue Stichprobe nur den Durchschnitt des vorherigen Mittelwertes ermitteln. Also ist die Berechnung sehr sehr schnell. In der Theorie tragen alle vorhergehenden Proben zum gegenwärtigen Durchschnitt bei, aber ihr Beitrag wird mit der Zeit exponentiell kleiner. Dies ist eine sehr leistungsfähige Technik, und wahrscheinlich die beste, wenn Sie einen gleitenden Durchschnitt, der schnell auf neue Proben reagieren wollen, hat gute Glättungseigenschaften und ist schnell zu berechnen. Der Code ist trivial: EMA für irreguläre Zeitreihen Die Standard-EMA ist in Ordnung, wenn das Signal in regelmäßigen Zeitabständen abgetastet wird. Aber was ist, wenn Ihre Proben in unregelmäßigen Intervallen kommen Stellen Sie sich ein kontinuierliches Signal, das in unregelmäßigen Abständen abgetastet wird. Dies ist die übliche Situation in der Finanzanalyse. In der Theorie gibt es eine kontinuierliche Funktion für den Wert eines Finanzinstruments, aber Sie können nur dieses Signal Probe, wenn jemand tatsächlich führt einen Handel. So besteht Ihr Datenstrom aus einem Wert, plus die Zeit, zu der es beobachtet wurde. Eine Möglichkeit, dies zu bewältigen, besteht darin, das irreguläre Signal in ein reguläres Signal umzuwandeln, indem Interpolation zwischen Beobachtungen und Resampling durchgeführt wird. Aber das verliert Daten, und es führt wieder Latenz. Es ist möglich, eine EMA für eine unregelmäßige Zeitreihe direkt zu berechnen: In dieser Funktion geben Sie die aktuelle Stichprobe aus Ihrem Signal und dem vorherigen Sample sowie die Zeit zwischen den beiden und den vorherigen Wert zurück Funktion. So wie gut funktioniert diese Arbeit Um zu zeigen, I8217ve erzeugt eine Sinuswelle, dann probiert es in unregelmäßigen Abständen, und führte etwa 20 Lärm. Das ist das Signal wird zufällig variieren - 20 aus dem ursprünglichen 8220true8221 Sinus-Signal. Wie gut der irreguläre exponentielle gleitende Durchschnitt das Signal wiederherstellt. Die rote Linie ist die ursprüngliche Sinuswelle 8211, die in unregelmäßigen Intervallen abgetastet wird. Die blaue Linie ist das Signal mit dem Rauschen hinzugefügt. Die blaue Linie ist das einzige Signal, das die EMA sieht. Die grüne Linie ist die geglättete EMA. Sie sehen, dass es das Signal ziemlich gut erholt. Ein wenig wackelig, aber was kann man von solch einem verrauschten Quellsignal erwarten Es ist um 15 nach rechts verschoben, da die EMA etwas Latenz einführt. Je mehr Sie wollen, desto mehr Latenz werden Sie sehen. Aber von diesem können Sie zB eine augenblickliche Steigung für ein lautes unregelmäßiges Signal berechnen. Was können Sie mit dem Hmm8230 tun. Resources: Ich habe einen kontinuierlichen Wert für die Id wie zu berechnen einen exponentiellen gleitenden Durchschnitt. Normalerweise verwendet man nur die Standardformel dafür: wobei S n der neue Durchschnitt ist, Alpha das Alpha ist, Y die Stichprobe ist und S n-1 der vorherige Durchschnitt ist. Leider, aufgrund verschiedener Fragen habe ich nicht eine konsistente Probe Zeit. Ich kann wissen, dass ich höchstens sagen kann, einmal pro Millisekunde, aber aufgrund von Faktoren aus meiner Kontrolle, kann ich nicht in der Lage, eine Probe für mehrere Millisekunden zu einer Zeit zu nehmen. Eine wahrscheinlich häufiger Fall ist jedoch, dass ich einfache Probe ein wenig früh oder spät: anstelle der Probenahme bei 0, 1 und 2 ms. I-Probe bei 0, 0,9 und 2,1 ms. Ich erwarte, dass, ungeachtet der Verzögerungen, meine Abtastfrequenz weit, weit über der Nyquist-Grenze liegen wird, und daher brauche ich mir keine Sorgen um Aliasing. Ich vermute, dass ich dies in einer mehr oder weniger vernünftigen Weise durch die Änderung der alpha passend, basierend auf der Länge der Zeit seit der letzten Probe. Ein Teil meiner Argumentation, dass dies funktionieren wird, ist, dass die EMA linear zwischen dem vorherigen Datenpunkt und dem aktuellen interpoliert. Wenn wir die Berechnung einer EMA der folgenden Liste von Proben in Intervallen t: 0,1,2,3,4 betrachten. Wir sollten das gleiche Ergebnis erhalten, wenn wir das Intervall 2t verwenden, bei dem die Eingänge 0,2,4 werden. Wenn die EMA davon ausgegangen ist, dass bei t 2 der Wert 2 seit t 0 war. Das wäre das gleiche wie das Intervall t Berechnung Berechnung auf 0,2,2,4,4, die ihr nicht tun. Oder macht das überhaupt Sinn Kann mir jemand sagen, wie man das Alpha passend ändert Bitte zeigen Sie Ihre Arbeit. D. h. Zeigen Sie mir die Mathematik, die beweist, dass Ihre Methode wirklich das Richtige tut. Sie sollten nicht erhalten die gleiche EMA für verschiedene Eingabe. Denken Sie an EMA als Filter, ist das Sampling bei 2t äquivalent zu Down-Sampling, und der Filter wird einen anderen Ausgang zu geben. Dies ist mir klar, da 0,2,4 höherfrequente Komponenten als 0,1,2,3,4 enthält. Sofern die Frage ist, wie kann ich ändern Sie den Filter on the fly, damit es die gleiche Ausgabe. Vielleicht fehle ich etwas ndash freespace Aber der Eingang ist nicht anders, it39s nur selten abgetastet. 0,2,4 in Intervallen 2t ist wie 0,, 2,, 4 in Intervallen t, wobei die zeigt, dass die Probe ignoriert wird ndash Curt Sampson Jun 21 09 um 23:45 Diese Antwort auf meinem guten Verständnis von Tiefpass Filter (exponentiellen gleitenden Durchschnitt ist wirklich nur ein einpoliges Tiefpassfilter), aber mein dunstiges Verständnis dessen, was Sie suchen. Ich denke, das folgende ist, was Sie wollen: Erstens können Sie Ihre Gleichung ein wenig zu vereinfachen (sieht komplizierter, aber es ist einfacher in Code). Im gehend, Y für Ausgang und X für Eingang zu verwenden (anstelle von S für Ausgang und Y für Eingang, wie Sie getan haben). Zweitens ist der Wert von alpha hier gleich 1-e - Deltattau, wobei Deltat die Zeit zwischen den Abtastwerten ist und tau die Zeitkonstante des Tiefpaßfilters ist. Ich sage gleich in Anführungszeichen, weil dies gut funktioniert, wenn Deltattau ist klein im Vergleich zu 1, und alpha 1-e - Deltattau asymp Deltattau. (Aber nicht zu klein: youll laufen in Quantisierungsprobleme, und wenn Sie nicht auf einige exotische Techniken zurückgreifen, benötigen Sie normalerweise eine zusätzliche N Bits Auflösung in Ihrer Zustandsvariable S, wo N-Log 2 (alpha).) Für größere Werte von Deltattau Beginnt der Filtereffekt zu verschwinden, bis Sie zu dem Punkt kommen, an dem Alpha in der Nähe von 1 liegt, und Sie haben grundsätzlich nur den Eingang der Ausgabe zugewiesen. Dies sollte ordnungsgemäß mit unterschiedlichen Werten von Deltat funktionieren (die Variation von Deltat ist nicht sehr wichtig, solange alpha klein ist, sonst laufen Sie in einige ziemlich seltsame Nyquist Fragen Aliasing etc.), und wenn Sie arbeiten an einem Prozessor, wo Multiplikation Ist billiger als Division, oder Festkomma-Probleme sind wichtig, vorberechnen Omega-1tau, und erwägen zu versuchen, die Formel für Alpha zu approximieren. Wenn Sie wirklich wissen wollen, wie die Formel alpha 1-e - Deltattau abgeleitet werden kann, dann betrachten wir ihre Differentialgleichungsquelle: die, wenn X eine Einheitsschrittfunktion ist, die Lösung Y 1 - e - ttau hat. Für kleine Werte von Deltat kann das Derivat durch DeltaYDeltat angenähert werden, was Ytau DeltaYDeltat X DeltaY (XY) (Deltattau) alpha (XY) ergibt und die Extrapolation von alpha 1-e - Deltattau kommt von dem Versuch, Einheit Schritt Funktion Fall. Würden Sie bitte erläutern, auf die Quottrying, um das Verhaltenquot Teil Match Ich verstehe Ihre kontinuierliche Zeit-Lösung Y 1 - exp (-t47) und seine Generalisierung auf eine skalierte Schritt-Funktion mit der Größe x und Anfangszustand y (0). Aber I39m nicht sehen, wie diese Ideen zusammen, um Ihr Ergebnis zu erzielen. Ndash Rhys Ulerich May 4 13 at 22:34 Dies ist keine vollständige Antwort, aber kann der Anfang von einem sein. Seine so weit wie ich mit diesem in einer Stunde oder so zu spielen Im Posting es als ein Beispiel für das, was Im Suchen, und vielleicht eine Inspiration für andere, die an dem Problem. Ich beginne mit S 0. Was der Mittelwert ist, der sich aus dem vorherigen Mittelwert S -1 und dem Abtastwert Y 0 bei t 0 ergibt. (T & sub1; - t & sub0;) ist mein Abtastintervall und & alpha; ist auf das eingestellt, was für dieses Abtastintervall und den Zeitraum, über den ich den Durchschnitt wünsche, geeignet ist. Ich überlegte, was passiert, wenn ich die Probe bei t 1 vermisse und stattdessen mit der mit t 2 getroffenen Probe Y 2 zu tun habe. Nun können wir mit der Erweiterung der Gleichung beginnen, um zu sehen, was geschehen wäre, wenn wir gehabt hätten. Y 1: Ich bemerke, dass die Reihe unendlich auf diese Weise zu erweitern scheint, weil wir die S n auf der rechten Seite unendlich ersetzen können , Also sein nicht wirklich ein Polynom (albernes me), aber, wenn wir den Anfangsbegriff durch eins multiplizieren, sehen wir dann ein Muster: Hm: es ist eine exponentielle Reihe. Quelle Überraschung Stellen Sie sich vor, dass kommen aus der Gleichung für einen exponentiellen gleitenden Durchschnitt Also irgendwie habe ich diese x 0 x 1 x 2 x 3. Ding gehen, und Im sicher Im riechen e oder einen natürlichen Logarithmus treten hier herum, aber ich kann mich nicht erinnern, wo ich als nächstes ging, bevor ich aus der Zeit lief. Jede Antwort auf diese Frage oder ein Korrektheitsnachweis einer solchen Antwort hängt stark von den Daten ab, die Sie messen. Wenn Ihre Proben bei t 0 0ms genommen wurden. T 1 0,9 ms und t 2 2,1 ms. Aber Ihre Alpha-Auswahl basiert auf 1-ms-Intervallen, weshalb Sie ein lokal angepasstes Alpha n wünschen. Der Beweis der Korrektheit der Wahl würde bedeuten, die Probenwerte bei t1ms und t2ms zu kennen. Dies führt zu der Frage: Können Sie Ihre Daten resonable interpolieren, um vernünftige Vermutungen, was in-between Werte haben könnte Oder können Sie sogar den Durchschnitt selbst interpolieren Wenn keiner von diesen möglich ist, dann soweit ich es sehe, die logische Die Wahl eines Zwischenwerts Y (t) ist der zuletzt berechnete Durchschnitt. D. h. Y (t) Asymp S n, wobei n maxmial ist, so dass t n ltt. Diese Wahl hat eine einfache Konsequenz: Lassen Sie alpha allein, egal was der Zeitunterschied war. Wenn auf der anderen Seite ist es möglich, Ihre Werte zu interpolieren, dann geben Sie Ihnen averagable Konstanten-Intervall-Samples. Schließlich, wenn sein sogar möglich ist, den Durchschnitt selbst zu interpolieren, würde das die Frage bedeutungslos machen. Ich glaube, ich kann meine Daten interpolieren: angesichts der Tatsache, dass I39m es in diskreten Intervallen, I39m, die bereits dies mit einem Standard-EMA Anyway, davon ausgehen, dass ich brauche Dass es funktioniert sowie eine Standard-EMA, die auch hat ein falsches Ergebnis zu produzieren, wenn die Werte nicht ändern, ziemlich gleichmäßig zwischen Sample-Perioden. Ndash Curt Sampson Aber das ist, was ich sagen: Wenn Sie die EMA eine Interpolation Ihrer Werte, you39re getan, wenn Sie verlassen Alpha, wie es ist (weil das Einfügen der jüngsten Durchschnitt, wie Y doesn39t ändern den Durchschnitt) . Wenn Sie sagen, dass Sie etwas brauchen, dass Zehnarbeit sowie eine Standard-EMAquot - was ist falsch mit dem Original Wenn Sie nicht mehr Informationen über die Daten, die Sie gemessen haben, werden alle lokalen Anpassungen an Alpha am besten willkürlich sein. Ndash balpha 9830 Jun 21 09 at 15:31 Ich würde den Alpha-Wert allein zu verlassen, und füllen Sie die fehlenden Daten. Da Sie nicht wissen, was während der Zeit geschieht, wenn Sie Probe nicht können, können Sie diese Proben mit 0s füllen, oder halten Sie den vorherigen Wert stabil und verwenden Sie diese Werte für die EMA. Oder eine Rückwärtsinterpolation, sobald Sie ein neues Sample haben, die fehlenden Werte ausfüllen und die EMA neu berechnen. Was ich versuche zu bekommen ist, haben Sie eine Eingabe xn, die Löcher hat. Es gibt keine Möglichkeit, um die Tatsache, dass Sie Daten fehlen. Sie können also einen Halten nullter Ordnung verwenden oder auf null setzen oder eine Art von Interpolation zwischen xn und xnM. Wobei M die Anzahl der fehlenden Proben und n der Beginn der Lücke ist. Eventuell sogar mit Werten vor n. Ich denke, dass nur Variieren der Alpha tatsächlich geben mir die richtige Interpolation zwischen den beiden Punkten, die Sie sprechen, aber in einer Viel einfacher Weg. Darüber hinaus denke ich, dass die Veränderung der Alpha wird auch ordnungsgemäß befassen sich mit Proben, die zwischen den Standard-Probenahme Intervalle. Mit anderen Worten, I39m auf der Suche nach dem, was Sie beschrieben, aber versuchen, Mathematik, um herauszufinden, die einfache Möglichkeit, es zu tun. Ndash Curt Sampson Ich glaube nicht, es gibt so ein Biest wie quotproper Interpolationquot. Sie wissen einfach nicht, was in der Zeit passiert ist, die Sie nicht probieren. Gute und schlechte Interpolation impliziert etwas Wissen, was Sie verpasst haben, da Sie messen müssen, um zu beurteilen, ob eine Interpolation gut oder schlecht ist. Obwohl dies gesagt, können Sie Begrenzungen, dh mit maximaler Beschleunigung, Geschwindigkeit, etc. zu setzen. Ich denke, wenn Sie wissen, wie die fehlenden Daten Modell, dann würden Sie nur Modell die fehlenden Daten, dann wenden Sie den EMA-Algorithmus ohne Veränderung eher Als das Ändern von alpha. Just my 2c :) ndash freespace Das ist genau das, was ich in meinem Bearbeiten auf die Frage vor 15 Minuten: quotYou einfach don39t wissen, was passiert in der Zeit, die Sie nicht Stichproben, aber that39s true Auch wenn Sie in jedem bestimmten Intervall Probe. So meine Nyquist-Kontemplation: Solange Sie wissen, die Wellenform doesn39t Richtungen ändern mehr als jedes Paar von Proben, die tatsächliche Probe-Intervall shouldn39t Angelegenheit, und sollte in der Lage sein zu variieren. Die EMA-Gleichung scheint mir genau so zu berechnen, als ob sich die Wellenform linear vom letzten Abtastwert zum aktuellen verändert hätte. Ndash Curt Sampson Ich glaube nicht, dass das stimmt. Das Nyquist39s-Theorem erfordert mindestens 2 Abtastungen pro Periode, um das Signal eindeutig identifizieren zu können. Wenn Sie das nicht tun, erhalten Sie Aliasing. Es wäre das gleiche wie das Sampling als fs1 für eine Zeit, dann fs2, dann zurück zu fs1, und Sie erhalten Aliasing in die Daten, wenn Sie mit fs2 Probe, wenn fs2 ist unter dem Nyquist-Limit. Ich muss auch gestehen, ich verstehe nicht, was du meinst, durch Quotwellenformänderungen linear vom letzten Sample zum aktuellen onequot. Könnten Sie bitte erklären, Cheers, Steve. Ndash freespace Dies ist ähnlich wie ein offenes Problem auf meiner Todo-Liste. Ich habe ein Schema ausgearbeitet, bis zu einem gewissen Grad, aber haben keine mathematische Arbeit, um diesen Vorschlag noch zu unterstützen. Update amp summary: Möchte den Glättungsfaktor (alpha) unabhängig vom Kompensationsfaktor behalten (was ich hier als beta beziehe). Jasons ausgezeichnete Antwort bereits akzeptiert hier funktioniert super für mich. Wenn Sie auch die Zeit seit der letzten Abtastung messen können (in gerundeten Vielfachen Ihrer konstanten Abtastzeit - also 7,8 ms, da die letzte Probe 8 Einheiten betragen würde), könnte dies dazu verwendet werden, die Glättung mehrfach anzuwenden. Wenden Sie in diesem Fall die Formel 8 mal an. Sie haben effektiv eine Glättung vorgespannt mehr auf den aktuellen Wert. Um eine bessere Glättung zu erhalten, müssen wir das Alpha zwicken, während wir die Formel 8 mal im vorherigen Fall anwenden. Was wird diese Glättung Approximation verpassen Es hat bereits 7 Proben im obigen Beispiel verpasst Dies wurde in Schritt 1 mit einer abgeflachten Wiederanwendung des aktuellen Wertes zusätzlich 7 mal angenähert Wenn wir einen Approximationsfaktor beta, die zusammen mit alpha angewendet wird (Als alphabeta statt nur alpha), gehen wir davon aus, dass sich die 7 verpassten Samples zwischen den vorherigen und den aktuellen Sample-Werten sanft veränderten. Ich habe darüber nachgedacht, aber ein wenig mucking about mit der Mathematik hat mich auf den Punkt, wo ich glaube, dass, anstatt die Anwendung der Formel achtmal mit dem Beispielwert, kann ich eine Berechnung zu tun Von einem neuen Alpha, das mir erlauben wird, die Formel einmal anzuwenden, und geben mir das gleiche Ergebnis. Ferner würde dies automatisch mit der Ausgabe von Proben, die von exakten Abtastzeitpunkten versetzt sind, behandelt. Ndash Curt Sampson Jun 21 09 at 13:47 Die einzige Anwendung ist in Ordnung. Was ich noch nicht sicher bin, ist, wie gut die Annäherung der 7 fehlenden Werte ist. Wenn die kontinuierliche Bewegung macht den Wert Jitter eine Menge über die 8 Millisekunden, die Annäherungen können ganz aus der Realität. Aber, wenn Sie Probenahme bei 1ms (höchste Auflösung ohne die verzögerten Proben) haben Sie bereits dachte der Jitter innerhalb von 1ms ist nicht relevant. Funktioniert diese Argumentation für Sie (ich versuche immer noch, mich zu überzeugen). Ndash nik Jun 21 09 at 14:08 Richtig. Das ist der Faktor Beta aus meiner Beschreibung. Ein Betafaktor würde basierend auf dem Differenzintervall und den aktuellen und vorherigen Abtastwerten berechnet. Das neue Alpha wird (Alphabet), aber es wird nur für diese Probe verwendet werden. Während Sie das Alpha in der Formel 39 zu haben scheinen, neige ich zu konstantem Alpha (Glättungsfaktor) und einem unabhängig berechneten Beta (einem Tuningfaktor), der die gerade ausgefallenen Samples kompensiert. Ndash nik Jun 21 09 at 15:23
Comments
Post a Comment