• 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

  • 相关阅读:
    获取Web打印的实际打印次数
    Web打印的在线设计
    上海交易所的STEP/FIX/FAST协议解析
    回忆我的姑妈
    指定Web打印的打印机
    Web打印控件设计
    最终用户在线设计和修改Web报表
    NOIP2021 游记
    gym103427 部分题解
    gym103428 部分题解
  • 原文地址:https://www.cnblogs.com/fellow1988/p/8836412.html
Copyright © 2020-2023  润新知