• 沒有找到結果。

系数的幅值;符号A中的SIZE则给出了用于编码表示MPLITUDE所需的比

在文檔中 研究生学位论文 (頁 64-67)

特数。在形成符号序列时,通常情况下,一个符号A后面紧跟着一个符号B;

但由于RUNLENGTH只用于表示0~15之间的零游程,而Zig--Zag序列中 实际的零游程可能大于15,为此,JPEG采用值为(15,O)这样的符号A来表

西南交通大学硕士研究生学位论文 第62页 示RuNLENGTH=16,在一个符号A前面可以连续存在3个(15,0)这样的 扩展符号,其后的符号A后面紧跟着一个符号B。若最后的零游程包括块尾 的AC系数(即第63个AC系数),此种情况下,采用值为(0,o)的符号A来 表示块结束(EOB)。这样,每个8×8子块Zig--Zag序列中的63个系数就转 换成符号对A,B的序列;在零游程较长的情况下,符号A会连续出现在序 列中;在EOB情况下,则只出现符号A。

对于基本系统,量化后AC系数的动态范围为[_-2”,210—l】,因此,SIZE 的取值为O~10之间的整数,可用4位二进制数表示。实际操作时,JPEG 用一个复合的8比特值RS=二进制“RRRRSSSS”来表示符号A。对于一个 特定的非零AC系数,“RRRRSSSS”中的低4位“SSSS”用于表示SIZE,

高4位“RRRR”则用于表示RUNLENGTH。若Zig--Zag序列中最后部分全 为零,则使用EOB来标识块结束。如表5-6所示为符号A的组成结构,其 中RS=“11110000”表示RUNLENGTH=16,RS=“00000000”表示EOB,

N/A为未定义项。

表5_6用于^c系数编码的符号A的组成 ssss(sizE)

O 1 2 … 9 10

O EOB

RRRR

N,A

l塔

(RUNLENGTH)

N|入 (RUNLENGTH,SIZE)

N,A 15 ZRL

JPEG根据霍夫曼码表5.7对符号A进行相应的变字长编码,对符号B 则根据表5-5进行变字长整数(VLI)编码,而后将符号B的VLI码附加在符号 A的霍夫曼码后,从而形成符号对A,B的最终编码结果。

表5-7亮度Ac系数霍夫曼码表

RUNLENGTH/SIZE

码长 码字

0/0(EOB)

1010

0/1 2 00

O/2 2 01

鼬k 16 1111111110000011

l/l

l100

1/2 5 llOll

l/A 16 1111111110001000

2/1 5 1llOO

霍夫曼编码的实现

在霍夫曼编码之前,DCT系数已经经过DPCM编码与RLc编码,其输 出的数据流为13位。其中最高位是DC系数标志位。由于针对DC系数与 AC系数的霍夫曼编码有所不同,所以首先要对数据流中每个数据的最高位 进行判断,以区分是DC系数还是AC系数。

DC系数与AC系数的霍夫曼编码相同之处在于两者都要计算 AMPLITUDE的字长(SIZE)与VLI码;不同之处在于AC系数在其符号描述 中,符号A的描述比DC系数的符号A多出一项RUNLENGTH,并且AC 系数与DC系数的霍夫曼码表不同。因此,在查霍夫曼码表之前,针对AC 系数与DC系数的字长与VLI码的计算可由相同模块完成。

字长计算采用优先级算法,即从系数最高位n开始判断,若最高位为l 则字长为n;若不为l,则判断次高位,若次高位为l,则字长为n—l:如此 从最高位开始逐位判断,直道遇到不为l的位(设为m位,n≥m)为止,得到 字长为m。

有了字长之后的DC系数即可查表5_4得到相应的亮度DC差分霍夫曼 码;有了字长之后的AC系数再结合游程长度之后即可查表5—7得到相应的 AC系数霍夫曼码:对于表5-4与5.7中的内容,可以将它们分别存入两个片 内tom中,然后再以字长(SIZE)或游程长度/字长(RUNLENGTH/SIZE)为读取 地址,从tom中读出的数据即为相应的霍夫曼码。由于霍夫曼码的长度是不 固定的,所以选择tom的位宽时要以最长的霍夫曼码的宽度再加上表示码长 需要的长度为一个基本存储单元的位宽。在用表5-4与5.7中的内容对l'om 进行初始化时,霍夫曼码要从最高位起开始存储,后面没有存满的位用0补 齐。表5.4的内容存储在DCrom中,表5.7的内容存储在ACrom中。

对于从DCrom与ACrom中读出的数据,好要根据对应的码长进行截断,

即码长是几,就将读出数据从最高位开始取出几位进行缓存,等待着与 AMPLITUDE的VLI码相结合。

西南交通大学硕士研究生学位论文

第64页

在文檔中 研究生学位论文 (頁 64-67)

相關文件