Added biquad filter code
This commit is contained in:
parent
2d33110138
commit
3a894879f0
43
lasp/filter/biquad.py
Normal file
43
lasp/filter/biquad.py
Normal file
@ -0,0 +1,43 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""!
|
||||
Author: J.A. de Jong - ASCEE V.O.F.
|
||||
|
||||
Description: Filter design implementation of common biquad filters that are
|
||||
often used in parametric equalizers.
|
||||
"""
|
||||
__all__ = ['peaking', 'biquadTF']
|
||||
from scipy.signal import bilinear_zpk, zpk2sos, freqz_zpk, sosfreqz
|
||||
from scipy.interpolate import interp1d
|
||||
import numpy as np
|
||||
|
||||
def peaking(fs, f0, Q, gain):
|
||||
"""
|
||||
Design of peaking biquad filter
|
||||
|
||||
Args:
|
||||
fs: Sampling frequency [Hz]
|
||||
f0: Center frequency
|
||||
Q: Quality factor (~ inverse of bandwidth)
|
||||
gain: Increase in level at the center frequency
|
||||
"""
|
||||
A = np.sqrt(10**(gain/20))
|
||||
omg0 = 2*np.pi*f0/fs
|
||||
alpha = np.sin(omg0)/Q/2
|
||||
b0 = 1+alpha*A
|
||||
b1 = -2*np.cos(omg0)
|
||||
b2 = 1-alpha*A
|
||||
a0 = 1 + alpha/A
|
||||
a1 = -2*np.cos(omg0)
|
||||
a2 = 1-alpha/A
|
||||
|
||||
return np.array([b0/a0, b1/a0, b2/a0, a0/a0, a1/a0, a2/a0])
|
||||
|
||||
def biquadTF(fs, freq, ba):
|
||||
"""
|
||||
Computes the transfer function of the biquad.
|
||||
|
||||
"""
|
||||
freq2, h = sosfreqz(ba, worN=48000, fs=fs)
|
||||
interpolator = interp1d(freq2, h, kind='quadratic')
|
||||
return interpolator(freq)
|
Loading…
Reference in New Issue
Block a user