利用Matlab实现算术编解码过程,程序如下:
clc,clear all;
symbol=[\'abc\'];
pr=[0.4 0.4 0.2]; %各字符出现的概率
temp=[0.0 0.4 0.8 1.0];
orignal=temp;
in=input(\'input a string of abc:\');
n=length(in);
%编码
for i=1:n
width=temp(4)-temp(1);
w=temp(1);
switch in(i)
case \'a\'
m=1;
case \'b\'
m=2;
case \'c\'
m=3;
otherwise
error(\'do not input other character\');
end
temp(1)=w+orignal(m)*width;
temp(4)=w+orignal(m+1)*width;
left=temp(1);
right=temp(4);
fprintf(\'left=%.6f\',left);
fprintf(\' \');
fprintf(\'right=%.6f\n\',right);
end
encode=(temp(1)+temp(4))/2
%解码
decode=[\'0\'];
for i=1:n
fprintf(\'tmp=%.6f\n\',encode);
if(encode>=orignal(1)& encode<orignal(2))
decode(i)=\'a\';
t=1;
elseif(encode>=orignal(2)& encode<orignal(3))
decode(i)=\'b\';
t=2;
else
decode(i)=\'c\';
t=3;
end
encode=(encode-orignal(t));
encode=encode/pr(t);
end
decode
结果:
版权声明:本文为博主原创文章,未经博主允许不得转载。