• 大小: 977B
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-11
  • 语言: Matlab
  • 标签: Matlab  算术编码  

资源简介

######Matlab实现算术编码,代码功能:输入一个字符串,输出编码和编码所需位数################

资源截图

代码片段和文件信息

clearclc;
format long g;

str1_1=[‘DIGITAL AUDIO TECHNOLOGY AND APPLICATION‘];
str1_2=[‘DIGITAL AUDIO TEC‘];
str1_3=[‘AILAILBABA‘];
str1=str1_3;

%字符

b=unique(str1);

%统计字符个数
for i=1:length(b)
    a(i)=length(strfind(str1b(i)));
end

%排序
for i=1:length(a)-1
    for j=i+1:length(a)
        if(a(i)            t1=a(i);
            a(i)=a(j);
            a(j)=t1;
            t2=b(i);
            b(i)=b(j);
            b(j)=t2;
        end
    end
end

%求概率
for i=1:length(a)
    frequency(i) = a(i)/sum(a);
end

%求范围 
low(1)=0;
for i = 1:length(frequency)
    if i==1
        high(i)=frequency(i);
    else
        low(i)=frequency(i-1)+low(i-1);
        high(i)=low(i)+frequency(i);
    end
end

%编码
low_value=0; %初始化
high_value=1; %初始化
range=high_value-low_value; %初始化
for i = 1:length(str1) %遍历字符串中的每一个元素,使用for循环语句。
    
     d=strfind(bstr1(i)); %找到字符串中的字符,在数组d中的角标
     
     %算术编码
     high_value = low_value+ range*high(d);
     low_value = low_value+range*low(d);
     range=high_value-low_value;
     
     %编码后数据处理
     if i==length(str1)
         ave=(high_value+low_value)/2;
         ave_str=num2str(avelength(str1)); %把数字转成字符串
         low_value_str=num2str(low_valuelength(str1)); %把数字转成字符串
         high_value_str=num2str(high_valuelength(str1)); %把数字转成字符串
         
         %当ave_str与low_value_str对应位的元素不一样时
         %截去ave_str不一样元素后面的字符
         for ii= 3: length(low_value_str)
             if low_value_str(ii) ~= high_value_str(ii)
                  ave_str((ii+1):end)=[];
                  break;
             end
             ii=ii+1;           
         end
     end
end

%把ave_str值赋给codeword
codeword=ave_str
%计算codeword占用的位数
bits=-log2(range)

%编码后的高低范围
 high_value
 low_value
 %ave
   
% range
% b  字符
% a  出现的次数
% frequency  出现的频率
% low 低位值
% high 高位值

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       2051  2018-11-16 14:56  overflow.m

----------- ---------  ---------- -----  ----

                 2051                    1


评论

共有 条评论