AC3 mantissa quantization and decoding
1.overview
所有的mantissa被quantize到固定精确度的level(有相应的bap标识)上,level小于等于15时,使用symmetric quantization.level大于15时,使用asymmetric quantization,用2的补码表示。
下面table标识了每个bap使用的quantizer,当bap为0时,表示没有quantize mantissa,使用随机噪声代替。当bap为1,2,4时,3个mantissa使用7bit的code word group在一起。
2. dither for 0 bit mantissa
当bap为0时,表示不给mantissa分配bit,使用dither(random noise)来代替quantize value.
是否使用dither,在bitstream中由ditherflag标识,当ditherflag = 1时,使用dither,当ditherflag为0时,使用0.
每个channel的ditherflag可能不一样。dither应用在将coupling channel还原出individual channel之后。
dither 的值非均匀的分布在-1~+1之间,通常会对dither用0.707进行scale后的范围是-0.707~0.707之间。
那么对应的频率系数为:
transform_coefficent[k]=scaled_dither_value>>exponent[k];
3.asymmetric quantization
bap在6~15之间时,使用asymmetric quantization. 使用asymmetric小数的2的补码进行quantization。
每个mantissa使用浮点型的小数来表示。mantissa的小数点在MSB的左边。所以mantissa的范围是:
一个audio block的有256个频率系数,每个频率系数对应一个mantissa。第k个mantissa的bit数为qntztb[bap[k]].
从bitstream中读取qntztab[bap[k]]的mantissa为mantissa[k],那频率系数为:
transform_coefficent[k]=mantissa[k]>>exponent[k];
以bap=6为例,quantizer level是32,使用这个quantizer,mantissa占用的bit数为5(2^5=32)。quantizer使用5 bit将mantissa分为32个level,-1~+1之间的quantize level是asymetric的。
3.symetric quantization
bap在1~5之间时,mantissa的值在bitstream中并不直接读出来,而是用mantissa_code表示,使用mantissa_code查表才能得到真正的mantissa.
transform_coefficent[k]=quantization_table[mantissa_code[k]]>>exponent[k];
mantissa_code到mantissa的map关系如下面的table:
bap等于1,2,4时,多个mantissa_code被group在一起用7bit的group_code来进一步提高压缩率。
bap为1时,采用3进制将3个mantissa_code group成一个7bit的group_code.
bap为2时,采用5进制将3个mantissa_code group成一个7bit的group_code
bap为4时,采用11进制将2个mantissa_code group成一个7bit的group_code