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

原文地址:https://www.cnblogs.com/fellow1988/p/8836412.html