Gps Gleitender Durchschnitt

Im Entwicklung einer Android-Anwendung mit GPS. Id wie ein Feature implementieren, dass die Nutzer durchschnittliche Geschwindigkeit über die 1515 Minute zeigt implementieren. Etwas wie die CPU-Last auf Unix. Ich kann den Durchschnitt leicht berechnen, indem ich die zurückgelegte Distanz von Sekunde zu Sekunde kumuliere und sie durch die verstrichene Zeit dividiere, aber ich kann nicht an eine intelligente Weise denken, den gleitenden Durchschnitt zu berechnen. Offensichtlich kann ich id getan, indem Sie den Abstand zwischen der letzten und der aktuellen Position in einem Array jede Sekunde, während das Löschen des ältesten Wert. Im, der nach einer ordentlichen Weise sucht, dies zu tun. Sie müssen alle Werte für die gesamte Zeitspanne zu speichern, wie Sie bereits vorgeschlagen. Der Grund ist, dass Sie irgendwie die Beiträge der alten Werte zum gleitenden Durchschnitt vergessen müssen. Sie können nicht genau das tun, wenn Sie nicht wissen, was diese Werte wo (d. h. wenn Sie sie nicht speichern). In Ihrem Fall beträgt 1 Wert jede Sekunde für 15 Minuten 15 60 900 Datenpunkte, das sollte OK sein. Beachten Sie, dass Sie bei jeder Aktualisierung keine Summe über das gesamte Array ausführen müssen: Sie können den neuen gleitenden Durchschnitt aus der Anzahl der Datenpunkte, den neuen Wert und den Wert berechnen, den Sie zu diesem Zeitpunkt vergessen haben: Hier ist n Die Anzahl der Datenpunkte (900 in Ihrem Fall), xforget ist der Wert, den Sie vergessen und xnew der letzte Wert ist. Sie können dann xforget von der Vorderseite des Arrays und speichern xnew am Ende. Anstelle eines Arrays möchten Sie eine über eine verknüpfte Liste implementierte Warteschlange verwenden. Antwort # 2 am: April 25, 2010, 07:25:25 am »Es ist ein Weg, um es zu gehen, dass ist ziemlich einfach: Wenn Sie Probenahme Position jede Sekunde halten 901 Proben in einer Warteschlange, das ist 15 Minuten wert (und 1 extra). Position 0 ist die aktuellste Messung, effektiv Ihre aktuelle Position. Für eine durchschnittliche Geschwindigkeit über die letzten X Minuten: Geschwindigkeit ist jetzt Distanz Einheiten pro Sekunde, umwandeln zu mph oder kph oder was auch immer Einheiten, die Sie benötigen. Verschiedene Werte von X können für irgendeinen Durchschnitt zwischen 1 und 15 Minuten verwendet werden. Antwort # 2 am: Mai 23, 2010, 07:10:01 pm »Es ist möglich, einen gleitenden Durchschnitt in C ohne die Notwendigkeit für ein Fenster von Proben Ive gefunden, dass ich ein bisschen optimieren können, indem Sie eine Fenstergröße, die eine Macht ist Zwei für Bit-Verschiebung statt zu teilen, aber nicht brauchen einen Puffer wäre schön. Gibt es eine Möglichkeit, ein neues gleitendes Durchschnittsergebnis nur als Funktion des alten Ergebnisses und des neuen Beispiels auszudrücken, definieren Sie einen beispielhaften gleitenden Durchschnitt in einem Fenster von 4 Proben: Add new sample e: Ein gleitender Durchschnitt kann rekursiv implementiert werden , Aber für eine exakte Berechnung des gleitenden Durchschnitts müssen Sie sich an die älteste Eingangsabfrage in der Summe (dh die a in Ihrem Beispiel) erinnern. Für einen N-gleitenden Durchschnitt berechnen Sie: wobei yn das Ausgangssignal und xn das Eingangssignal ist. Gl. (1) können rekursiv geschrieben werden, also müssen Sie sich stets an die Stichprobe xn-N erinnern, um (2) zu berechnen. Wie von Conrad Turner angemerkt, können Sie stattdessen ein (unendlich langes) exponentielles Fenster verwenden, mit dem Sie die Ausgabe nur aus dem vergangenen Ausgang und dem aktuellen Eingang berechnen können. Dies ist jedoch kein normaler (ungewichteter) gleitender Durchschnitt, sondern ein exponentieller Wert Gewogenen gleitenden Durchschnitt, wo die Proben in der Vergangenheit ein geringeres Gewicht erhalten, aber (zumindest in der Theorie) man nie etwas vergessen (die Gewichte nur kleiner und kleiner für Proben weit in der Vergangenheit). Ich habe einen gleitenden Durchschnitt ohne einzelnen Element-Speicher für ein GPS-Tracking-Programm, das ich geschrieben habe. Ich beginne mit 1 Probe und dividiere durch 1, um die aktuelle Durchschn. Ich füge dann anothe Probe und dividiere durch 2 zu den aktuellen Durchschn. Das geht so lange weiter, bis ich auf die Länge des Durchschnitts komme. Jedes Mal danach, füge ich in der neuen Probe, erhalten Sie den Durchschnitt und entfernen Sie diesen Durchschnitt aus der Gesamtmenge. Ich bin kein Mathematiker, aber das schien ein guter Weg, es zu tun. Ich dachte, es würde den Magen eines echten Mathematik-Kerl, aber es stellt sich heraus, es ist eine der akzeptierten Möglichkeiten, es zu tun. Und es funktioniert gut. Denken Sie daran, dass je höher Ihre Länge, desto langsamer folgt es, was Sie folgen wollen. Das kann nicht die meiste Zeit, aber wenn folgende Satelliten, wenn Sie langsam sind, könnte die Spur weit von der tatsächlichen Position und es wird schlecht aussehen. Sie könnten eine Lücke zwischen dem Sat und den nachfolgenden Punkten haben. Ich wählte eine Länge von 15 aktualisiert 6 mal pro Minute, um eine ausreichende Glättung und nicht zu weit von der tatsächlichen Sat-Position mit den geglätteten Spur Punkte erhalten. Antwort # 2 am: November 16, 2010, um 23:03 Uhr Initialisierung insgesamt 0, count0 (jedes Mal, wenn ein neuer Wert dann ein Eingang (scanf), ein add totalnewValue, ein Inkrement (count), ein dividieren Durchschnitt (totalcount) Dies wäre ein gleitender Durchschnitt über Alle Eingänge Um den Durchschnitt über nur die letzten 4 Eingänge zu berechnen, benötigen Sie 4 Inputvariablen, vielleicht kopieren Sie jeden Eingang zu einem älteren inputvariable und berechnen dann den neuen gleitenden Durchschnitt als Summe der 4 Inputvariablen, geteilt durch 4 (Rechtsverschiebung 2 wäre Gut, wenn alle Eingänge waren positiv, um die durchschnittliche Berechnung zu beantworten Februar 3 15 bei 4:06 Das wird tatsächlich berechnen den Gesamtdurchschnitt und nicht den gleitenden Durchschnitt. Wie Zähler wird größer wird der Einfluss eines neuen Eingangsbeispiel verschwindend kleiner ndash Hilmar Feb 3 15 um 13:53 Uhr Deine Antwort 2017 Stack Exchange, Inc


Comments