Gleitenden Durchschnitt implementiert

This commit is contained in:
Thomas Hooge 2024-12-28 08:40:51 +01:00
parent 118b0d87ff
commit a0638c76e5
2 changed files with 49 additions and 16 deletions

View File

@ -1,6 +1,8 @@
Das Programm kann direkt gestartet werden. Eine Installation ist nicht Das Programm kann direkt gestartet werden. Eine Installation ist nicht
erforderlich. Die unten angegebenen Abhängigkeiten müssen erfüllt sein. erforderlich. Die unten angegebenen Abhängigkeiten müssen erfüllt sein.
Python muß mindestens Version 3.10 sein.
apt-get install python3-cairo python3-gi python3-gi-cairo gir1.2-rsvg-2.0 \ apt-get install python3-cairo python3-gi python3-gi-cairo gir1.2-rsvg-2.0 \
python-serial python3-nmea2 python3-smbus2 python3-bme280 python-serial python3-nmea2 python3-smbus2 python3-bme280

View File

@ -1,25 +1,56 @@
''' """
Moving Average Moving Average
returns a float so no integer rounding applied
Sortierung einer Liste nach Alter? FIFO? """
'''
import time
class mAvg(): class mAvg():
def __init__(self, interval): def __init__(self, size):
self.interval = interval self.size = size
self.avg = None self.data = [0] * size
self.data = [] self.nval = 0
self.sum = 0
self.next = 0
def addVal(self, value): def addVal(self, value):
self.data.append((time.time(), value)) # add a new value und return new current avg
if self.nval < self.size:
# list is not filled
self.nval += 1
self.sum += value
else:
# list is filled
self.sum = self.sum - self.data[self.next] - value
self.data.[self.next] = value
self.next += 1
# if end of list reached, start over from beginning
if self.next = self.size:
self.next = 0
return self.sum / self.nval
def setInterval(self, interval): def getAvg(self, points=None):
pass if self.nval == 0:
return None
# get avg of all collected data
if not points:
return self.sum / self.nval
# get avg of subset
if points > self.nval:
return None
sum = 0
i = self.next
p = points
while p > 0:
p -= 1
if i == 0:
i = self.size - 1
else:
i -= 1
sum += self.data[i]
return sum / points
def getAvg(self): def reset(self):
return self.avg self.nval = 0
self.next = 0
self.sum = 0