I played a bit with your HPF [filter] coefficient calculator http://synthmaker.co.uk/forum/download/file.php?id=236
and MyCo's osm http://synthmaker.co.uk/forum/download/file.php?id=245
that integrates your coefficients into a bilinear filter.
(I didn't really look at the LPF variant, but what goes for the HPF also goes for the LPF, as long as the formula's are OK).
Like MyCo said, the green math is OK. The filter analysis tool made by bashert (it's in the WIKI) http://www.synthmaker.co.uk/dokuwiki/lib/exe/fetch.php?id=user_creations%3Aanalysis%3Abiquad_basics%3Abiquad_basics&cache=cache&media=user_creations:analysis:biquad_basics:biquad.zip
shows the filter works fine, see the picture.
I cannot fully explain the stutter and plop effect when turning the Q and f0 knobs too fast, but my reasoning is as follows:
This type of filter (biquad IIR) is derived by mathematically transforming an (existing, proven) analogue filter into a digital filter. [more exactly, by means of a z-transform the filter is transformed from the complex s-domain into the digital z-domain].
Theoretically this should result in a perfect representation of the original filter in the digital domain.
However when you take into account
- mathematical conditions (the usual such as linearity, continuity, ...boy, that seems long ago!) that may or may not be fully fulfilled
- approximations and/or simplifications used when performing the transform
- quantization error that is introduced using the filter in the z-domain
it seems apparant that the filter that's created probably will have some flaws. Some documented flaws of this type of filter are non-linear phase response and low-frequency sensitivity (below appr 250 Hz at 44.1 kHz sample rate).
And as this is a recursive filter once there goes something wrong (quantization errors, some kind of oscillation, ..) the result is fed back in the filter, making it worse.
I am not saying this type of filter is poor, on the contrary, this is a well known and well documented filter type, that is in many cases first choice. Moreover, the RB-J cookbook formula's compensate for some non-linearities. But I just try to give some explanation for what happens.
Part of the solution is indeed changing min max values, e.g. a min value for f0 that gives some improvement is 250 or 300 Hz (to be honest a cut off frequency of 0Hz doesn't make much sense), just change the min value in the knob.
Another part of the solution is to prevent users to turn the knobs too quickly, decoupling using dezippers doesn't seem to help enough. A solution with slew rate limiters forces that there is a maximum speed for changing the parameters and is rather effective.
I must admit that even with both solutions implemented it still is possible to make the stuttering effect by quickly turning the knobs, anyway, there is a big improvement. I suppose further optimization is possible. Further, I suppose that there are more/other/different (partly) solutions, e.g. double precision for calculation of the coefficients.
Enough for today, I hope this helps you a bit further,
Still working on the same stuff.....
But..... back on track!
"I just had to postpone my project for another 3 months, I had some brilliant ideas, you know, so I had to start coding from scratch..."