Also inzwischen habe ich den Fehler selbst gefunden...

prinzipiell kann ich sämtliche Koeffizienten durch einen Faktor f teilen, aber entsprechend muss ich auch y mit f multiplizieren, damit das Ergebnis stimmt.

die Zeile
Code:
y = coef_b[0] * x + buf[0];
muss also so aussehen
Code:
y = f * (coef_b[0] * x + buf[0]);
Bei meiner Festkomma-Implementierung werde ich für die Skalierung einen Faktor von 2 fest vorgeben. Das sollte für die meisten Filter ausreichen, und bringt noch etwas mehr Performance als eine Implementierung mit einstellbarem Faktor.