Go to the documentation of this file.00001 from scipy import signal
00002 from collections import deque
00003
00004
00005
00006
00007
00008 class IIRFilter:
00009 def __init__(self, dimension, cutoff_per_sampling):
00010 self.dimension = dimension
00011 self.ff, self.fb = signal.butter(dimension, cutoff_per_sampling, "low")
00012 self.prev_values = deque([0.0] * dimension)
00013
00014 def execute(self, input_value):
00015 feedback = self.fb[0] * input_value
00016 for i in range(self.dimension):
00017 feedback -= self.fb[i + 1] * self.prev_values[i]
00018 filtered = self.ff[0] * feedback
00019 for i in range(self.dimension):
00020 filtered += self.ff[i + 1] * self.prev_values[i]
00021
00022 self.prev_values.appendleft(feedback)
00023 self.prev_values.pop()
00024
00025 return filtered
00026
00027 def reset(self):
00028 self.prev_values = deque([0.0] * self.dimension)
00029