www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Schrittweise Mittelwertbildung


Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Sebel De Tutti (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
((AktuellerMittelwert*N-1)+ZusaetzlicherDatenWert)/N
N++

Autor: Christoph Kessler (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Sven Bohner (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: hans dieter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alles klar -- Danke!

Autor: Hagen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast die Implementierung eines Moving-Average Filters beschrieben.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.