指数哥伦布码

指数哥伦布码的DSP快速解码方法

http://blog.sina.com.cn/s/blog_4a5c0704010004kx.html

在AVS和H.264的码流中,指数哥伦布码作为一种由编码可直接解得码字的变长码,应用非常广泛。在H.264中,参数集PPS/SPS以及每个片的头部分都是使用哥伦布编码的,那么指数哥伦布编码的规则与如何快速实现呢?
    首先,指数哥伦布码分无符号型和有符号型,但是编码时都是按绝对值进行编码的,不同的是,有符号的数则按最后一位为符号位,并且加上1后除以2得到其值。
    其次,哥伦布码作为一个自标志长度的变长编码,从开始比特查找1,设计数n个零后找到1,该1之后再取n个比特,这个二进制串的值就是该哥伦布编码的无符号值。
    在TI TM320C6000系列DSP上,有汇编指令LMBD,该指令就可以很容易查找到当前的寄存器从头开始有多少个0,这样就容易得到比特数,将比特数长度的二进制串使用EXTU读取到一个寄存器中,就得到了这个无符号得值;如果是有符号的,则使用置位和移位指令就可以做到。
    在其他平台上,我们仍需要查看是否有合适的指令能够适合这样的计算。
//----------------------------------------------------------------------------------------------------------//
k阶指数哥伦布码
 
 

 解析k阶指数哥伦布码时,首先从比特流的当前位置开始寻找第一个非零比特,并将找到的零比特个数记为leadingZeroBits,然后根据leadingZeroBits计算CodeNum。用伪代码描述如下:

    

下表给出了0阶、1阶、2阶和3阶指数哥伦布码的结构。指数哥伦布码的比特串分为“前缀”和“后缀”两部分。前缀由leadingZeroBits个连续的0和一个1构成,后缀由leadingZeroBits+k个比特构成,即表中的xi串,i的范围为0~(leadingZeroBits+k-1),每个xi的值为0或1。

原文地址:https://www.cnblogs.com/YYi_H/p/2251341.html