SigmaStudio allows me to use either single-precision or double precision for most filters in the library. When should I use single and when should I use double?
In general, single-precision mode is adequate for most processing functions. Double-precision processing is really only required in cases where quantization error from the single-precision calculations can increase the noise floor of the system. This is basically only an issue for filter calculations, where a fine difference in a coefficient value can have a large effect on the outcome. In SigmaStudio, the filters folder has Single Precision and Double Precision subfolders that will allow you to select which type of filter you should use.
Basically, for a single-precision filter in the SigmaDSP, you use 28 bits for the coefficient calculations, whereas the double-precision version uses 56 bits.
In most general purpose fixed point DSPs, the bit depth is lower (like 16 bits in Blackfin), so double-precision is the norm for most audio filters, regardless of cutoff frequency or Q. However, for the SigmaDSP, the standard 24-bit depth is big enough that the noise floor is -144 dB (much lower than the noise floor of the ADCs and DACs attached to the DSP), so for most calculations, the quantization noise from single-precision calculations is well below the noise floor of the converters and therefore can be ignored.
The SigmaStudio help document recommends that you use double-precision for filters with cutoff frequencies near or below 10% of the sample rate (i.e. less than 480 Hz for a sample rate of 48 kHz), or in cases when the Q is very high. The reasoning behind this is that when the center frequency is low and the Q is high, the coefficient values become very small, so that calculation error from quantization becomes significant enough that double-precision calculations are warranted.
Keep in mind that double-precision calculations require about double the instruction count of single-precision calculations, so you have to weigh the costs and benefits when choosing which calculation you need for each point in the signal chain. Simply using double-precision for all filters will halve the amount of processing you can do, and it might not actually be providing a benefit in many cases.
A company called Rane has some good application notes on the subject.
There is a brief technical explanation of the differences between single- and double-precision here:
This is a very good document describing fixed/floating and single/double architectures and the advantages/disadvantages of each:
From reading those documents, you will see that double-precision is only required in a limited number of cases, and outside of those cases, single-precision can get you the same performance with fewer instruction cycles.
Message was updated on May 30, 2012 by: Brett Gildersleeve