天天看點

matlab實作算術編解碼

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

結果:

matlab實作算術編解碼
matlab實作算術編解碼