利用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

结果:

版权声明:本文为博主原创文章,未经博主允许不得转载。

版权声明:本文为luo-peng原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/luo-peng/p/4646265.html