Ejemplo n.º 1
0
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)
Ejemplo n.º 2
0
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)
Ejemplo n.º 3
0
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
Ejemplo n.º 4
0
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