Friday 17 February 2017

Exponential Moving Average Iir

Der exponentielle gleitende Durchschnitt ist ein Typ des IIR-Filters, der einfach in C implementiert werden kann und minimale Ressourcen verwendet. Anders als ein einfacher gleitender Durchschnitt erfordert es keinen RAM-Puffer, um vorherige Abtastwerte zu speichern. Es muss nur einen Wert (der vorherige Durchschnitt) zu speichern. Ein exponentieller gleitender Durchschnitt wird als die folgende Gleichung ausgedrückt: avgn (in alpha) avgn-1 (1-alpha). Die Implementierung dieser Gleichung mit Floating-Point-Mathematik ist einfach, aber mit festen Punkt-Variablen ist ein wenig heikel. Das Code-Snippet verwendet hier 32-Bit-signierte Ganzzahlen für die Durchschnitts - und Eingabewerte. Zwischenwerte müssen 64-Bit-Mathematik verwenden, um Überlauffehler zu vermeiden. Alpha-Werte nahe bei Null repräsentieren eine starke Mittelung, während ein Alpha-Wert von einem keine Mittelung aufweist. Auf der Zeile, wo temp0 berechnet wird, glaube ich, dass das Ende der Zeile lesen sollte (65535 - alpha) Andernfalls würde ein Alpha von 1 unsachgemäß den vorherigen Durchschnitt sowie den neuen Wert enthalten. Leider hat der dargestellte Code zwei Hauptfehler, da der Durchschnitt als Ganzzahl gespeichert ist. Um dies zu sehen, können Sie wählen alpha zu 1024. Wir beginnen mit adcvalue 0, dann dspemai32 wird 0 wie erwartet zurück. Dann hebt adcvalue auf 1. tmp0 in dspemai32 ist: tmp0 (int64t) 1 (1024) (int64t) 0 (65536 - 1024) 1024 0 64512 1024 so ist der zurückgegebene Wert: (int32t) ((tmp0 32768) 65536) ( 1024 32768) 65536 33792 65536 0 So dspemai32 wird auf 0 zurückkehren, während es (nach lang genug Filterzeit) am Ende Rückkehr 1. Der Code implementiert effektiv einen Filter mit einer toten Zone, nicht ändern, bis die Eingabe von der unterscheidet Durchschnittlich um 32768 alpha oder mehr oder unterscheidet sich durch - (32768 alpha) oder weniger. Nach dem obigen Beispiel wird der Adcwert auf 31 erhöht (was kleiner als 32768 alpha ist). Tmp0 in dspemai32 ist: tmp0 (int64t) 31 (1024) (int64t) 0 (65536 - 1024) 31744 0 64512 31744 Der zurückgegebene Wert lautet: (int32t) ((tmp0 32768) 65536) (31744 32768) 65536 64512 65536 Tmp0 in dspemai32 ist: tmp0 (int64t) 32 (1024) (int64t) 0 (65536 - 1024) 32768 0 64512 32768 so dass der zurückgegebene Wert ist: ( Int32t) ((tmp0 32768) 65536) (32768 32768) 65536 65536 65536 1 So zumindest bewegt sich der Durchschnitt auf den Eingangswert um 1. Das ist gut. Aber dann: tmp0 (int64t) 32 (1024) (int64t) 1 (65536 - 1024) 32768 1 64512 97280 so ist der zurückgegebene Wert: (int32t) ((tmp0 97280) 65536) (97280 32768) 65536 130048 65536 1 So dspemai32 Wird auf die Rückkehr 1, nie den Eingangswert von 32 zu halten. Nicht gut. Der zweite Fehler ist die Integer-Division (tmp0 32768) 65536. In C C wird die ganzzahlige Division in Richtung 0 gehen, so dass in dieser Situation die Totzone sogar größer ist. Viel besser (und viel einfacher) ist der Algorithmus, wie von david. prentice auf avrfreaks. netcomment824765comment-824765 gezeigt: lang gesamt 0 int durchschnittlich 0 int N 0 Arbeitszahl der Proben. Gesamt-ADCW zum laufenden Gesamtbetrag addieren wenn (N gt MAXSAMPLES) genügend Samples gesamt - durchschnittlich ein anderes entfernen N average total N integerExponential Filter Diese Seite beschreibt exponentielle Filterung, den einfachsten und beliebtesten Filter. Dies ist Teil des Abschnitts Filterung, der Teil des Leitfadens zur Fehlerdetektion und - diagnose ist. Überblick, Zeitkonstante und Analogäquivalent Der einfachste Filter ist der Exponentialfilter. Es hat nur einen Abstimmungsparameter (außer dem Probenintervall). Es erfordert die Speicherung nur einer Variablen - der vorherigen Ausgabe. Es ist ein IIR (autoregressive) Filter - die Auswirkungen einer Eingangsveränderung Zerfall exponentiell, bis die Grenzen der Displays oder Computer Arithmetik verstecken. In verschiedenen Disziplinen wird die Verwendung dieses Filters auch als 8220exponentielle Glättung8221 bezeichnet. In einigen Disziplinen wie der Investitionsanalyse wird der exponentielle Filter als 8220Exponential Weighted Moving Average8221 (EWMA) oder nur 8220Exponential Moving Average8221 (EMA) bezeichnet. Dies missbräuchlich die traditionelle ARMA 8220moving average8221 Terminologie der Zeitreihenanalyse, da es keinen Eingabehistorie gibt, der verwendet wird - nur die aktuelle Eingabe. Es ist die diskrete Zeit-Äquivalent der 8220 ersten Ordnung lag8221 häufig in Analog-Modellierung von Dauer-Zeit-Systeme verwendet. In elektrischen Schaltkreisen ist ein RC-Filter (Filter mit einem Widerstand und einem Kondensator) eine Verzögerung erster Ordnung. Bei der Betonung der Analogie zu analogen Schaltungen, ist der einzige Tuning-Parameter die 8220time constant8221, in der Regel als klein geschriebenen griechischen Buchstaben Tau () geschrieben. Tatsächlich entsprechen die Werte bei den diskreten Abtastzeiten genau der äquivalenten kontinuierlichen Zeitverzögerung mit der gleichen Zeitkonstante. Die Beziehung zwischen der digitalen Implementierung und der Zeitkonstante wird in den folgenden Gleichungen gezeigt. Exponentielle Filtergleichungen und Initialisierung Das Exponentialfilter ist eine gewichtete Kombination der vorherigen Schätzung (Ausgabe) mit den neuesten Eingangsdaten, wobei die Summe der Gewichte gleich 1 ist, so dass die Ausgabe mit dem Eingang im stationären Zustand übereinstimmt. Nach der bereits eingeführten Filternotation ist y (k) ay (k - 1) (1 - a) x (k) wobei x (k) die Roheingabe zum Zeitschritt ky (k) die gefilterte Ausgabe zum Zeitschritt ka ist Ist eine Konstante zwischen 0 und 1, normalerweise zwischen 0,8 und 0,99. (A-1) oder a wird manchmal die 8220-Glättungskonstante8221 genannt. Für Systeme mit einem festen Zeitschritt T zwischen Abtastwerten wird die Konstante 8220a8221 nur dann berechnet und gespeichert, wenn der Anwendungsentwickler einen neuen Wert der gewünschten Zeitkonstante angibt. Bei Systemen mit Datenabtastung in unregelmäßigen Abständen muss bei jedem Zeitschritt die exponentielle Funktion verwendet werden, wobei T die Zeit seit dem vorhergehenden Abtastwert ist. Der Filterausgang wird normalerweise initialisiert, um dem ersten Eingang zu entsprechen. Wenn die Zeitkonstante 0 nähert, geht a auf Null, so dass keine Filterung 8211 der Ausgang dem neuen Eingang entspricht. Da die Zeitkonstante sehr groß wird, werden Ansätze 1, so dass neue Eingabe fast ignoriert wird 8211 sehr starkes Filtern. Die obige Filtergleichung kann in folgendes Vorhersagekorrektor-Äquivalent umgeordnet werden: Diese Form macht deutlich, dass die variable Schätzung (Ausgabe des Filters) unverändert von der vorherigen Schätzung y (k-1) plus einem Korrekturterm basiert wird Auf die unerwartete 8220innovation8221 - die Differenz zwischen dem neuen Eingang x (k) und der Vorhersage y (k-1). Diese Form ist auch das Ergebnis der Ableitung des Exponentialfilters als einfacher Spezialfall eines Kalman-Filters. Die die optimale Lösung für ein Schätzproblem mit einem bestimmten Satz von Annahmen ist. Schrittantwort Eine Möglichkeit, den Betrieb des Exponentialfilters zu visualisieren, besteht darin, sein Ansprechen über die Zeit auf eine Stufeneingabe aufzuzeichnen. Das heißt, beginnend mit dem Filtereingang und dem Ausgang bei 0 wird der Eingangswert plötzlich auf 1 geändert. Die resultierenden Werte sind nachstehend aufgetragen: In dem obigen Diagramm wird die Zeit durch die Filterzeitkonstante tau geteilt, so daß man leichter prognostizieren kann Die Ergebnisse für einen beliebigen Zeitraum, für jeden Wert der Filterzeitkonstante. Nach einer Zeit gleich der Zeitkonstante steigt der Filterausgang auf 63,21 seines Endwertes an. Nach einer Zeit gleich 2 Zeitkonstanten steigt der Wert auf 86,47 seines Endwertes an. Die Ausgänge nach Zeiten gleich 3,4 und 5 Zeitkonstanten sind jeweils 95,02, 98,17 bzw. 99,33 des Endwerts. Da der Filter linear ist, bedeutet dies, dass diese Prozentsätze für jede Größenordnung der Schrittänderung verwendet werden können, nicht nur für den hier verwendeten Wert 1. Obwohl die Stufenantwort in der Theorie aus praktischer Sicht eine unendliche Zeit in Anspruch nimmt, sollte man an den exponentiellen Filter 98 bis 99 8220done8221 denken, der nach einer Zeit gleich 4 bis 5 Filterzeitkonstanten reagiert. Variationen des Exponentialfilters Es gibt eine Variation des exponentiellen Filters mit dem Namen 8220nonlinearem exponentiellem Filter8221 Weber, 1980. Es soll starkes Rauschen innerhalb einer bestimmten 8220typical8221 Amplitude filtern, aber dann schneller auf größere Änderungen reagieren. Copyright 2010 - 2013, Greg Stanley Teilen Sie diese Seite: Nehmen wir die erste Ordnung IIR Filter: yn alpha xn (1 - alpha) yn - 1 Wie kann ich den Parameter alpha s. t. Das IIR annähernd so gut wie möglich die FIR, die das arithmetische Mittel der letzten k Proben ist: Wo n in k, infty), was bedeutet, dass der Eingang für den IIR länger als k sein kann und dennoch Id die beste Annäherung der haben Mittelwert der letzten k Eingänge. Ich weiß, die IIR hat unendliche Impulsantwort, daher Im auf der Suche nach der besten Annäherung. Id für die analytische Lösung glücklich sein, ob es für oder ist. Wie konnten diese Optimierungsprobleme nur mit der 1. Ordnung IIR gelöst werden. (1 - alpha) yn - 1 genau ndash Es ist verpflichtet, eine sehr schlechte Annäherung zu werden. Can39t Sie leisten, alles, was mehr als ein First-Order IIR ndash leftaroundover Okt 6 11 at 13:42 Vielleicht möchten Sie Ihre Frage bearbeiten, so dass Sie don39t verwenden yn zu zwei verschiedenen Dingen bedeuten, z. Könnte die zweite angezeigte Gleichung zn frac xn cdots frac xn-k1 lesen, und Sie könnten sagen, was genau ist Ihr Kriterium der Quoten gut als möglichequot z. B. Wollen Sie vert yn - znvert so klein wie möglich für alle n, oder vert yn - znvert2 so klein wie möglich für alle n sein. Ndaren Dilip Sarwate Ich weiß, das ist eine alte Post so, wenn Sie sich erinnern können: wie ist Ihre Funktion 39f39 abgeleitet I39ve codiert eine ähnliche Sache, sondern mit den komplexen Übertragungsfunktionen für FIR (H1) und IIR (H2 ) Und dann Summe (abs (H1 - H2) 2). I39ve verglichen dieses mit Ihrer Summe (fj), aber erhalten unterschiedliche resultierende Ausgänge. Dachte, ich würde vor dem Pflügen durch die Mathematik fragen. (1 - alpha) alpha xn - 1 (1 - alpha) 2 yn - 1 ampamp alpha xn (1 - alpha) alpha xn - 1 (1 - alpha) 2 yn - 2 ampamp alpha xn (1 - alpha) alpha xn-1 (1 - alpha) 2 alpha xn-2 (1 - alpha) 3 yn - 3 Ende, so daß der Koeffizient von xn-m alpha (1-alpha) m ist . Der nächste Schritt ist, Derivate zu nehmen und gleich Null zu sein. Betrachtet man ein Plot des abgeleiteten J für K 1000 und Alpha von 0 bis 1, sieht es aus wie das Problem (wie Ive es aufgestellt) ist schlecht gestellt, weil die beste Antwort ist Alpha 0. Ich denke, Theres ein Fehler hier. Die Art und Weise sollte es nach meinen Berechnungen sein: Mit dem folgenden Code auf MATLAB ergibt etwas Äquivalentes zwar unterschiedlich: Jedenfalls haben diese Funktionen Minimum. So können wir annehmen, dass wir uns nur um die Annäherung über die Unterstützung (Länge) des FIR-Filters kümmern. In diesem Fall ist das Optimierungsproblem genau: J2 (alpha) sum (alpha (1-alpha) m - frac) 2 Das Plotten J2 (alpha) für verschiedene Werte von K versus alpha ergibt das Datum in den Diagrammen und der Tabelle unten. Für K 8. alpha 0,1533333 für K 16. alpha 0,08 für K 24. alpha 0,0533333 für K 32. alpha 0,04 für K 40. alpha 0,0333333 für K 48. alpha 0,0266667 für K 56. alpha 0,0233333 für K 64. alpha 0,02 für K 72. alpha 0.0166667 Die roten gestrichelten Linien sind 1K und die grünen Linien alpha, der Wert von alpha, der J2 (alpha) minimiert (ausgewählt aus tt alpha 0: 0,01: 13). Theres eine nette Diskussion dieses Problems in der eingebetteten Signalverarbeitung mit der Mikrosignalarchitektur. Etwa auf den Seiten 63 und 69. Auf Seite 63 ist eine Ableitung des exakten rekursiven gleitenden Durchschnittsfilters (die niaren in seiner Antwort gegeben hat) enthalten. Zur Bequemlichkeit in Bezug auf die folgende Diskussion entspricht sie der folgenden Differenzengleichung: Die Näherung Die den Filter in die von Ihnen angegebene Form bringt, vorausgesetzt, dass x approx y, weil (und ich zitiere aus S. 68) y der Mittelwert von xn Proben ist. Diese Approximation erlaubt es uns, die vorstehende Differenzengleichung wie folgt zu vereinfachen: Einstellen von alpha, erhalten wir zu Ihrer ursprünglichen Form y alpha xn (1-alpha) y, was zeigt, dass der Koeffizient, den Sie (in Bezug auf diese Approximation) genau 1over haben wollen (Wobei N die Anzahl der Proben ist). Ist diese Annäherung die beste in irgendeiner Hinsicht Seine sicherlich elegant. Heres, wie sich die Amplitudenreaktion bei 44,1 kHz für N 3 vergleicht und wenn N auf 10 erhöht wird (Approximation in blau): Wie aus der Peters-Antwort hervorgeht, kann die Annäherung eines FIR-Filters mit einem rekursiven Filter unter einer Kleinste-Quadrate-Norm problematisch sein. Eine ausführliche Diskussion darüber, wie dieses Problem im Allgemeinen gelöst werden kann, finden Sie in JOSs These, Techniken für Digitalfilter Design und System Identifikation mit Anwendung auf die Violine. Er befürwortet die Verwendung der Hankel-Norm, aber in Fällen, in denen die Phasenreaktion keine Rolle spielt, deckt er auch die Kopecs-Methode ab, die in diesem Fall gut funktionieren könnte (und eine L2-Norm verwendet). Einen breiten Überblick über die Techniken in der Arbeit finden Sie hier. Sie können andere interessante Approximationen liefern.


No comments:

Post a Comment