欢迎来到天天文库
浏览记录
ID:56778937
大小:34.50 KB
页数:4页
时间:2020-07-09
《算数编码实验.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、实验一:算数编码实验一、实验目的掌握算数编码原理。二、实验内容利用Matlab编写程序实现算数编码,包括:1、对文件符号进行概率统计,生成编码表;2、对文件进行压缩编码;3、(选做)对文件进行解压缩,比较原始数据和解压后的数据之间是否有损耗。三、实验仪器1、计算机一台;2、Matlab仿真软件。四、实验原理算术编码的编码对象是一则消息或一个字符序列,其编码思路是将该消息或字符序列表示成0和1之间的一个间隔(Interval)上的一个浮点小数。在进行算术编码之前,需要对字符序列中每个字符的出现概率进行统计,根据各字符出现概率的大小,将每个字符
2、映射到[0,1]区间上的某个子区间中。然后,再利用递归算法,将整个字符序列映射到[0,1]区间上的某个Interval中。在进行编码时,只需从该Interval中任选一个小数,将其转化为二进制数。符号序列越长,编码表示它的Interval的间隔就越小,表示这一间隔所需的二进制位数就越多,编码输出的码字就越长。五、实验结果算数编码的MATLAB程序运行结果如下:请输入编码的字符串'state_tree'_aerst0.10.10.30.30.10.1输入第1符号的间隔左右边界:0.800000000000000.90000000000000输
3、入第2符号的间隔左右边界:0.890000000000000.90000000000000输入第3符号的间隔左右边界:0.891000000000000.89200000000000输入第4符号的间隔左右边界:0.891900000000000.89200000000000输入第5符号的间隔左右边界:0.891920000000000.89195000000000输入第6符号的间隔左右边界:0.891920000000000.89192300000000输入第7符号的间隔左右边界:0.891922700000000.891923000000
4、00输入第8符号的间隔左右边界:0.891922850000000.89192294000000输入第9符号的间隔左右边界:0.891922868000000.89192289500000输入第10符号的间隔左右边界:0.891922873400000.89192288150000算术编码程序代码如下:str=input('请输入编码的字符串');l=0;r=1;d=1;%初始间隔p=[0.10.10.30.30.10.1];%字符的概率分布,sum(p)=1n=length(str);disp('_aerst')disp(num2str(
5、p))fori=1:nswitchstr(i)case'_'m=1;case'a'm=2;case'e'm=3;case'r'm=4;case's'm=5;case't'm=6;otherwiseerror('请不要输入其它字符!');end%判断字符pl=0;pr=0;forj=1:m-1pl=pl+p(j);endforj=1:mpr=pr+p(j);end%概率统计l=l+d*pl;r=l+d*(pr-pl);strl=strcat('输入第',int2str(i),'符号的间隔左右边界:');disp(strl);formatlon
6、gdisp(l);disp(r);d=r-l;endl=l+d*pl;r=l+d*(pr-pl);str1=strcat('输入第',int2str(i),'符号的间隔左右边界:');disp(strl);formatlongdisp(l);disp(r);d=r-1;end六、实验结果分析通过本次实验,我了解了算数编码的原理和实现方法,算术编码用到两个基本的参数:符号的概率和它的编码间隔。信源符号的概率决定压缩编码的效率,也决定编码过程中信源符号的间隔,而这些间隔包含在0到1之间。对信源进行算数编码需要两个过程,第一个过程立信源概率表,第
7、二个过程信源发出的符号序列进行扫描编码。总结出用matlab编程时需要注意的两点:第一、在计算编写初始间隔的时候需要把字母按字母表的顺序排列。第二、在运行后,输入字符串时需要输入以下格式’state_tree’才能成功运行。此外在计算信源概率的时候必须保重每个其正确性,否侧会影响到后面的编码。
此文档下载收益归作者所有