ardecode.m
上传用户:hwtw888
上传日期:2016-03-15
资源大小:177k
文件大小:1k
源码类别:

压缩解压

开发平台:

Matlab

  1. function symseq = ardecode(symbol, pr, codeword, symlen)
  2. %给定字符概率的算术编码
  3. %输出:symse:字符串
  4. %输入:symbol:由字符组成的行向量
  5. %      pr:字符出现的概率
  6. %      codeword:码字
  7. %      symlen:待解码字符串长度
  8. format long
  9. high_range = [];
  10. for k = 1 : length(pr),
  11.     high_range = [high_range sum(pr(1 : k))];
  12. end
  13. low_range = [0 high_range(1 : length(pr) - 1)];
  14. prmin = min(pr);
  15. symseq = [];
  16. symseq = [];
  17. for i = 1 : symlen,
  18.     index = max(find(low_range <= codeword));
  19.     codeword = codeword - low_range(index);
  20.     
  21.     %duo to numerical error, sometimes the encoded number
  22.     %will be slightly smaller than the current lower bound.
  23.     %If this happens, a correction is required.
  24.     if abs(codeword - pr(index)) < 0.01 * prmin,
  25.         index = index + 1;
  26.         codeword = 0;
  27.     end
  28.     symseq = [symseq symbol(index)];
  29.     codeword = codeword/pr(index);
  30.     if abs(codeword) < 0.01 * prmin,
  31.         i = symlen + 1;        %break the for loop immediately
  32.     end
  33. end