[linux-audio-dev] Fixed vs. floating point

Tim Goetze tim at quitte.de
Fri Oct 14 10:26:09 UTC 2005


[Hannu Savolainen]

>This is the main reason why many audio applications use floating point 
>internally. However many (or most) applications do just simple 
>computations which are easy to do in fixed point too.
>
>Hint: Scale the input samples to the -1.0..1.0 range regardless of the 
>input precision (8/16/24). Scale samples to the desired output format just 
>before writing them to the device or to a file. This 
>will make your life much easier.

i'd like to add that due to quantization, signal quality can quickly 
suffer in fixed-point if you do a lot of consecutive calculations on 
it (not even considering you have to be darn careful not to clip the 
signal at overflow). a quiet signal, or any signal around 
zero-crossings, is represented in fixed-point by only a very small 
number of bits -- two simple multiplications can lead to end results 
varying greatly from the ideal (infinite precision) result. if the 
signal level is low and the end user raises the final gain to 
compensate, the results can be quite disastrous.

for example, implementing an iir filter of only medium complexity (in 
fact, anything more complex than a biquad) in fixed-point requires 
jumping through a lot of hoops (decomposition into a chain of biquads, 
usually). in floating-point, simply implement the filter loop and 
history in doubles if the filter gets complex, and you're done -- 
without slowing down execution substantially (on x86 at least).

as long as your target platforms support it with reasonable processing 
speed, choose floating point.

cheers, tim



More information about the Linux-audio-dev mailing list