Всё в плавучке, не успеет как пить дать, но как некоторая отправня точка сойдёт. Константы BW2_A и BW2_B - a и b для Баттерворта 2-го порядка.
#define PI 3.14159265358979
#define BW2_A 1.4142
#define BW2_B 1.0
float c0, c1, c2, d1, d2; /* coeffs */
float x1, x2, y1, y2; /* delay line */
void init_lowpass( float Fs, float f0, float a, float b )
{
float w = 1 / tan( PI * f0 / Fs );
float w2 = w*w;
flat den = 1 + a * w + b * w2;
c2 = c0 = 1 / den;
c1 = 2 / den;
d1 = -2 * ( 1 - b * w2 ) / den;
d2 = ( a * w - 1 - b * w2 ) / den;
x1 = x2 = y1 = y2 = 0.0
}
float do_biquad( float x0 )
{
float y0 = x0*c0 + x1*c1 + x2*c2 + d1*y1 + d2*y2;
x2 = x1;
x1 = x0;
y2 = y1;
y1 = y0;
return y0;
}