Schrittweise Mittelwertbildung

Gast #277583
Lesenswert?
• ▲
▼
Hallo,

irgendwo bin ich schonmal über eine Formel zur schrittweisen Berechnung
eines Mittelwertes gestoßen, finde sie nur leider nicht mehr.

Anwendung:
Eine Applikation sammelt N Datenwerte (der N-1 wird im folgenden Zyklus
immer wieder verworfen). Steht der N-te Datenwert bereit soll auch der
Mittelwert der Datenreihe bekannt sein.
Der Gesamtrechenbedarf ist so zwar größer, jedoch kann ich es mir aus
Zeit-, Zahlenbereichs- und Speichergründen nicht leisten, erst alle
Werte zu sammeln und dann die Rechnung auszuführen. Ein MA-Filter mit
einem Riesenfenster ist auch nicht praktikabel.
Gast #277586
Lesenswert?
• ▲
▼
wert(n): X  [n ist element von 0 .. N-1]
Anzahl von Werten je Mittelung: N

überlegung: jeder wert der N messungen fliesst zum N-ten teil in die
Mittelung ein...

--> Mittelwert Y = (X(0)/N)+(X(1)/N)+(X(2)/N)+...(X(N-1)/N)

-mach dir ne variable Y = 0;
-jeden gelesenen wert X teile durch die anzahl N und addiere sie zu Y
auf
-nach N gelesenen werten steht die mittelung in Y (auf 0 zurücksetzen)
Gast #277587
Lesenswert?
• ▲
▼
wie wärs mit einem gleitenden mittelwert?
(aktueller Wert + neuer Wert) >> 1
dann ist das Peak-Verhalten nicht ganz so toll.
Oder allgemeiner schau mal nach TP1-Filter mit etwas probieren bekommst
du auch ohne die theoretischen Kenntnisse was brauchbares hin.
Gast #277588
Lesenswert?
• ▲
▼
@Sebel de Tutti

Besten dank, die war es.

@Christoph

Es war so gemeint, dass ich einen maximalen Speicherbedarf von 1 Wert
habe. Also mit dem aktuellen wird der vorangegange wieder verworfen.

@Sven

Die Lösung funktioniert auch, die erstere hat jedoch den Vorteil, dass
bereits während der Laufzeit ein gültiger Mittelwert vorliegt.
Gast #277590
Lesenswert?
• ▲
▼
Zu der Formel:
"((AktuellerMittelwert*N-1)+ZusaetzlicherDatenWert)/N
N++"

Ist hierbei wirklich (AktuellerMittelwert * N - 1) gemeint oder
(AktuellerMittelwert * (N-1))?

N ist hierbei ein fortlaufender Zähler? Sorry für die doofe Frage, ich
kenne diese Methode nicht...
Gast #277591
Lesenswert?
• ▲
▼
Er hat die Klammern vergessen gehabt :)

XMW(n+1) = (XMW(n)*(N-1) + x(n)) / N

XMW(n+1) - neuer Mittelwert
XMW(n) - aktueller Mittelwert
x(n) - aktueller Wert
N - aktuelle Anzahl der Werte (fortlaufender Zähler)
Gast #277593
Lesenswert?
• ▲
▼
Ich sehe das ein wenig anders.

Einen FIFO Speicher mit x Elementen. Eine Mittelwertsumme Y. Der neue
Wert Z.  Y := Y - FIFO[0] + Z. Mittelwert := Y / x. FIFO[x] := Z.

D.h. neben dem FIFO der die letzen X Meßwerte speichert hast du noch
eine globale Variable die die Summer aller Werte im FIFO darstellt.
Der neue Wert Z muß nun in den FIFO und der älteste Wert aus dem FIFO
muß raus. Man subtrahiert also den ältesten FIFO Wert von der Summe und
addiert den neuen daruf. Somit enthält Summe mit zwei Additionen immer
die aktuelle Summe aller Werte im FIFO. Der gleitende Mittelwert ist
dann Summe / Anzahl Elemente im FIFO.

Im Grunde ist das dann ein TP.

Gruß Hagen

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.