Wednesday 1 February 2017

Exponential Moving Average Dsp

Exponential Moving Average - EMA BREAKING DOWN Exponential Moving Average - EMA Die 12- und 26-Tage-EMAs sind die beliebtesten Kurzzeitmittelwerte und werden verwendet, um Indikatoren wie die gleitende durchschnittliche Konvergenzdivergenz (MACD) und den prozentualen Preisoszillator zu erzeugen (PPO). Im Allgemeinen werden die 50- und 200-Tage-EMAs als Signale von langfristigen Trends verwendet. Trader, die technische Analyse verwenden finden fließende Mittelwerte sehr nützlich und aufschlussreich, wenn sie richtig angewendet werden, aber Chaos verursachen, wenn sie falsch verwendet werden oder falsch interpretiert werden. Alle gleitenden Mittelwerte, die gewöhnlich in der technischen Analyse verwendet werden, sind von Natur aus nacheilende Indikatoren. Folglich sollten die Schlussfolgerungen aus der Anwendung eines gleitenden Durchschnitts auf ein bestimmtes Marktdiagramm eine Marktbewegung bestätigen oder ihre Stärke belegen. Sehr oft, bis eine gleitende durchschnittliche Indikatorlinie eine Änderung vorgenommen hat, um eine bedeutende Bewegung auf dem Markt zu reflektieren, ist der optimale Punkt des Markteintritts bereits vergangen. Eine EMA dient dazu, dieses Dilemma zu einem gewissen Grad zu lindern. Da die EMA-Berechnung mehr Gewicht auf die neuesten Daten setzt, umgibt sie die Preisaktion etwas fester und reagiert damit schneller. Dies ist wünschenswert, wenn ein EMA verwendet wird, um ein Handelseintragungssignal abzuleiten. Interpretation der EMA Wie alle gleitenden Durchschnittsindikatoren sind sie für Trendmärkte viel besser geeignet. Wenn der Markt in einem starken und anhaltenden Aufwärtstrend ist. Zeigt die EMA-Indikatorlinie auch einen Aufwärtstrend und umgekehrt einen Abwärtstrend. Ein wachsamer Händler achtet nicht nur auf die Richtung der EMA-Linie, sondern auch auf das Verhältnis der Änderungsgeschwindigkeit von einem Balken zum nächsten. Wenn zum Beispiel die Preisaktion eines starken Aufwärtstrends beginnt, sich zu verflachen und umzukehren, wird die EMA-Rate der Änderung von einem Balken zum nächsten abnehmen, bis zu dem Zeitpunkt, zu dem die Indikatorlinie flacht und die Änderungsrate null ist. Wegen der nacheilenden Wirkung, von diesem Punkt, oder sogar ein paar Takte zuvor, sollte die Preisaktion bereits umgekehrt haben. Daraus folgt, dass die Beobachtung einer konsequenten Abschwächung der Veränderungsrate der EMA selbst als Indikator genutzt werden könnte, der das Dilemma, das durch den nacheilenden Effekt von gleitenden Durchschnitten verursacht wird, weiter beheben könnte. Gemeinsame Verwendung der EMA-EMAs werden häufig in Verbindung mit anderen Indikatoren verwendet, um signifikante Marktbewegungen zu bestätigen und deren Gültigkeit zu messen. Für Händler, die intraday und schnelllebigen Märkten handeln, ist die EMA mehr anwendbar. Häufig benutzen Händler EMAs, um eine Handel Bias zu bestimmen. Zum Beispiel, wenn eine EMA auf einer Tages-Chart zeigt einen starken Aufwärtstrend, eine Intraday-Trader-Strategie kann nur von der langen Seite auf einer Intraday-Chart handeln. Der exponentielle gleitende Durchschnitt ist eine Art von IIR-Filter, die einfach zu implementieren ist in C und verwendet minimale Ressourcen. 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. Total ADCW add to running total if (N gt MAXSAMPLES) genügend Samples total - durchschnittlich ein anderes entfernen N average total N integerEveryday DSP für Programmierer: Schritt Response of Averaging Letzte Woche haben wir einen Blick auf verschiedene Arten der Mittelung geworfen. Und benutzte sie, um historische Gaspreise zu analysieren. Das Betrachten eines komplexen Signals wie Gaspreise gibt uns einen guten Vergleich des Verhaltens der verschiedenen Mittelungsmethoden, aber das gibt uns nur eine Vorstellung davon, welche Mittelung für ein bestimmtes Signal ausreicht. Was ist, wenn wir verstehen wollen, was die verschiedenen Mittelungsmethoden in einer allgemeineren Weise tun Eine Möglichkeit, die verschiedenen Methoden zu analysieren, besteht darin, sie auf die fundamentalen Signale anzuwenden. Die Ausgabe, die sich aus der Anwendung einer Mittelungsfunktion auf eines der Grundsignale ergibt, wird als Reaktion der Funktion bezeichnet. Wenn das Signal das DC-Signal ist, wird es als DC-Antwort bezeichnet. Wenn das Signal die Schrittfunktion ist, wird es die Schrittantwort genannt, und so weiter. Schauen Sie sich die Schrittreaktion genauer an, aber zuerst wollen wir kurz die Antworten der verschiedenen Mittelungsfunktionen auf jedes der Grundsignale diskutieren. Reagieren auf Signale Im letzten Post (Full-, Block-, Moving-, Exponential - und FIR-Filter) und vier verschiedenen Arten von Grundsignalen vom ersten Post (DC, Impuls, Step und Sinus) haben wir fünf verschiedene Arten der Mittelung abgedeckt. Wenn wir einen Kreuzvergleich von all diesen Signalen und Mittelungsmethoden durchführen würden, wed am Ende mit zwanzig Graphen, aber die meisten von ihnen würden nicht zu nützlich oder interessant sein, also würden sie etwas verengen. Zunächst betrachten wir den vollen Durchschnitt. Da der gesamte Mittelwert einfach den Mittelwert über das gesamte Signal berechnet, ist seine Signalantwort nicht schrecklich interessant. Sein ein einzelner Wert. Der Block Durchschnitt ist nicht viel interessanter, da es nur aufteilt das Signal in gleich große Stücke, bevor Sie den Durchschnitt. Das Ergebnis ist eine dezimierte Version des Originalsignals. Nun ignorieren diese beiden Arten von Mittelung für diese Erforschung. Wir können auch das DC-Signal von der Signalseite der Matrix auswerfen, da keine Art der Mittelung einen DC-Wert ändert. (Immerhin sollten Sie sicherstellen, dass Ihre Mittelungsfunktion stabil ist und was Sie denken.) Die DC-Antwort ist bei der Analyse komplexer Infinite Impulse Response (IIR) - Filter interessanter, da diese möglicherweise instabil sind Mit einem Gleichstromsignal, aber keine dieser Mittelungsfunktionen sind instabil. Dies verlässt die Impuls-, Schritt - und Sinussignale und die Bewegungs-, Exponential - und FIR-Filtermittelwerte als potentielle Kandidaten zum Vergleich. Die Reaktion der Sinus-Signale hängt von der Frequenz der Sinuswelle ab, und diese Art der Analyse wird normalerweise mit einer DFT durchgeführt, um den Frequenz-Frequenzgang über einen Frequenzbereich zu finden. Waren nicht bereit für diese Art von Analyse, doch, so gut betrachten, dass in einem späteren Post. Die Impulsantwort eines Durchschnitts hat tatsächlich ein interessantes Verhalten. Das Ausführen eines Impulses durch eine Mittelungsfunktion wird die Mittelungsfunktion als eine Reihe von Anzapfungen für einen FIR-Filter wiedergeben. Da die Impulsfunktion überall Null ist, außer für ein einzelnes Sample, wenn Sie eine Mittelungsfunktion darauf anwenden, ist das Ergebnis an jedem Punkt der Wert, den Sie für diesen Tipp im entsprechenden Filter verwenden möchten. Die Impulsfunktion, die auf einen gleitenden Durchschnitt angewendet wird, führt zu einem Block von Abtastwerten, wobei jeder Abtastwert einen Wert der Umkehrung der Blockgröße aufweist. Wenn Sie dann diese Werte als Taps in einem Filter verwendet haben, multiplizieren Sie jeden Sample eines Signals mit dem Inverse der Blockgröße und summieren sie zusammen, erhalten Sie das gleiche Ergebnis wie der gleitende Durchschnitt. Das ist, weil die folgenden Gleichungen äquivalent sind: Die 1n Ausdrücke in der Summierung auf der rechten Seite sind die Abgriffe eines Filters. Aufgrund dieser Eigenschaft wird das FIR-Filter lediglich seine Anzapfungen in Reaktion auf die Impulsfunktion reproduzieren. Der exponentielle Mittelwert erzeugt einen exponentiellen Zerfall, und er endet nie, weil der exponentielle Zerfall sich null annähert, ihn aber nie erreicht. Daher ist der exponentielle Durchschnitt ein Beispiel eines einfachen IIR-Filters. Verschieben der durchschnittlichen Schrittantwort Dies lässt die Schrittreaktion, um ausführlicher zu sehen. Um die Sprungantwort eines Durchschnitts zu finden, müssen wir nur das Gaspreissignal ersetzen, das wir vorher mit einer Schrittfunktion angesehen haben, und die Mittelungsfunktion darüber ausführen. Für den gleitenden Durchschnitt, erinnern Sie sich, dass die Operation ist, wobei j die j-te Probe ist und k die Blockgröße ist. Dieser Vorgang sieht wie folgt aus: Klicken Sie auf die Grafik, um den gleitenden Durchschnitt auszuführen. Die Blockgröße wurde erweitert, um die Antwort besser zu zeigen. Beachten Sie, dass die Antwort eine Linie ist, die den unteren Pegel an dem Punkt verbindet, an dem der Schritt zu dem höheren Pegel an dem Punkt stattfindet, an dem die Anzahl der Samples, die der Blockgröße entsprechen, abgedeckt wurde. Bei jedem Schritt des gleitenden Durchschnitts wird ein weiterer höherwertiger Abtastwert zum Mittel addiert, so daß das gemittelte Signal in einem linearen Pfad von dem alten Wert zu dem neuen Wert mit einer Verzögerung gleich der Blockgröße fortschreitet. Diese Sprungantwort zeigt, wie der gleitende Durchschnitt den Hochfrequenzinhalt aus dem Signal entfernt. Die ursprüngliche Schrittfunktion hat im Schritt einen unendlichen Frequenzgehalt. Die Reaktion hat noch einen höheren Frequenzgehalt an den beiden Ecken, aber ihre weniger als zuvor und die lineare Region hat einen sehr niedrigen Frequenzgehalt. Wir können auch die Anfänge einer Dreieckswelle in dieser Antwort sehen. Wenn die Schrittfunktion tatsächlich eine Rechteckwelle mit einer Periode war, die doppelt so lang ist wie die Blockgröße des gleitenden Mittelwerts, würde der gleitende Durchschnitt eine perfekte Dreieckswelle erzeugen. Vielleicht nicht der effizienteste Weg, um einen zu generieren, sondern seine nützliche Einsicht in das Verhalten des gleitenden Durchschnitts. Exponential Average Step Response Die Funktion exponential average funktioniert wie folgt: meani w183si (1-w) 183meani-1 Wobei w die Gewichtung der aktuellen Probe ist und ein Wert zwischen 0 und 1 ist Schritt-Antwort sieht wie folgt aus: Diese Grafik zeigt deutlich, warum ihre so genannte exponentielle Mittel, weil der Durchschnitt nähert sich der neue Wert der Schrittfunktion entlang einer exponentiellen Kurve. Wir können auch sehen, dass der exponentielle Durchschnitt schneller auf neue Eingaben reagiert, da sich die Antwort im ersten Schritt sehr viel schneller ändert. Dann nähert es sich dem neuen Wert langsamer über die Zeit. Das ist, warum der exponentielle Durchschnitt mehr der Stösse und der Spitzen im Gaspreissignal beibehalten hat, und es entfernt etwas weniger vom Hochfrequenzinhalt als der gleitende Durchschnitt. Die Gewichtungen müssen sehr nahe bei Null liegen, bevor das exponentielle Mittel nicht scharf auf neue Werte reagiert, und dann nähert sich der Durchschnitt neuen Werten extrem langsam. Theoretisch erreicht das exponentielle Mittel nie den neuen Wert und hat daher eine unendliche Antwort, weshalb es ein IIR-Filter ist. Praktisch hat dieser exponentielle Durchschnitt nahezu den neuen Wert innerhalb von 5 oder 6 Zeiteinheiten erreicht, wie in der obigen Grafik dargestellt. Es wird nie wirklich erreichen den neuen Wert, aber es wird willkürlich schließen. FIR Filter Schrittantwort Um einen gleichmäßigeren Frequenzgang zu haben als den gleitenden Durchschnitt oder den exponentiellen Mittelwert, müssen wir zum FIR-Filter gehen. Denken Sie daran, dass das FIR-Filter einen Satz von Anzapfungen aufweist, die mit den Signalwerten multipliziert werden, und die Berechnung wird dargestellt als wobei yj das Ergebnis des Filters für die j-te Abtastung ist, k die Anzahl der Abgriffe und hi die i ist Ten Hahn. Der FIR-Filter, den wir betrachteten, benutzte eine Sinc-Funktion für die Taps, und dieser Filter hat die folgende Schrittreaktion: Beachten Sie, dass der Filter nicht sofort stark reagiert, sondern ein paar Mal hin und her wackelt, bevor er aufspringt und den neuen Wert überschreitet Wenn der Schritt auf halber Strecke des Filters liegt. Es wackelt dann um den neuen Wert ein wenig, bevor er sich darauf einlässt. Dieses Verhalten kann vertraut aussehen. Wenn wir die Schrittfunktion in eine Rechteckwelle mit der richtigen Periode ausdehnten, würde die Filterantwort wie die Fourier-Reihen-Näherung einer Rechteckwelle aussehen, die wir untersuchten, wenn sie Transformationen abdeckte. Der Filter erzeugt tatsächlich die gleiche Wellenform wie die Fourier-Serie, aber mit einer Verzögerung, die die Hälfte der Anzahl von Anzapfungen in dem Filter ist. Die von der sinc-Funktion erzeugten Taps erlauben nur bestimmte Frequenzen in der Antwort, weshalb sie dieses Verhalten mit der Step-Funktion hat. Die Anzahl der Wacklungen und die Steilheit des Übergangs in der Mitte des Filters hängt von der Anzahl der Abgriffe und der Frequenz ab, die in der sinc-Funktion zum Erzeugen der Abgriffe verwendet wird. Ein Großteil der Filterkonstruktion steuert diese Parameter, um die gewünschte Grenzfrequenz für den Filter zu erzeugen. Mit diesem, weve ziemlich viel über die Sprungantwort der verschiedenen Mittelung Funktionen weve verwendet. Das Analysieren der Sprungantwort eines neuen Filters oder einer anderen DSP-Operation ist eine gute Praxis zum Verständnis des Verhaltens des Algorithmus, den Sie entwickeln. Es kann Ihnen neue Einblicke geben oder bestätigen, dass Ihr Algorithmus tut, was er tun soll. Es ist ein gutes Werkzeug, um in Ihrem DSP-Toolbox. Nächste Woche gut wrap up der statistischen Techniken der DSP durch Blick auf ein paar Möglichkeiten zu berechnen, wie viel ein Signal ändert sich mit Signalabweichung.


No comments:

Post a Comment