|
@@ -181,12 +181,12 @@ struct TBiquadFilter { |
|
|
/** output state */ |
|
|
/** output state */ |
|
|
T y[2]; |
|
|
T y[2]; |
|
|
|
|
|
|
|
|
|
|
|
/** transfer function numerator coefficients: b_0, b_1, b_2 */ |
|
|
|
|
|
float b[3]; |
|
|
/** transfer function denominator coefficients: a_1, a_2 |
|
|
/** transfer function denominator coefficients: a_1, a_2 |
|
|
a_0 is fixed to 1. |
|
|
a_0 is fixed to 1. |
|
|
*/ |
|
|
*/ |
|
|
float a[2]; |
|
|
float a[2]; |
|
|
/** transfer function numerator coefficients: b_0, b_1, b_2 */ |
|
|
|
|
|
float b[3]; |
|
|
|
|
|
|
|
|
|
|
|
enum Type { |
|
|
enum Type { |
|
|
LOWPASS_1POLE, |
|
|
LOWPASS_1POLE, |
|
@@ -200,11 +200,10 @@ struct TBiquadFilter { |
|
|
NOTCH, |
|
|
NOTCH, |
|
|
NUM_TYPES |
|
|
NUM_TYPES |
|
|
}; |
|
|
}; |
|
|
Type type = LOWPASS; |
|
|
|
|
|
|
|
|
|
|
|
TBiquadFilter() { |
|
|
TBiquadFilter() { |
|
|
reset(); |
|
|
reset(); |
|
|
setParameters(0.f, 0.f, 1.f); |
|
|
|
|
|
|
|
|
setParameters(LOWPASS, 0.f, 0.f, 1.f); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void reset() { |
|
|
void reset() { |
|
@@ -230,7 +229,7 @@ struct TBiquadFilter { |
|
|
Q: quality factor |
|
|
Q: quality factor |
|
|
V: gain |
|
|
V: gain |
|
|
*/ |
|
|
*/ |
|
|
void setParameters(float f, float Q, float V) { |
|
|
|
|
|
|
|
|
void setParameters(Type type, float f, float Q, float V) { |
|
|
float K = std::tan(M_PI * f); |
|
|
float K = std::tan(M_PI * f); |
|
|
switch (type) { |
|
|
switch (type) { |
|
|
case LOWPASS_1POLE: { |
|
|
case LOWPASS_1POLE: { |
|
@@ -349,6 +348,14 @@ struct TBiquadFilter { |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void copyParameters(const TBiquadFilter<T> &from) { |
|
|
|
|
|
b[0] = from.b[0]; |
|
|
|
|
|
b[1] = from.b[1]; |
|
|
|
|
|
b[2] = from.b[2]; |
|
|
|
|
|
a[0] = from.a[0]; |
|
|
|
|
|
a[1] = from.a[1]; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
/** Computes the gain of a particular frequency |
|
|
/** Computes the gain of a particular frequency |
|
|
f: normalized frequency |
|
|
f: normalized frequency |
|
|
*/ |
|
|
*/ |
|
|