Saturday 28 January 2017

Exponential Moving Average Unregelmäßige Zeitreihen

Im versuchen zu graben einige Metriken, die auf, wie zuverlässig Clients Verbindung zu einem Dienst zu sehen. Die Rohdaten sind in Form von Client A, kam onlineoffline zum Zeitpunkt X. Die Verbindung ist sehr unzuverlässig, und ich möchte irgendeine Art von gleitenden Durchschnitt zu zeigen, ob die Verbindung verbessert oder nicht im Laufe der Zeit. Clients sind nicht immer verbunden, also einfach offline zu gehen bedeutet nicht, dass es ein Fehler ist. So weit, Ive genommen dann Daten und angewandt einige Annahmen, um es zu vereinfachen, nehme ich an, dass, wenn ein Client wieder innerhalb einer Minute der Trennung, dann ist das ein Fehler. Diese Ive modelliert als eine einfache impluses, dh. Client A hatte zum Zeitpunkt X Fehler. Der Teil Im, der kämpft, ist, wie man dieses Diagramm in einen gleitenden Durchschnitt umdreht (Im, das mit R spielt, um die Zahlen zu knacken). Ich glaube, ich sollte in der Lage, dies mit einem Tiefpassfilter tun, oder verwenden Sie das Zoo-Paket und Rollmean. Jedoch weiß ich nicht, wie man die Fälle behandelt, in denen der Klient einfach nicht online sein wollte. Ich habe einen ununterbrochenen Wert, für den Id mögen einen exponentiellen gleitenden Durchschnitt berechnen. 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 approximieren. Wenn Sie wirklich wissen wollen, wie Sie die Formel alpha 1-e - Deltattau herleiten, dann betrachten wir die 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 ich suche, und vielleicht eine Inspiration für andere, die an dem Problem. Ich beginne mit S 0. Was der Mittelwert ist, der sich aus dem vorhergehenden 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 passiert 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: Ok , 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 I39m 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 meiner Beantwortung der 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, zu einem gewissen Grad, aber haben keine mathematische Arbeit, um diese Anregung 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


No comments:

Post a Comment