IIRFilter.py
Go to the documentation of this file.
00001 from scipy import signal
00002 from collections import deque
00003 
00004 # Infinite Impulse Filter
00005 # y[n] = sum(0, dim, ff[i] * x[n - i]) + sum(1, dim, fb[i] * y[n - i])
00006 # dimensioon: dimension of filter
00007 # cutoff_per_sampling: cutoff freq [Hz] / sampling freq [Hz]
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() # remove oldest value
00024         
00025         return filtered
00026     
00027     def reset(self):
00028         self.prev_values = deque([0.0] * self.dimension)
00029     


jsk_robot_startup
Author(s):
autogenerated on Sat Jul 1 2017 02:42:18