Berechne Rolling / Moving Average in C ++

Ich weiß, das ist erreichbar mit boost als pro:

Mit boost::Akkumulatoren, wie kann ich das zurücksetzen eines rolling-Fenster-Größe, nicht extra Geschichte?

Aber ich möchte wirklich vermeiden, mit zu steigern. Ich habe gegoogelt und nicht gefunden, einen geeigneten lesbar oder Beispiele.

Grundsätzlich möchte ich Spur den gleitenden Durchschnitt der ein kontinuierlicher Strom von einem Strom von floating-point-zahlen über die letzten 1000 zahlen-Daten-Beispiel.

Was ist der einfachste Weg, dies zu erreichen?


Experimentierte ich mit mit einem kreisförmigen array, exponential moving average und ein einfacher gleitender Durchschnitt und festgestellt, dass die Ergebnisse aus der kreisförmigen array geeignet, meine Bedürfnisse am besten.

Kommentar zu dem Problem
Warum wollen Sie vermeiden Sie die Verwendung von Boost? Es ist eine gut etablierte, komplett-gebraucht und gut unterstützte Satz von C++ - Bibliotheken. Es gibt keinen Grund, das Rad neu zu erfinden. Kommentarautor: templatetypedef
Welchen Teil dieser sind Sie stecken? Wissen Sie, welche moving average Algorithmus, den Sie möchten, aus mathematischer Sicht? Kommentarautor: juanchopanza
Durchschnitt funktioniert für ganze zahlen, aber für floating-point können Sie erleben seltsame Verhalten aufgrund von Rundungen und Unterschiede der Größenordnung... Kommentarautor: R..
Der trick ist die Vermeidung einer Puffer-zu-AveragingBuffer kopieren. Einige Leute hier wollen, dass Sie eine separate Puffer für die vorhergehenden Proben. Dies kann nicht notwendig sein, die Proben kommen aus einem Puffer. Kommentarautor: Mikhail

InformationsquelleAutor der Frage goji | 2012-06-12

Schreibe einen Kommentar