算数编码实验.pdf
实验一:算数编码实验实验一:算数编码实验一、实验目的一、实验目的掌握算数编码原理。二、实验内容二、实验内容利用 Matlab 编写程序实现算数编码,包括:1、对文件符号进行概率统计,生成编码表;2、对文件进行压缩编码;3、(选做)对文件进行解压缩,比较原始数据和解压后的数据之间是否有损耗。三、实验仪器三、实验仪器1、计算机一台;2、Matlab 仿真软件。四、实验原理四、实验原理算术编码的编码对象是一则消息或一个字符序列,其编码思路是将该消息或字符序列表示成 0 和 1 之间的一个间隔(Interval)上的一个浮点小数。在进行算术编码之前,需要对字符序列中每个字符的出现概率进行统计,根据各字符出现概率的大小,将每个字符映射到0,1区间上的某个子区间中。然后,再利用递归算法,将整个字符序列映射到0,1区间上的某个 Interval 中。在进行编码时,只需从该 Interval 中任选一个小数,将其转化为二进制数。符号序列越长,编码表示它的Interval 的间隔就越小,表示这一间隔所需的二进制位数就越多,编码输出的码字就越长。五、实验结果五、实验结果算数编码的算数编码的 MATLABMATLAB 程序运行结果如下:程序运行结果如下:请输入编码的字符串state_tree_ a e r s t输入第 1 符号的间隔左右边界:输入第 2 符号的间隔左右边界:输入第 3 符号的间隔左右边界:输入第 4 符号的间隔左右边界:输入第 5 符号的间隔左右边界:输入第 6 符号的间隔左右边界:输入第 7 符号的间隔左右边界:输入第 8 符号的间隔左右边界:输入第 9 符号的间隔左右边界:输入第 10 符号的间隔左右边界:算术编码程序代码如下:算术编码程序代码如下:str=input(请输入编码的字符串);l=0;r=1;d=1;%初始间隔p=;%字符的概率分布,sum(p)=1n=length(str);disp(_ a e r s t)disp(num2str(p)for i=1:nswitch str(i)case _m=1;case am=2;case em=3;case rm=4;case sm=5;case tm=6;otherwiseerror(请不要输入其它字符!);end%判断字符pl=0;pr=0;for j=1:m-1pl=pl+p(j);endfor j=1:mpr=pr+p(j);end%概率统计l=l+d*pl;r=l+d*(pr-pl);strl=strcat(输入第,int2str(i),符号的间隔左右边界:);disp(strl);format longdisp(l);disp(r);d=r-l;endl=l+d*pl;r=l+d*(pr-pl);str1=strcat(输入第,int2str(i),符号的间隔左右边界:);disp(strl);format longdisp(l);disp(r);d=r-1;end六、实验结果分析六、实验结果分析通过本次实验,我了解了算数编码的原理和实现方法,算术编码用到两个基本的参数:符号的概率和它的编码间隔。信源符号的概率决定压缩编码的效率,也决定编码过程中信源符号的间隔,而这些间隔包含在 0 到 1 之间。对信源进行算数编码需要两个过程,第一个过程立信源概率表,第二个过程信源发出的符号序列进行扫描编码。总结出用 matlab 编程时需要注意的两点:第一、在计算编写初始间隔的时候需要把字母按字母表的顺序排列。第二、在运行后,输入字符串时需要输入以下格式state_tree才能成功运行。此外在计算信源概率的时候必须保重每个其正确性,否侧会影响到后面的编码。