class WindowedAverage: def __init__(self, window): if have_numpy: self.window = numpy.array(window) else: self.window = list(window) self.buffer = Ringbuffer(len(window)) def new_sample(self, x): self.buffer.new_sample(x) if have_numpy: avg = numpy.mean(self.buffer.get_samples() * self.window) else: i = 0 sum = 0 for s in self.buffer.get_samples(): sum += self.window[i]*s i = i + 1 avg = sum/len(self.window) return avg
class Erosion: def __init__(self, window): self.window = window self.buffer = Ringbuffer(window) def new_sample(self, x): self.buffer.new_sample(x) return min(self.buffer.get_samples())
class WindowedReduceFilter: def __init__(self, binop, window): self.state = None self.window = window self.buffer = Ringbuffer(window) self.binop = binop def new_sample(self, x): self.buffer.new_sample(x) samples = self.buffer.get_samples() state = reduce(self.binop, samples) return state
class WindowedAverage: def __init__(self, window): if have_numpy: self.window = numpy.array(window) else: self.window = list(window) self.buffer = Ringbuffer(len(window)) def new_sample(self, x): self.buffer.new_sample(x) if have_numpy: avg = numpy.mean(self.buffer.get_samples() * self.window) else: i = 0 sum = 0 for s in self.buffer.get_samples(): sum += self.window[i] * s i = i + 1 avg = sum / len(self.window) return avg
class Median: def __init__(self, window): self.window = window self.buffer = Ringbuffer(window) def new_sample(self, x): self.buffer.new_sample(x) b = list(self.buffer.get_samples()) b.sort() lb = len(b) # even case if lb % 2 == 0: return b[len(b) / 2] + b[len(b) / 2 + 1] else: # odd case return b[len(b + 1) / 2]
class Median: def __init__(self, window): self.window = window self.buffer = Ringbuffer(window) def new_sample(self, x): self.buffer.new_sample(x) b = list(self.buffer.get_samples()) b.sort() lb = len(b) # even case if lb%2==0: return b[len(b)/2]+b[len(b)/2+1] else: # odd case return b[len(b+1)/2]