指数格伦布编码 (exponential-Golomb coding)

指数哥伦布码(Exponential-Golomb coding)是一种无损数据压缩方法。

ExpG=0Z+A+DExpG = \underbrace{0\cdots}_Z + A + D

  1. 将数字以二进制形式写出(B),去掉最低的k个比特(D)[右位移k个bit],之后加1 (A = B + 1)
  2. 计算A的比特个数(C),将此数减一,即是需要增加的前导零个数(Z = C-1)
  3. 将第一步中去掉的最低k个比特位补回比特串尾部 (ExpG = Z个0 + A + D)

根据上面的过程对数据进行推导

A=(B÷2(k×8))+1A = \left( B \div 2^{(k \times 8)} \right) + 1

Z=floor(log2(A))1Z=floor(log_2(A))-1

  • k(阶) = 0

    $n BB DD AA ZZ ExpG
    0 00000000 None 1 0 1
    1 00000001 None 10 1 010
    2 00000010 None 11 1 011
    3 00000011 None 100 2 00100
    4 00000100 None 101 2 00101
    5 00000101 None 110 2 00110
    6 00000110 None 111 2 00111
  • k(阶) = 1

    $n BB DD AA ZZ ExpG
    0 00000000 0 1 0 10
    1 00000001 1 1 0 11
    2 00000010 0 10 1 0100
    3 00000011 1 10 1 0101
  • k(阶) = 2

    $n BB DD AA ZZ ExpG
    0 00000000 00 1 0 100
    1 00000001 01 1 0 101
    2 00000010 10 1 0 110
    3 00000011 11 1 0 111
  • 有符号推导 k=0 2-1做码表用

    $n BB DD AA ZZ ExpG
    0 00000000 None 1 0 1
    1 00000001 None 10 1 010
    -1 00000010 None 11 1 011
    2 00000011 None 100 2 00100
    -2 00000100 None 101 2 00101
    3 00000101 None 110 2 00110
    -3 00000110 None 111 2 00111

以上需要注意 k(阶)就是数据变量n的右位移位数。