24static float getK(
float samplingFrequency,
float cutoff) {
25 return tanf_taylor(CONST_PI * cutoff / samplingFrequency);
29 return 1 / (1 + K / Q + K * K);
33 if (samplingFrequency < 2.5f * centerFrequency) {
34 criticalError(
"Invalid biquad parameters samplingFrequency=%f centerFrequency=%f", samplingFrequency, centerFrequency);
38 float K =
getK(samplingFrequency, centerFrequency);
44 b1 = 2 * (K * K - 1) * norm;
45 b2 = (1 - K / Q + K * K) * norm;
49 criticalAssertVoid(samplingFrequency >= 2.5f * cutoffFrequency,
"Invalid biquad parameters");
51 float K =
getK(samplingFrequency, cutoffFrequency);
57 b1 = 2 * (K * K - 1) * norm;
58 b2 = (1 - K / Q + K * K) * norm;
62 criticalAssertVoid(samplingFrequency >= 2.5f * cutoffFrequency,
"Invalid biquad parameters");
64 float K =
getK(samplingFrequency, cutoffFrequency);
70 b1 = 2 * (K * K - 1) * norm;
71 b2 = (1 - K / Q + K * K) * norm;
75 float result = input *
a0 +
z1;
77 efiPrintf(
"input %f, a0 %f, z1 %f, result %f", input,
a0,
z1, result);
80 z2 = input *
a2 -
b2 * result;
85 float Y = steadyStateInput * (
a0 +
a1 +
a2) / (1 +
b1 +
b2);
87 float steady_z2 = steadyStateInput *
a2 - Y *
b2;
88 float steady_z1 = steady_z2 + steadyStateInput *
a1 - Y *
b1;
static float getK(float samplingFrequency, float cutoff)
static float getNorm(float K, float Q)
float filter(float input)
void configureBandpass(float samplingFrequency, float centerFrequency, float Q)
void configureHighpass(float samplingFrequency, float cutoffFrequency, float Q=0.54f)
void cookSteadyState(float steadyStateInput)
void configureLowpass(float samplingFrequency, float cutoffFrequency, float Q=0.54f)
static constexpr engine_configuration_s * engineConfiguration