分类: LINUX
2011-12-06 14:35:23
实例解析
{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<
(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矩阵。