- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
附页
PAGE
PAGE 3
实验名称:算术编码
一、实验目的
(1) 进一步熟悉算术编码过程。
(2) 掌握高级语言程序的设计和调试技术。
二、实验设备
计算机及相关软件(如C,C++,PASCAL,VC,DELPHI等等)。
三、实验要求
(1) 输入:对于一个二元无记忆信源,输入一个二元序列
(2) 输出:这个二元序列对应的算术编码的码字。
四、算法:
算术编码不同于Huffman码,它是非分组码。它从全序列出发,考虑符号之间的依赖关系来进行编码的。
其编码规则如下
(1)计算信源符号的累积概率
(2)初始时设,,(代表空集)
(3)计算序列的累积概率和序列的概率
(4)计算码长
(5)将写成二进制数的形式,取其前位作为序列的码字,若后面有尾数就进位到第位
五、实验报告
(1)实验原理(用流程图表示)。
(2) 程序代码和结果图。
#include stdio.h
#includemath.h
float up (float m);
main()
{float F=0,Ap,A=1,l1;
int j,l,i,F1,s[8]={1,1,1,1,1,1,0,0},p[100];
for (i=0;i8;i++)
{if(s[i])
{Ap=A*pow(2,-2);
F=F+Ap;
A=A-Ap;}
else
{A=A*pow(2,-2);}}
l1=log(1.0/A)/log(2);
l=up(l1);
for (i=0;i100;i++)
{F1=(int)(F*2);p[i]=F1;
F=2*F-F1;}
for (i=l;i100;i++)
{if( p[i]==1)
{p[l-1]++;
for(j=l-1;j=0;j--){if(p[j]1)
{p[j]=0;p[j-1]++;}}break;}}
for(i=0;i8;i++)
{printf ( %d,s[i]);}
printf(\n算术编码后得到s的码字为:);
for(i=0;il;i++)
{printf ( %d,p[i]);}
printf(\n);}
float up(float m)
{const float c=0.99999;m=m+c;
return floor(m);
}
运行结果:
实验总结:
实验过程中要从全序列出发,考虑符号之间的依赖关系来进行编码,其中要
计算信源符号序列的累积分布函数和概率,还要计算码长并将符号序列的累积分布函数写成二进位的小数,在这过程中稍一粗心就出错误了,特别是在将符号序列的累积分布函数写成二进位的小数时老出错,最后终于顺利完成.这次实验我进一步熟悉了算术编码的过程,对算术编码的算法有了更深刻的理解,而且还掌握高级语言程序的设计和调试技术。本次实验叙述了算术编码的基本方法,在实用中还需要考虑计算精度问题,存储量问题和近似值的选择问题。这是信息论的最后一次实验了,实验结束之后我最大的感想就是原来信息论并不是我们所想象的那样特别特别难,只要多看看书勤动手,了、就能将理论上所学的知识正确地应用到实际中。
原创力文档


文档评论(0)