Dithering - Approach?


#1

When exporting from my app from 32bit FP to 24bit or 16bit my current approach is to generate a random value between 0.0 and 1.0 then minus 0.5 and times by the floating point step distance between each 16bit or 24bit. Calculated 1 / pow(2,(16-1))

I can do some basic signal shaping, eg HP the noise. I know isotope have there MBIT+ algo which they make a song and dance about. But is there anything I can do to improve my approach or it just subjective.

In my studio I have a set of SM9’s and at 16bit I can obviously tell there’s a subtle improvement post dithering but really can’t tell much beyond the difference in the algorithms used (and my ears aint that old).


#2

The simplest improvement is to use the sum of two random values (so there is a triangular distribution of the values rather than linear) or better a random value minus the previous sample’s random value (also triangular, but with reduced low frequency content).

You have to be careful doing more sophisticated dithers which usually have much higher noise levels at very high frequencies - if the audio gets processed again (especially with distortion or resonant filters) it can sound pretty ugly.


#3

Ah cool, I get it and understand now that in ableton.

So for each sample generate a (random - previous random) * whatever downsampling coefficient.

Yes I realise processing post dither is bad. It’s getting added right at the end of the mix chain when the bitrate is going from float to 16 or 24 bit.

Is this process augmented by sample rate though. I’m a stickler for consistency. Would I be able to minus say several samples back weighted by some time coefficient. Is that just overkill?

Thanks for help…


#4

Using one or more of the previous values will start adding bumps and dips to the dither spectrum, like adjusting the taps of a FIR filter. Different but probably not better?