This module can be used to reduce the amount of bits to become smaller then 24 bits. One can either use it as the last step in mastering or just as an effect.


Back one page


The following block diagram illustrates the internal flow of the BitReduction sound:



This parameter is determined by two other parameters in the following way:


InpScale = InputAtt * (1-(PrnScale*DitherGComp))


The InputAtt parameter is described below. The second term can compensates for the added dither. If one would not compensate for the added dither the signal can clip due to the dither. This clipping will add unwanted signal depend coloring to the dither. Set DitherGComp to 1 to enable this gain compensation for the added dither.



This is a user parameter that will apply a constant attenuation on the input signal. For mastering to pcm-files, set this value according to this formula:


InputAtt = ((2**(NrBits-1))-1) / (2**(NrBits-1))


Hint1 for 16 bit mastering: InputAtt = 32767/32768




The TPDFNoise block generates full-scale dither (= Pseuso Random Numbers with a Triangular Power Distribution Function). Dither is normally only applied to the lowest bit. The PrnScale reduces the level of the dither:


PrnScale = LSBDither * 2**(-NrBits)


When LSBDither is 1, the dither signal has exactly the size of the LSB (= Least Significant Bit). Depending on the material set the LSBDither parameter by ear. It is quite normal to put it to 1 or even 2 for making a 16 bit master.



In the block diagram several “A” and “B” labels are placed. The label represents which 56 bit accumulator (8bit overflow and 48 bit fixed point) is used for what intermediary signal. There are also 3 blocks with the name “Quantize 24 bits”. These blocks remove the lower 24 bits from the signals. Since the input signal cannot be more then 24 bits, there is no point in storing more than 24 bits for internals. The assumption is one will reduce at least to 16 bits and therefore there is left 24-16 = 8bits for all the error + dither signals. If one would use this module to reduce only to 22 bits, it is questionable if this architecture is good enough.


The “Quantize NrBits” block is the actual bit reducer or quantizer. It is implemented with an “AND” operation. The user will set the NrBits and a bit mask is calculated and applied. It simple words, the un-used bits are thrown away. Another term used for this operation: truncation of bits.


LSBoffsetin and LSBoffsetout

Throwing away the un-used bits results in a DC (=Direct Current) offset in the output signal. One can compensate for this offset at the input to the quantizer or at the output of the quantizer.


For mastering purposes: one will set the LSBoffsetin to compensate this. If LSBoffsetin is set to 1 the quantizing is changed from truncation to rounding (symmetrical quantization). The result is more close to the original, but it uses one level more then can actually be stored in a pcm-file (use Hint1 above to compensate for this).


When using this sound as effect: one could either not care about offsets and just offset the input signal up or down to make reverberations more apparent after heavy quantization and at the output one will just shift up or down the signal again using LSBoffsetout.


Error Feedback

The output of the quantizer is considered to be the original signal + an error signal. If we subtract this signal from the original signal the negative error signal remains. This negative error signal is stored into the 1 sample delay buffer (indicated with “T”) to be added with the next input sample (=feedback). ErrFb1 controls the amount of feedback. When setting the ErrFb1 greater then zero will shape the spectrum of the error signal (possibly including offset and dither) upward to higher frequencies. It is well known from psychoacoustics that we are much less sensitive for very high frequencies (>10 kHz). In the ideal case the shaping should following the “Threshold in quiet”. Since this is a first order feedback this will not be the case. A value between 0.5 and 1 is very normal for mastering purposes.


Use in Mastering

Realize that the quantizer/BitReduction does not sound exactly as the final quantized pcm file will sound. To explain this, an example: downscaling to 4 bits. With 4 bits one can have 2**4 = 64 levels in the signal. In most pcm audio files one considers the signal to be signed integers. This means the signal can have the absolute values -32,-31,...,-1,0,1,...,31. On the upper side there is one value/level less! This is called a non-symmetrical quantization. The BitReduction module however can place these 64 levels within the full 24 bit range, making it (almost) a symmetrical quantization. Even more illustrative: with a quantization to 1 bit only, the BitReduction module is allowed to output -2**23,0,(2**23)-1 (-1 is due to the 24 bit range). That is one value/level more then can be saved in a 1 bit pcm audio file. In mpeg audio files this is however possible! It could well be that for 16 bits (in case of creating a master for CD) this issue is not worth mentioning. Only a blind listing test could reveal if the effect is worth considering. I do believe that with special constructuced sound materials (test signals) one can reveal the difference. It will result in a sort of non-linear distortion. Using Hint1 could be a simple solution to make sure this distortion is not possible anymore.


Making a stereo BitReduction should not be an issue for an experienced Kyma user. One can just use one module for each channel and some channellers for routing the signals. It is however advisable to set micro in the right channel to a different value (for example 3545447 i.s.o. 3545443). This will make the dither uncorrelated.


-- ChristiaanGelauff - 4 May 2007   Back one page