- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
自适应算术编码 自适应算术编码原理 算术编码有固定模式和自适应模式两种编码方法。 在自适应模式中,各个符号初始值设为相同值,它们依据出现的符号而相应的改变其概率值,若出现新的符号只需要在符号表中添加即可,只要编码器和译码器使用相同的初始值和相同的改变值得方法,那么它们的概率模型将保持一致。编码器接收到下一个符号对其编码,然后改变概率模型,解码器根据当前的模式译码,然后改变自己的概率模型。 编码举例 算术编码将整个要编码的数据映射到一个位于[0,1)的实数区间中。并且输出一个小于1同时大于0的小数来表示全部数据。利用这种方法算术编码可以让压缩率无限的接近数据的熵值,从而获得理论上的最高压缩率。 算术编码进行编码时,从实数区间[0,1)开始。按照符号的频度将当前的区间分割成多个子区间。根据当前输入的符号选择对应的子区间,然后从选择的子区间中继续进行下一轮的分割。不断的进行这个过程,直到所有符号编码完毕。对于最后选择的一个子区间,输出属于该区间的一个小数。这个小数就是所有数据的编码。现在来举个例子。假设一份数据由“A”、“B”、“C”三个符号组成。现在要编码数据“BCCB”,编码过程如图所示。 “BCCB”的编码过程 编码过程 由于是自适应模型,设三个符号的频度都是1。随着编码的进行再更新频度。另外,在计算时理论上要使用无限小数。这里为了说明方便,四舍五入到小数点后4位。 观察图可以发现算术编码的过程。首先,算术编码是从区间[0,1)开始的。这时三个符号的概率都是1?/?3,按照这个概率分割区间。第一个输入的符号是“B”,所以选择子区间[0.3333,0.6667)作为下一个区间。输入“B”后更新频度,根据新的概率对区间[0.3333,0.6667)进行分割。这时输入的符号是“C”,可以选择子区间[0.5834,0.6667)。继续更新频度、分割区间、选择子区间,直到符号全部编码完成。最后得到的区间是[0.6390,0.6501)。输出属于这个区间的一个小数,例如0.64。那么经过算术编码的压缩,数据“BCCB”最后输出的编码就是0.64。 解码过程 算术编码进行解码时仅输入一个小数。解码前首先需要对区间[0,1)按照初始时的符号频度进行分割。然后观察输入的小数位于那个子区间。输出对应的符号,选择对应的子区间,然后从选择的子区间中继续进行下一轮的分割。不断的进行这个过程,直到所有的符号都解码出来。整个过程相当于编码时的逆运算。 在本例中,输入的小数是0.64。首先,初始时三个符号的概率都是1?/?3,按照这个概率分割区间。观察图可以发现0.64落在子区间[0.3333,0.6667)中,于是可以解码出“B”。并且选择子区间[0.3333,0.6667)作为下一个区间。输出“B”后更新频度,根据新的概率对区间[0.3333,0.6667)进行分割。这时0.64落在子区间[0.5834,0.6667)中,于是可以解码出“C”。按照上述过程进行,直到所有的符号都解码出来。可见,只需要一个小数就可以完整还原出原来的所有数据。 自适应算术编码程序 在固定模式算术编码程序的基础上作一下调整即可得到自适应模式算术编码程序: 1.新建符号频度表,并在编码解码子函数中初始化各符号频度为1;将符号概率表各符号概率初始化为0.1。 2.在编码解码过程中,实时更新频度表、概率表。 源码见附录。 程序验证 结果分析 1.自适应算术编码根据符号的概率实时调整小数的位数。这使得算术编码平均码长比固定模式短,数据压缩率高,可以无限的接近数据的熵极限。信息熵越小符号串的算术编码平均码长越短。 2.由于实时更新频度及概率,所以自适应算术编码解码速度慢。 附录:自适应算术编码程序 /****************** 自适应模式算术编码 **********************/ #includemath.h #includestring.h #includestdio.h double proc[10]; //0-9概率 int cum[10]; //0-9频度 double result,areaBegin,areaEnd; int cord[1000],cordLength; char str[1000]; int strLength=0; //----------------------------------------------------------------------------- //readdat //----------------------------------------------------------------------------- bool readdat(){ printf(**
文档评论(0)