Monday 11 September 2017

Moving Average Adc


Ich weiß, das ist erreichbar mit Boost wie pro. But ich wirklich gerne vermeiden, Boost Ich habe gegoogelt und nicht gefunden, keine geeigneten oder lesbaren Beispiele. Basisch möchte ich den gleitenden Durchschnitt eines laufenden Streams von einem Strom von Gleitkommazahlen zu verfolgen Mit den neuesten 1000 Nummern als Datenbeispiel. Was ist der einfachste Weg, dies zu erreichen. Ich experimentierte mit der Verwendung eines kreisförmigen Arrays, exponentiell gleitenden Durchschnitt und ein einfacher gleitender Durchschnitt und festgestellt, dass die Ergebnisse aus dem kreisförmigen Array passte meine Bedürfnisse am besten Wenn Sie Ihre Bedürfnisse einfach sind, können Sie nur versuchen, einen exponentiellen gleitenden Durchschnitt zu verwenden. Einfach nur, Sie machen eine Akkumulatorvariable, und wie Ihr Code bei jedem Sample sieht, aktualisiert der Code den Akkumulator mit dem Neuer Wert Du wählst eine konstante Alpha, die zwischen 0 und 1 ist, und berechnen dies. Sie müssen nur einen Wert von Alpha finden, wo die Wirkung einer bestimmten Probe nur für etwa 1000 Proben dauert. Hmm, ich bin nicht wirklich sicher, dass dies ist Passend für dich, jetzt da ich es hier hingelegt Das Problem ist, dass 1000 ein ziemlich langes Fenster für einen exponentiellen gleitenden Durchschnitt ist Ich bin mir nicht sicher, dass es ein Alpha gibt, das den Durchschnitt über die letzten 1000 Zahlen verbreiten würde, ohne Unterströmung im Floating Punkt-Berechnung Aber wenn Sie einen kleineren Durchschnitt wünschen, wie 30 Zahlen oder so, ist dies eine sehr einfache und schnelle Art und Weise zu tun it. answered Jun 12 12 bei 4 44. 1 auf Ihrem Beitrag Der exponentielle gleitende Durchschnitt kann das Alpha zu sein Variable So ermöglicht dies die Berechnung von Zeitbasis-Mittelwerten zB Bytes pro Sekunde Wenn die Zeit seit dem letzten Akkumulator-Update mehr als 1 Sekunde ist, lassen Sie alpha 1 1 sein. Andernfalls können Sie alpha be usecs seit letztem Update 1000000 jxh Jun 12 12 at 6 21.Basically Ich möchte den gleitenden Durchschnitt eines laufenden Streams von einem Strom von Gleitkommazahlen mit den neuesten 1000 Zahlen als Datenbeispiel verfolgen. Hinweis, dass die unten die Gesamtsumme als Elemente als hinzugefügt ersetzt ersetzt, vermeiden Kostspielig, um die Summe zu berechnen, die für den Durchschnitt benötigt wird - auf Nachfrage. Total ist ein anderer Parameter von T zu unterstützen, zB mit einer langen langen, wenn insgesamt 1000 lang s, ein int für char s oder ein doppeltes zu total float s. Dies ist ein bisschen fehlerhaft, dass Numsamples an INTMAX vorbeikommen könnten - wenn Sie sich vorstellen können, dass Sie eine lange Zeit langer Zeit verwenden können oder ein zusätzliches bool Datenelement verwenden, um aufzuzeichnen, wann der Container zum ersten Mal gefüllt wird, während er Numsamples um das Array herumtreibt und dann etwas Unschuldiges umbenannt hat Wie pos. answered 12. Juni 12 bei 5 19.on geht davon aus, dass void Operator T Probe tatsächlich void Operator T Probe oPless Jun 8 14 bei 11 52. oPless ahhh gut gesichtet tatsächlich ich bedeutete, dass es void Betreiber T Probe aber natürlich Du könntest was Notation, die du mochst, beheben, danke Tony D 8. Juni 14 um 14 27. Einer der Hauptanwendungen für die Arduino-Tafel liest und protokolliert die Sensordaten. Zum Beispiel überwacht man den Druck jede Sekunde des Tages Als hohe Abtastraten Oft erzeugt Spikes in den Graphen man will auch einen Durchschnitt der Messungen haben Da die Messungen nicht statisch in der Zeit sind, was wir oft brauchen, ist ein laufender Durchschnitt Dies ist der Durchschnitt einer bestimmten Periode und sehr wertvoll bei der Trendanalyse. Simplest Form Von einem laufenden Durchschnitt kann durch Code getan werden, der auf dem vorherigen laufenden Durchschnitt aufbaut. Wenn man nicht will, um Floating-Point-Mathematik zu verwenden - da dies Speicher aufnimmt und die Geschwindigkeit verringert - kann man das gleiche vollständig in der Integer-Domain tun. Die Division durch 256 in der Beispiel-Code ist eine Verschiebung rechts 8, die ist schneller als sagen Division durch zB 100 Dies gilt für jede Macht von 2 als Teiler und man muss nur darauf achten, die Summe der Witterungen entspricht der Macht von 2 Und natürlich Man sollte darauf achten, dass es keinen Zwischenüberlauf gibt, den man mit unsigned long benutze. Wenn Sie einen genaueren laufenden Durchschnitt benötigen, müssen Sie in einem Concreto aus den letzten 10 Messungen ein Array oder eine verknüpfte Liste verwenden, um sie zu halten. Dieses Array fungiert als kreisförmiger Puffer und mit Jede neue Messung die älteste wird entfernt Der laufende Durchschnitt wird berechnet als die Summe aller Elemente geteilt durch die Anzahl der Elemente in der Array Der Code für den laufenden Durchschnitt wird so etwas wie dies sein. Drawback dieses Codes ist, dass das Array zu halten Alle Werte können ganz groß werden Wenn du ein Maß pro Sekunde hast und du einen laufenden Durchschnitt pro Minute willst, brauchst du ein Array von 60, das durchschnittlich pro Stunde ein Array von 3600 benötigt. Das könnte man nicht auf einem Arduino machen Hat 2K RAM Aber durch den Aufbau eines 2-stufigen Durchschnitts kann es ganz gut Haftungsausschluss nicht für alle Messungen In psuedo code. As ein neues internes statisches Array wird für jede runningAverage-Funktion benötigt, diese schreit als eine class. RunningAverage-Bibliothek implementiert werden. Die runningAverage-Bibliothek macht eine Klasse der obigen Funktion, so dass sie mehrfach in einer Skizze verwendet werden kann. Es entkoppelt die Add - und Avg-Funktion, um ein bisschen flexibler zu sein, zB kann man den Durchschnitt mehrfach anrufen, ohne eine Sache hinzuzufügen Jede Instanz der Klasse fügt ein eigenes Array hinzu, um Messungen zu halten, und das fügt dem Speicherverbrauch hinzu. Die Schnittstelle der Klasse wird so klein wie möglich gehalten. Hinweis mit Version 0 2 Die Namen der Methoden werden alle beschreibender gemacht. Eine kleine Skizze zeigt, wie es verwendet werden kann Ein zufälliger Generator wird verwendet, um einen Sensor zu imitieren. Im Setup ist die myRA gelöscht, so dass wir mit dem Hinzufügen neuer Daten beginnen können. In der Schleife wird zuerst eine zufällige Zahl generiert und in einen Float umgewandelt, der hinzugefügt werden soll MyRA Dann wird das runningAverage auf den seriellen Port gedruckt. Man könnte es auch auf einem LCD anschauen oder über Ethernet versenden. Wenn 300 Items hinzugefügt werden, wird myRA gelöscht, um wieder von vorne zu beginnen. Um die Bibliothek zu benutzen, mache ich einen Ordner in deiner SKETCHBOOKPATH libaries mit dem Nennen Sie RunningAverage und setzen Sie die h und dort Optional ein Beispiel-Unterverzeichnis, um die Probe zu platzieren app.2011-01-30 initial version.2011-02-28 feste fehlende destruktor in h file.2011-02-28 entfernt default constructor.2012- - trimValue Yuval Naveh hinzugefügt trimValue gefunden auf web.2012-11-21 refactored.2012-12-30 hinzugefügt fillValue refactored für publishing.2014-07-03 hinzugefügt Memory-Schutz-Code - wenn interne Array nicht zugeordnet werden kann Größe wird 0 Dies ist zu Lösen Sie das hier beschriebene Problem. Test extensiv. Template class. RunningAverage h. RunningAverage. Moving Average - MA. BREAKING DOWN Moving Average - MA. As ein SMA Beispiel, betrachten Sie eine Sicherheit mit den folgenden Schlusskurse über 15 Tage. Week 1 5 Tage 20 , 22, 24, 25, 23.Week 2 5 Tage 26, 28, 26, 29, 27.Week 3 5 Tage 28, 30, 27, 29, 28. Ein 10-Tage-MA würde die Schlusskurse für die Erste 10 Tage als erster Datenpunkt Der nächste Datenpunkt würde den frühesten Preis fallen lassen, den Preis am Tag 11 addieren und den Durchschnitt nehmen, und so weiter wie unten gezeigt. Wie bereits erwähnt, verbleiben MAs die aktuelle Preisaktion, weil sie auf basieren Vergangene Preise je länger die Zeit für die MA, desto größer die Lag So ein 200-Tage-MA wird eine viel größere Verzögerung als ein 20-Tage-MA, weil es Preise für die letzten 200 Tage enthält Die Länge der MA zu Die Nutzung hängt von den Handelszielen ab, wobei kürzere MAs für den kurzfristigen Handel und längerfristige MAs für langfristige Investoren besser geeignet sind. Der 200-Tage-MA wird weitgehend von Investoren und Händlern gefolgt, wobei Pausen über und unter diesem gleitenden Durchschnitt liegen Um wichtige Handelssignale zu sein. MAs vermitteln auch wichtige Handelssignale auf eigene Faust, oder wenn zwei Durchschnitte kreuzen Ein aufsteigender MA zeigt an, dass die Sicherheit in einem Aufwärtstrend ist, während ein abnehmender MA anzeigt, dass es sich in einem Abwärtstrend befindet. Ähnlich wird ein Aufwärtsimpuls bestätigt Mit einer bullish Crossover, die auftritt, wenn ein kurzfristiges MA über einen längerfristigen MA Downward-Impuls kreuzt, wird mit einem bearish crossover bestätigt, der auftritt, wenn ein kurzfristiges MA unter einem längerfristigen MA kreuzt.

No comments:

Post a Comment