实例解析
{0 3 -1 0
0 -1 1 0
1 0 0 0
0 0 0 0} NC = 1
编码后得到输出码流为: 0000 1000 1110 0101 1110 1101
解码详细过程如下:
1. 根据 Coeff_token 和 NC 查表 ( 见标准表 9-5) ,得到非零系数数目 TotalCoeffs 和拖尾系数数目 TrailingOnes
NC = 1 选择对应的表, Coeff_token 为 0000100 ,查表得到 TotalCoeffs=5 TrailingOnes="3"
输出序列:无
2. 解析拖尾系数
由第一步得到拖尾系数有 3 个,输入拖尾系数符号编码码流 011 ,得到两个拖尾系数由先到后是 1 , -1 , -1
输出序列: 1 , -1 , -1
3. 解析除拖尾系数外的非零系数的幅值( level )
(1) 确定后缀长度 SuffixLength
(2) 根据码流查表 9-6 得到前缀 LevelPrefix
(3) 根据前缀和后缀,得到 LevelCode=(levelprefix<<suffixlength)+levelsuffix
(4) Levelcode 为偶数 level=(level+2)/2
Levelcode 为奇数 level=(-level-1)/2
(5) 根据设定的阈值确定是否 update Suffixlegth
回到例子中,按照逆序
i=0,Sufixlegth=0, 查表 9-6 , 1 对应的前缀 levelprefix=0 , levelcode=0, 计算得到 level=1,i++
i=1,sufixlegth=1, 查表 0010 对应的前缀 levelprefix=2, 计算 levelcode=4 , level=3,i++
i=2>=TotalCoeffs-TrailingOnes, 除拖尾系数外的非零系数解析完毕
输出序列: 3 , 1 , 1 , -1 , -1
4. 解析每个非零系数前零的个数
根据 TotalCoeffs=5 和输入码流 111 查表 9-7 得到 TotalZeros=3
初始 i=TotalCoeffs-1=4,zeroleft=TotalZeros=3,5 个非零系数前零的数目解析如下:
i=4,zeroleft=3, 根据码流 10 查表 9-10,runbefor=1, 输出序列: 3 , 1 , 1 , -1 , 0 , -1
i=3,zeroleft=3-1=2, 根据码流 1 查表 runbefore=0 ,输出序列: 3 , 1 , 1 , -1 , 0 , -1
i=2,zeroleft=2-0=2, 根据码流 1 查表 runbefore=0 ,输出序列: 3 , 1 , 1 , -1 , 0 , -1
i=1,zeroleft=2-0=2, 根据码流 01 查表 runbefore=1 ,输出序列: 3 , 0 , 1 , 1 , -1 , 0 , -1
i=0,zeroleft=2-1=1 ,输出序列: 0 , 3 , 0 , 1 , 1 , -1 , 0 , -1
5. 解码完毕,将剩下的元素用 0 补齐,反序排列就可以得到 4*4 矩阵。