-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathiir.py
51 lines (46 loc) · 1.38 KB
/
iir.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#
# Author: Gabriel Galeote Checa
# MIT License
# IIR class implementation
#
import numpy as np
class IIR2_filter:
"""2nd order IIR filter"""
def __init__(self,s):
"""Instantiates a 2nd order IIR filter
s -- numerator and denominator coefficients
"""
self.numerator0 = s[0]
self.numerator1 = s[1]
self.numerator2 = s[2]
self.denominator1 = s[4]
self.denominator2 = s[5]
self.buffer1 = 0
self.buffer2 = 0
def filter(self,v):
"""Sample by sample filtering
v -- scalar sample
returns filtered sample
"""
input = v - (self.denominator1 * self.buffer1) - (self.denominator2 * self.buffer2)
output = (self.numerator1 * self.buffer1) + (self.numerator2 * self.buffer2) + input * self.numerator0
self.buffer2 = self.buffer1
self.buffer1 = input
return output
class IIR_filter:
"""IIR filter"""
def __init__(self,sos):
"""Instantiates an IIR filter of any order
sos -- array of 2nd order IIR filter coefficients
"""
self.cascade = []
for s in sos:
self.cascade.append(IIR2_filter(s))
def filter(self,v):
"""Sample by sample filtering
v -- scalar sample
returns filtered sample
"""
for f in self.cascade:
v = f.filter(v)
return v