Summarizing the main points from the links given above and summing this up with my own experience with IIR filters on the Teensy and having read pages 280ff in the excellent book by Rick Lyons (Understanding Digital Processing), maybe there is a simple solution to the problem:
* it seems the main problem in implementing IIR filters is the arithmetic accuracy of
1.) the filter coefficients (= coefficient quantization = limited precision coefficients),
2.) overflow errors in fixed-point calculations,
3.) roundoff errors = limit cycles = deadband effects
They cause "ringing" of the filter, also called "filter makes the noise", "self-oscillations", "stable noise", "biquad noise" etc.
(So it seems we also have a multitude of nomenclatural problems here ;-), but I personally think it breaks down to some simple recommendations.)
re 1.)
* using single precision floating point precision seems to be a good solution. 16-bit coefficients do not seem to provide enough precision (one of the sources says we need at least 20 bits for the recursive path and 16 bits for the non-recursive part)
2.) / 3.)
* use cascaded 2nd-order IIRs --> thats perfectly implemented in the audio lib by using cascaded biquad filters ! However, the user should ensure that the filter stages with the highest Q are placed first [but that is only possible in floating point implementations . . .]
* "the MAC operation should have at least 52 bits integer or double floating point precision" --> now thats really a hard criterion, eg. the variables in the Teensy audio lib are only 32bit precision
* to be honest, I have not understood noise shaping/dithering, so I will not comment on that, but it seems a possibility to improve the filters SNR for low frequencies, but increases SNR at high frequencies
CONCLUSION ("SIMPLE" SOLUTION):
* for most applications, the audio lib with 16bit fixed point coeffs as it is now, will be of sufficient quality!
* however, if you want lower noise, use float coefficients with single precision AND use floating point implementation of the calculations, as provided by the CMSIS implementations:
https://www.keil.com/pack/doc/CMSIS/DSP/html/group__BiquadCascadeDF1.html
Coefficients can be calculated by Iowa Hills IIR Filter designer (if you want fixed filter responses) or can be dynamically calculated (for 2nd order filters) by using these formulae
http://www.musicdsp.org/files/Audio-EQ-Cookbook.txt
For testing your filters and as a didactical excercise I would recommend the option "TestFilter" in the Iowa Hills IIR filter designer. Click on fixed point and change precision to 16bit. You will see that -caused by the limited precision- the filter response is entirely different than what you intended it to be . . . If you designed for 60dB stopband attenuation, it can easily be that the noise is 15 dB higher at only 45dB below the signal (especially for more exotic filter responses like the elliptic filter). This is the effect of the imprecision of the coeffs and the calculations that can be simulated and visualized in that program (however, I understand only part of the options that can be tweaked in the simulation program. Test it by yourself: try a lowpass with 80dB stopband attenuation and compare the output of a sinewave with 16bit fixed point and 32bit floating point respectively in the "TestFilter" option).
All the best,
Frank DD4WH