Die Division durch 1000 in Manfs Beispiel gilt nur, wenn man auch über 1000 Messwerte mittelt.Habe ich Manfs Erklärung falsch aufgefasst, oder das richtige Ergebnis und verstehe es nur nicht es zu deuten?
Du rechest aber mit nur 2 Messwerten, bzw. mit 998 Messwerten die = 0 sind.
Wenn du eine Mittelung über x Werte machst, musst du entweder in deinem Programm berücksichtigen, dass du Anfangs noch keine X-Messwerte hast und entsprechende nur durch die Anzahl der vorhandenen Messwerte teilen, oder dich einfach damit abfinden, dass das Programm nach dem Start erst mal eine ganze Zeit lang falsche Messwerte liefert.
Ich habe mal ein bischen in Bascom mit der fliessenden Mittelung rumgespielt. Dan Code füge ich unten ein, wenn du Bascom hast, kannst du ihn dir anpassen und ihn im Simulator von Bascom laufen lassen.
Der erste Teil des Programms geht von einer Mittelung über 50 Messwerte aus, die Messwerte sind immer genau 512, das Programm ignoriert aber so wie du, dass es am Anfang ja noch gar keine 50 Messwerte gibt.
An der Ausgabe kannst du dann sehen, wie sich das Program langsam auf den korrekten Mittelwert "hinarbeitet". Ganz korrekt wird der Mittelwert gar nicht, dass liegt an der Fliesskommaarithmetik.
Anschliessend kannst du dann selber neue Messwerte eingeben und sehen, wie wenig sich ein einzelner Messwert auf das fliessende Mittel auswirkt.
Code:$sim $crystal = 16000000 $regfile = "m16def.dat" $baud = 38400 Dim Messwert As Integer : Messwert = 512 Const Anzahl = 50 ' Anzahl Messwerte Dim Mittelwert As Single Dim Mittelwert_int As Integer Dim Temp As Single Dim Zaehler As Word : Zaehler = 0 While Mittelwert < 511 Incr Zaehler Temp = Mittelwert / Anzahl Mittelwert = Mittelwert - Temp Temp = Messwert / Anzahl Mittelwert = Mittelwert + Temp Print Zaehler ; ": " ; Mittelwert Wend 'Print Zaehler ; ": " ; Mittelwert Do Input "Neuer Messwert: " , Messwert ' For Zaehler = 1 To Anzahl Temp = Mittelwert / Anzahl Mittelwert = Mittelwert - Temp Temp = Messwert / Anzahl Mittelwert = Mittelwert + Temp Mittelwert_int = Mittelwert ' Next Zaehler Print "Neuer Mittelwert: " ; Mittelwert_int Loop End






Zitieren

Lesezeichen