你的位置:首页 > 信息动态 > 新闻中心
信息动态
联系我们

给定字符概率的算术编码(matlab)

2021/12/15 9:06:58

clear all
format long
symbol='abcd';
pr=[0.1 0.4 0.2 0.3];
seqin='cadacdb';
codeword=arenc(symbol,pr,seqin);
seqout=ardec(symbol,pr,codeword,7);

function symseq=ardec(symbol,pr,codeword,symlen)
%给定字符概率的算术编码
%输出:symse:字符串
%输入:symbol:由字符串组成的行向量
%pr:字符出现的概率
%codeword:码字
%symlen:待解码的字符串长度
format long
high_range=[];
for k=1:length(pr)
    high_range=[high_range sum(pr(1:k))];
end
low_range = [0 high_range(1:length(pr)-1)];
prmin=min(pr);
symseq=[];
for i=1:symlen;
    idx=find(low_range<=codeword, 1, 'last' );
    codeword=codeword-low_range(idx);
    if abs(codeword-pr(idx))<0.01*prmin
        idx=idx+1;
        codeword=0;
    end
    symseq=[symseq symbol(idx)];
    codeword=codeword/pr(idx);
if abs(codeword)<0.01*prmin
i=symlen+1;
    end
end