Tuesday 11 July 2017

Modified Moving Average Mma

Geänderte Bewegungsdurchschnitte Geänderte Bewegungsdurchschnitte sind ähnlich einfachen gleitenden Durchschnitten. Der erste Punkt des modifizierten gleitenden Mittelwertes wird auf die gleiche Weise berechnet, wie der erste Punkt des einfachen gleitenden Durchschnitts berechnet wird. Jedoch werden alle nachfolgenden Punkte berechnet, indem zuerst der neue Preis addiert und dann der letzte Durchschnitt von der resultierenden Summe subtrahiert wird. Der Unterschied ist der neue Punkt oder der modifizierte gleitende Durchschnitt. N Anzahl der Balken MAt aktueller gleitender Mittelwert MAt-1 vorhergehender gleitender Mittelwert Pt aktueller Preis Diese Methode ist praktisch, weil es nicht notwendig ist, alle vergangenen Komponenten des Durchschnitts zu verfolgen. Nur der letzte gleitende Mittelwert und der neue Preis sind für die Berechnung notwendig (denken Sie daran, dass die Studienkalkulationen von Hand durchgeführt wurden). Wegen der Einfachheit dieser Berechnung wird der modifizierte gleitende Durchschnitt ausgiebig für interne Berechnungen in anderen Analysen verwendet. Siehe P. J. Kaufman, The New Commodity Trading Systems and Methods, New York: John Wiley amp Sons, 1978, S. 58-64. Modified Moving Averages Functionakb455 Oktober 2013 Hallo, Ich möchte die Ergebnisse von Eureqa in Matlab verwenden. Insbesondere benötige ich den Code oder Algorithmus, den Eureqa für den modifizierten Moving Average (MMA) verwendet. Ich suchte im Internet, aber es gibt mehrere verschiedene Definitionen für die MMA und nach dem Versuch einige von ihnen habe ich nicht in der Lage, die Eureqa-Funktion zu duplizieren. Also, wenn jemand weiß, die genaue Berechnung von Eureqa es wäre sehr hilfreich sein. Alamb Oktober 2013 MMA, wie in Eureqa implementiert, ist ein exponentieller gleitender Durchschnitt mit einem spezifischen Alpha-Koeffizienten. Mma (x, N) alphax alpha (1-alpha) Verzögerung (x, 1) alpha (1-alpha) 2delay (x, 2). Eine detailliertere Erklärung (geschrieben von Alison) ist unterhalb, die die Begründung für diese alpha und beschreibt. (Alpha (n-1) Seine Eigenschaften Hoffe, dass hilft, Modified Moving Average Allgemeine Definition für EMA MMA Geänderte gleitende Durchschnitt ist eine Art von exponentiellen gleitenden Durchschnitt (EMA), wo das Gewicht an ältere Datensätze verringert nimmt exponentiell. Aus Wikipedia ist die Definition rekursiv (wobei S die EMA ist und Y eine Folge ist): S1 Y1 für tgt1, St alpha Yt-1 (1 - alpha) St-1 Nicht rekursiv ist dies: St alpha (Yt-1 (1 - alpha) Yt-2 (1 - alpha) 2 Yt-3 (1 - alpha) 4 Yt-4) Mit anderen Worten, das Gewicht für den neusten Ausdruck ist alpha, und das Gewicht für jeden vorhergehenden Term hat eine zusätzliche (1 - alpha) Gewicht für Yt-2: alpha (1 - alpha) Gewicht für Yt-2: alpha (1 - alpha) 2 Gewicht für Yt-2: Alpha (1 - alpha) 3 Referenz: en. wikipedia. orgwikiMovingaverageExponentialmovingaverage Beachten Sie, dass Wikipedia, dass Modified Moving Average (MMA) ist ein Spezialfall der EMA, wo für eine Reihe von N Begriffe, alpha 1N. Wir verwenden diese Definition nicht. MMA in Eureqa Der mma-Baustein in Eureqa sieht aus wie mma (x, n), entworfen, um die mma der letzten n Reihen zu geben. Die Herausforderung besteht darin, dass beim Stoppen der Berechnung von MMA nach nur wenigen Zeilen mit einem Alpha von 1N bedeutet, dass die Summe der Gewichte nicht 1 sein kann, was zu nicht intuitiven Ergebnissen führt. Beispielsweise könnte mma (x, 2) für das folgende mit einem Alpha von 1N für xmma (x, 2) 1 NA - Gewicht von 1 0,75 - Gewicht von Da die Gewichte nicht zu 1 summieren, X, 2) würde ein Ergebnis von 0,75 geben, was nicht richtig erscheint, da beide Werte, die in den gleitenden Durchschnitt gingen, 1 waren. Um diesen Schluckauf zu vermeiden, wählen wir alpha spezifisch aus, so dass die Summe aller Gewichte nach den n Zeilen, Gleitender Durchschnitt ist genau 0,999 (dh nahe bei 1). Die Gleichung, die verwendet wird, um Alpha für ein gegebenes n zu berechnen, lautet: 1,0 - exp (log (0,001) abs (n)) (Das kann auch aus der Gleichung in Wikipedia abgeleitet werden: n log (0,001) log (1 - Dies wird für das vorhergehende Beispiel bedeuten, dass Eureqa mma (x, 2) geben wird: x mma (x, 2) 1 NA 1 0.999 Die Intuition ist, dass wir mit unserer Berechnung von alpha garantieren, dass die Summe der Gewichte immer ist 0,999. Dies bedeutet auch, dass die Rate des exponentiellen Abklingens von Gewichten von N für kleine Werte von N abhängt, wobei Alpha höher ist (was bedeutet, dass neuere Werte sehr stark gewichtet werden und Gewichte für ältere Werte steil abfallen) und für größere Werden Werte von N, alpha kleiner (was bedeutet, dass neuere Werte weniger schwer gewichtet werden und es eine langsamere Rate oder Abnahme des Gewichts für ältere Werte gibt). Alamb Oktober 2013 Tut mir leid für die schlechte Formatierung - das Original sieht viel besser aus und wir planen, diese Aufschreibung in unsere Dokumentation zu integrieren, wie wir es bearbeiten. Messen Sie PWM-Strom mit einem Modified Moving Average Wie messen Sie ein Signal, das sich von James Lewis verändert P ulse Width Modulation (PWM) ermöglicht es, Licht zu dimmen, die Drehzahl der Motoren zu regeln und (mit Hilfe von Filtern) analoge Referenzspannungen zu erzeugen. Beim Messen der Spannung oder des Stroms eines PWM-Signals gibt es besondere Herausforderungen. Sie können dieses Tutorial verwenden, um PWM-Strom mit einem modifizierten gleitenden Durchschnitt (MMA) zu messen. Wie ich schon in ein paar Beiträgen, I8217m in einem RGB-LED-IoT-Controller erwähnt erwähnt. Bald werde ich einige detaillierte Informationen darüber. In der Zwischenzeit hatte ich die Wahl, einen INA219 Stromsensor auf die LED-Stromversorgung aufzunehmen. Für Prototyping, I8217m mit dem Adafruit Breakout Board. Aber mein letztes Design nutzt die gleichen Teile in eine benutzerdefinierte Leiterplatte integriert. Bei Verwendung dieses Stromsensors lief ich in ein unerwartetes Problem. It8217s schnell, und seine präzise. (Isn8217t, dass eine gute Sache) Die Art und Weise funktioniert es ist durch die Messung der Spannungsabfall über einen Präzisions-Shunt-Widerstand, dass der Laststrom fließt durch. Mit Ohm8217s Law, kommt es mit einer aktuellen Messung. Allerdings ist es viel schneller als ich erwartet hatte und war die Bereitstellung (fast) Instant-Antworten. Also jedes Mal, wenn ich den Sensor überprüft, bekam ich einen scheinbar zufälligen Wert. Das Problem ist der Wert hängt davon ab, wenn ich die PWM-Wellenform, wie unten abgebildet abgetastet. I8217d erhalten die 8220high8221 aktuellen, 8220low8221 aktuellen (keine), oder einen Übergang. Der 8220high8221 Strom war nützlich, aber keiner der anderen Werte. Mit einem einfachen Mittelungsalgorithmus bekam ich manchmal stabile Werte, aber nicht viel. Plus, es war die Aufnahme Hunderte von Bytes RAM nur um eine Vorstellung von der RMS-Strom in meinem Design verwendet. Ich brauchte das, damit ich den Stromverbrauch leichter berechnen konnte. That8217s, wenn ich über Modified Moving Average oder MMA gelernt. Dieser einfache Algorithmus verwendet nur wenige Byte RAM und ist genauer als ein einfacher Mittelungsalgorithmus. Plus, wenn you8217re mit einem langsameren Prozessor, wie die Uno8217s ATmega328p diese Methode verwendet viel weniger Gleitkomma. (Dieser Artikel erklärt andere Arten von gleitenden Durchschnitten.) Algorithmus zur Messung von PWM-Strom Bei Verwendung von MMA müssen Sie nur drei Werte speichern: 8220Moving Average Summe, 8221 8220Moving Average, 8221 und die Anzahl der Samples. Offensichtlich kann die Anzahl der Abtastwerte eine Konstante sein, die ein Byte oder zwei Speicher speichert. Gleitende durchschnittliche Summe Anstatt N Proben zu sammeln und eine Vorgeschichte von Proben zu halten oder N Proben auf einmal zu messen (eine schreckliche Idee, btw), ist die Moving Average Sum genau das. Die vorherigen Messungen summierten sich mit einem leichten zweimal zusammen. Moving Average Nach dem Hinzufügen eines neuen Samples zum modifizierten Moving Average wird ein neuer Mittelwert berechnet. Diese Mathematik ist der zeitaufwendigste Schritt seit der Teilung beteiligt ist. (Wenn Sie didn8217t wissen, die meisten Prozessoren don8217t wissen, wie zu teilen.) Wie MMA funktioniert Der Algorithmus funktioniert wie folgt: Subtrahieren Sie den vorherigen Durchschnitt aus der Summe. Holen Sie sich eine neue Probe und fügen Sie, dass die Summe, ersetzt die 8220average8221 Sie gerade entfernt. Dann den Durchschnitt neu berechnen. Die Idee ist, dass, da Sie entfernen, effektiv, 1 Probe und dann das Hinzufügen einer neuen Probe in, erlaubt es dem Durchschnitt in der Zeit verschieben. Diese Mittelwertbildung glättet Fluktuationen, während sie einen genauen Durchschnitt bereitstellt, während alle nur 4-6 Byte RAM verwendet werden. Der beste Teil ist, dass, wenn Sie die Anzahl der Proben für die Summe erhöht, weder das RAM noch die Berechnungszeit ändert. Während jeder Iteration der Hauptschleife tastet mein RGB-LED-IoT-Controller einen neuen Wert ab und aktualisiert den gleitenden Durchschnitt. Bevor ich auf die ESP8266 umzog, dauerte dieser Code ungefähr 56us, um auf einem Uno auszuführen. Diese Geschwindigkeit ist schnell genug, es hat wenig Einfluss auf die Programme Leistung. Vergleich von einfachem Durchschnitt zu MMA Ich habe zwei Arduino Projekte vorbereitet, um einen einfachen Durchschnitt mit dem geänderten beweglichen Durchschnitt zu vergleichen. Sie können das einfache durchschnittliche Beispiel hier downloaden und das MMA-Beispiel von beiden ergreifen. Für die Hardware können Sie fast jedes Arduino verwenden. Sie brauchen nur PWM und Analog In Pins. (Seien Sie vorsichtig bei ESP8266s, da die maximale Analog-In ist nur 1 Volt.) In meinem Test habe ich ein Uno und steckte ein Draht von digitalen Pin 5 auf Analog-Pin A0. Hier ist ein Beispiel für die Ausgabe aus dem MMA. Diese Tabelle veranschaulicht, warum ich diese Methode mag. Erstens, es ist 20 mal schneller. Zweitens verwendet es weniger RAM. Und ich sehe weit weniger Schwankungen im Mittelwert. Der Trade-off, kann natürlich sein, dass, wenn Sie für jede zufällige oder sofortige Störungen suchen, they8217ll geglättet werden. Jedoch wird jeder Mittelungsalgorithmus diese beseitigen. Fazit Ob Sie PWM-Strom oder PWM-Spannung messen, mit einem MMA können Sie den durchschnittlichen Ausgangswert. Bei der Berechnung der Macht, ist dies hilfreich, weil Sie donl217t müssen Zeit in Ihre Mathematik enthalten. Wenn Sie eine Spannung betrachten, können Sie sich eine Vorstellung von der effektiven Spannung für eine Last wie eine LED oder Motor. Branchenhinweise Schauen Sie sich diesen Anwendungshinweis von Intersil auf 8220Sensing-Elemente für Strommessungen an .8221 Kühler Überblick über verschiedene Technologien für Strommessungen. (In meinem Beispiel hier, benutze ich einen Shunt-Widerstand.) Frage: Die einzigen Beispiele, die ich für diesen Algorithmus gefunden habe, waren finanziell. Welche anderen Mathematik kann in alltäglichen Mikrocontroller-Projekten hilfreich sein Sie können einen Kommentar hinterlassen, indem Sie hier klicken. Veröffentlicht am Mittwoch, 28. September 2016 Disclosure of Material Connection: Einige der Links in der Post oben sind Affiliate-Links. Dies bedeutet, wenn Sie auf den Link klicken und den Artikel kaufen, werde ich eine Affiliate-Provision erhalten. Egal, ich empfehle nur Produkte oder Dienstleistungen, die ich persönlich nutze und glaube, wird meinen Lesern einen Mehrwert bieten. Ich erkläre dies in Übereinstimmung mit den Federal Trade Commissions 16 CFR, Teil 255. Leitfäden zur Verwendung von Endorsements und Testimonials in der Werbung. Post navigation Ihre Fragen, Kommentare und sogar Korrekturen werden gefördert und sehr geschätzt. Ich habe Null-Toleranz für unangemessene oder belästigende Kommentare. Ich versuche, allen zu antworten. - James Hinterlasse einen Kommentar Antworten abbrechen 3 Gedanken auf ldquo Messen PWM-Strom mit einem Modified Moving Average rdquo Rahul Choudhary sagt: Ein Kalman-Filter konvergiert schneller, vor allem für ein Signalwechsel mit Rauschen. Avionik Arbeitspferd. Macht mich wollen, um Code zu amp setzen sie über als einfach. Mittlerweile helfen diese8217ll. Klammer für ein paar andere Sprachen und etwas Lärm, während Sie alle Blätter der Seite hier. Keith Hungerford sagt: Hallo James, ein guter Artikel und sehr zeitnah für mich, da ich derzeit mit einem verrauschten Signal von einem ACS712 Stromsensor. Vielleicht wäre die INA219 besser für mich. Allerdings habe ich ein paar Vorschläge für Sie zu prüfen. A) Es ist nicht notwendig, Gleitkomma-Variablen zu verwenden. Die Verwendung von Ganzzahlen würde die Berechnungsbelastung für den Mikrocontroller-Prozessor verringern. B) Wird die Mittelungslänge 8220N8221 als Potenz von 2 (zB 4 oder 8 usw.) gewählt, so wird der Teilungsvorgang zu einer einfachen Verschiebung, die auch für den Mikrocontroller-Prozessor sehr einfach ist. Das sind die Hauptpunkte, die ich unten erweitere, auf die Gefahr, langweilig zu werden. Ich finde es einfacher, den MMA zu verstehen, wenn die Gleichung wie folgt geschrieben wird: MAt MAt-1 (n-1) n In n ist MAt der gleitende Durchschnitt zum Zeitpunkt t, MAt-1 ist der gleitende Durchschnitt zum Zeitpunkt t-1 (Dh die vorhergehende Messung) und At ist das gemessene Ergebnis zum Zeitpunkt t. N ist die Mittelungslänge. Das heißt, der neue gleitende Durchschnitt besteht aus (1n) des neuen Wertes und (n-1) n des vorherigen Werts. Ihre Berechnung führt diese Gleichung in zwei Schritten aus: MASt n MAt MASt-1 8211 MAt-1 Bei 8212 Schritt 1 MASt für nächstes Mal behalten MAt MASt n 8212 Schritt 2, Endergebnis Diese Berechnung kann mit ganzen Zahlen statt Gleitkomma durchgeführt werden. Der INA219 erzeugt seine Ergebnisse sowohl für Strom als auch für Spannung als 16-Bit-Integer (mit maximaler 12-Bit-Genauigkeit aufgrund von ADC-Einschränkungen). Die Berechnung kann mit Ganzzahlen ohne Verlust der Genauigkeit durchgeführt werden, solange MAS (MovingAveragSum) als eine lange Integer (32 Bits) gespeichert wird. Die Codezeilen sind identisch mit denen in Ihrem Foto unter 8220MMA code8221 in Ihrem Artikel, außer dass in Zeile 2 die Variable currentCurrentValue int statt float sein kann. Bisher muss movingAverageSum als long anstatt float deklariert werden. Was die Leistung betrifft, ist es einfach, eine schnelle Tabellenkalkulation, die zeigt, wie dieser Algorithmus reagiert auf verschiedene Eingaben. In einer neuen Registerkarte richte ich beispielsweise folgendes ein: Spalte A: Zeilen 2 bis 20 alle 0, Zeilen 21 bis 60 alle 1. Spalte B: Zeile 1 8 (n Mittelungslänge) Zeile 2 Zelle A2 (Anfangswert) Zeilen 3 B2 (B1-1) B1A3B1 (dies ist die erste Gleichung, die ich oben gegeben hatte) Spalte B Zeilen 4 bis 60 8211, die durch Kopie aus Zeile 3 propagiert wurden. Dann wählen Sie A2 bis B60 und machen ein Diagramm 8211 ein einfaches Liniendiagramm scheint gut zu funktionieren . Sie können eine Probe Ihrer realen Welt Daten in Spalte 1, um zu sehen, was verschiedene Mittelung Länge Werte erreichen. Bei einer Mittelungslänge von 8 und einer 0 bis 1-Schritt-Funktion erhält der gleitende Durchschnitt 90 des neuen Wertes in Zeile 38, der nach 18 Iterationen liegt, und 99 in Zeile 55, die nach 35 Iterationen liegt. Mach weiter so. Grüße, Keith Hi Jim, als Nicht-Ingenieur ich wirklich schätze Ihre Videos 8211 sie informieren und sind nur die richtige Geschwindigkeit, um das Interesse behalten, danke Keep up der Qualität der Inhalte. Ich auch vor kurzem stieß auf ein ähnliches Problem mit dem Versuch, die Wechselstromamplitude zu messen, die aus einem gegenwärtigen Sensorchip für ein pic Laufautomatisierungprojekt herauskommt. Der Code, den ich verwendete, ist unten. Andere nützliche Algorithmen für picduinos wäre effiziente RNG. Wenn Sie irgendwelche Gedanken auf einem anständigen einstelligen RNG haben, der uber klein ist und keine großen libs erfordert, informieren Sie mich bitte, dass ich wirklich an für ein kleines 10 Reihe pic Projekt verwenden könnte. Insgesamt Abonnenten erhalten ein kostenloses eBook Holen Sie sich ein kostenloses Exemplar von meinem On my bench eBook, wenn Sie sich anmelden, um meine wöchentlichen Beiträge per E-Mail zu erhalten. (Ihre E-Mail-Adresse wird nicht an Dritte weitergegeben.) Folgen Sie James


No comments:

Post a Comment