The encoder can optionally dither the mantissa data in the course of quantizing it. Mode bits in the transmitted data stream indicate if dither is in use and provide synchronization information, so the decoder can subtract out exactly the same dither data in reconstructing the mantissas. The pseudo-random number generator has been designed not only to have good randomness properties, but also to produce identical results regardless of the hardware platform. Data packing The above processes convert each block of 6 channels of time signals into a series of derived arrays and scalar values, including TDAC exponents and quantized mantissas, bit allocation sidechain information, coupling coefficients, and dither flags. In the final stage of the encoding process, this information is packed into a single block, along with synchronization information, a header and optional miscelleneous and error correction information.
Care is taken to pack the data in a logically causal fashion, so the decoder can unpack it.
The decoder, like the encoder, is block structured, and so establishes and maintains sync with the incoming datastream, collecting an entire coded block in an input buffer before proceding to decode it. Each decoder input data block is checked for internal consistency, as well as the presence of status information from an optional external error correction processor. If an uncorrectable error condition is indicated, the decoder may reuse the last known good input block in place of the current one to conceal the error. Fixed format data unpacking Data unpacking is carried out in two stages. First, the fixed format data is unpacked, including exponents, coupling coefficients, and mode flags.