自适应算术编码的FPGA实现
自适应算术编码在一次扫描中可完成两个过程,即概率模型建立过来和扫描编码过程。
自适应算术编码在扫描符号序列前并不知道各符号的统计概率,这时假定每个符号的概率相等,并平均分配区间[0,1]。然后在扫描符号序列的过程中不断调整各个符号的概率。同样假定要编码的是一个来自四符号信源{A,B,C,D}的五个符号组成的符号序列:ABBCD。编码开始前首先将区间[0,1]等分为四个子区间,分别对应A,B,C,D四个符号。扫描符号序列,第一个符号是A,对应区间为[0,0.25],然后改变各个符号的统计概率,符号A的概率为2/5,符号B的概率为1/5,符号C的概率为1/5,符号D的概率为1/5,再将区间[0,0.25]等分为五份,A占两份,其余各占一份。接下来对第二个符号B进行编码,对应的区间为[0.1,0.15],再重复前面的概率调整和区间划分过程。具体的概率调整见表1。
表1自适应算术编码的概率调整
概率ABCD初始1/41/41/41/4传输A后2/51/51/51/5传输B后2/62/61/61/6传输B后2/73/71/71/7传输C后2/83/82/81/8传输D后2/93/92/92/9
随着符号序列中符号个数的不断增多,自由适应算术编码估计得到的各符号的概率将趋于各符号的真实概率。
3自适应算术编码的FPGA实现(第2页)[2]
3.1总体设计
在利用FPGA实现自适应算术编码的过程中,首先遇到的问题就是将浮点运算转化为定点运算,即将[0,1]区间的一个小数映射为一个便于硬件实现的定点数。考虑到硬件实现的简便性,本文中将[0,1]之间的浮点数与[0,256]之间的定点数对应。相应的对应关系如表2所示。
表2浮点与定点之间的关系
浮点00.20.50.71定点051128179256
编码器在实现编码的整个过程中按照耦合弱、聚合强的原则分为四个模块:修改码表、计算确定区间、并行编码、串行输出。四个模块相对独立,通过输入、输出信号使其构成一个整体。系统的顶层结构如图2所示。
3.2码表的设计及修改
自适应算术编码器可以在许多场合中得到应用。本文实现的自适应算术编码器应用在采用6符号对小波变换系数进行零树编码的小波域视频编码中[3],因此设计的码表中含有六个符号。这样根据自适应算术编码的基本原理,将区间分成六个子区间,整个区间含水量有七个分割点。所以码表可以用七个8位寄存器表示。初始时设定等概率,这时七个寄存器可以顺序地存储0到6这七个数,即每个子区间的数值为1。随着符号不断地输入,自适应地修改码表,并且在修改码表的过程中时刻要保持寄存器中的数值是递增的。
修改码表时,首先判断输入符号,确定其所在区间,同时为后续模块输出该子区间的两个端点值l_count和h_count以及码表的最后一个端点值scale,然后进行码表的修改:将当前符号所在区间之后的所有端点值都加1,即当前区间及后面所有子我间的h_count=h_count+1,这样即完成了码表的修改。在数值不断累加过程中,寄存器中的数值为255时,需要对每一个寄存器中的值都取半,并同时对相邻的两个寄存器中的值进行比较,时刻保持数值是递值的。这样,处理前后的概率十分接近,对压缩比影响不大。
修改码表模块在输出h_count、l_coun 《自适应算术编码的FPGA实现(第2页)》
本文链接地址:http://www.oyaya.net/fanwen/view/175104.html
自适应算术编码在扫描符号序列前并不知道各符号的统计概率,这时假定每个符号的概率相等,并平均分配区间[0,1]。然后在扫描符号序列的过程中不断调整各个符号的概率。同样假定要编码的是一个来自四符号信源{A,B,C,D}的五个符号组成的符号序列:ABBCD。编码开始前首先将区间[0,1]等分为四个子区间,分别对应A,B,C,D四个符号。扫描符号序列,第一个符号是A,对应区间为[0,0.25],然后改变各个符号的统计概率,符号A的概率为2/5,符号B的概率为1/5,符号C的概率为1/5,符号D的概率为1/5,再将区间[0,0.25]等分为五份,A占两份,其余各占一份。接下来对第二个符号B进行编码,对应的区间为[0.1,0.15],再重复前面的概率调整和区间划分过程。具体的概率调整见表1。
表1自适应算术编码的概率调整
概率ABCD初始1/41/41/41/4传输A后2/51/51/51/5传输B后2/62/61/61/6传输B后2/73/71/71/7传输C后2/83/82/81/8传输D后2/93/92/92/9
随着符号序列中符号个数的不断增多,自由适应算术编码估计得到的各符号的概率将趋于各符号的真实概率。
3自适应算术编码的FPGA实现(第2页)[2]
3.1总体设计
在利用FPGA实现自适应算术编码的过程中,首先遇到的问题就是将浮点运算转化为定点运算,即将[0,1]区间的一个小数映射为一个便于硬件实现的定点数。考虑到硬件实现的简便性,本文中将[0,1]之间的浮点数与[0,256]之间的定点数对应。相应的对应关系如表2所示。
表2浮点与定点之间的关系
浮点00.20.50.71定点051128179256
编码器在实现编码的整个过程中按照耦合弱、聚合强的原则分为四个模块:修改码表、计算确定区间、并行编码、串行输出。四个模块相对独立,通过输入、输出信号使其构成一个整体。系统的顶层结构如图2所示。
3.2码表的设计及修改
自适应算术编码器可以在许多场合中得到应用。本文实现的自适应算术编码器应用在采用6符号对小波变换系数进行零树编码的小波域视频编码中[3],因此设计的码表中含有六个符号。这样根据自适应算术编码的基本原理,将区间分成六个子区间,整个区间含水量有七个分割点。所以码表可以用七个8位寄存器表示。初始时设定等概率,这时七个寄存器可以顺序地存储0到6这七个数,即每个子区间的数值为1。随着符号不断地输入,自适应地修改码表,并且在修改码表的过程中时刻要保持寄存器中的数值是递增的。
修改码表时,首先判断输入符号,确定其所在区间,同时为后续模块输出该子区间的两个端点值l_count和h_count以及码表的最后一个端点值scale,然后进行码表的修改:将当前符号所在区间之后的所有端点值都加1,即当前区间及后面所有子我间的h_count=h_count+1,这样即完成了码表的修改。在数值不断累加过程中,寄存器中的数值为255时,需要对每一个寄存器中的值都取半,并同时对相邻的两个寄存器中的值进行比较,时刻保持数值是递值的。这样,处理前后的概率十分接近,对压缩比影响不大。
修改码表模块在输出h_count、l_coun 《自适应算术编码的FPGA实现(第2页)》