forked from B3AU/micropython
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathFIR.py
27 lines (23 loc) · 773 Bytes
/
FIR.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
__author__ = 'beau'
import array
class FIR():
"""
Finit impulse response filter, aka moving average.
"""
def __init__(self, window_size=30,div=1):
self.div = div
self.win_size = window_size
self.a = array.array('l', window_size * [0]) # no double on pyboard? integers logic for now
self.arr_position = 0
self.sum = 0
def push(self, value):
old_val = self.a[self.arr_position]
self.a[self.arr_position] = value
self.arr_position += 1
self.arr_position %= self.win_size
self.sum -= old_val
self.sum += value
def get_value(self):
return self.sum / self.win_size / self.div
def median(self):
return sorted(self.a)[int(self.win_size/2)]