class Filter: def __init__(self, B, A): """Create an IIR filter, given the B and A coefficient vectors""" self.B = B self.A = A if len(A) > 2: self.prev_outputs = Ringbuffer(len(A) - 1) else: self.prev_outputs = Ringbuffer(3) self.prev_inputs = Ringbuffer(len(B)) def filter(self, x): #take one sample, and filter it. Return the output y = 0 self.prev_inputs.new_sample(x) k = 0 for b in self.B: y = y + b * self.prev_inputs.reverse_index(k) k = k + 1 k = 0 for a in self.A[1:]: y = y - a * self.prev_outputs.reverse_index(k) k = k + 1 y = y / self.A[0] self.prev_outputs.new_sample(y) return y def new_sample(self, x): return self.filter(x)
class Filter: def __init__(self, B, A): """Create an IIR filter, given the B and A coefficient vectors""" self.B = B self.A = A if len(A)>2: self.prev_outputs = Ringbuffer(len(A)-1) else: self.prev_outputs = Ringbuffer(3) self.prev_inputs = Ringbuffer(len(B)) def filter(self, x): #take one sample, and filter it. Return the output y = 0 self.prev_inputs.new_sample(x) k =0 for b in self.B: y = y + b * self.prev_inputs.reverse_index(k) k = k + 1 k = 0 for a in self.A[1:]: y = y - a * self.prev_outputs.reverse_index(k) k = k + 1 y = y / self.A[0] self.prev_outputs.new_sample(y) return y def new_sample(self,x): return self.filter(x)
class SparseMultiTapDelay: def __init__(self, taps): self.taps = taps max_t = 0 for time, scale in taps: if time > max_t: max_t = time self.buffer = Ringbuffer(max_t) def new_sample(self, x): result = 0 for time, scale in self.taps: result = result + self.buffer.reverse_index(time) * scale return result
class SparseMultiTapDelay: def __init__(self, taps): self.taps = taps max_t = 0 for time,scale in taps: if time>max_t: max_t = time self.buffer = Ringbuffer(max_t) def new_sample(self, x): result = 0 for time, scale in self.taps: result = result + self.buffer.reverse_index(time) * scale return result