Forum: Mikrocontroller und Digitale Elektronik Schrittweise Mittelwertbildung


von Alex (Gast)


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.

von Sebel De Tutti (Gast)


Lesenswert?

((AktuellerMittelwert*N-1)+ZusaetzlicherDatenWert)/N
N++

von Christoph Kessler (Gast)


Lesenswert?

Man müßte alle Werte speichern, um den jeweils ältesten wieder aus der
Statistik zu entfernen, oder habe ich das "der N-1 wird verworfen"
falsch verstanden?

von Sven Bohner (Gast)


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)

von hans dieter (Gast)


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.

von Alex (Gast)


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.

von Alex (Gast)


Lesenswert?

@Hans Dieter

Das würde Filter hoher Ordnung bedeuten, was bei mir nicht praktikabel
ist. Mein Fall ist ein Mittelding aus Dezimation und Tiefpassfilterung.

von Gast (Gast)


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...

von Alex (Gast)


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)

von Gast (Gast)


Lesenswert?

Alles klar -- Danke!

von Hagen (Gast)


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

von Alex (Gast)


Lesenswert?

Hast die Implementierung eines Moving-Average Filters beschrieben.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.