⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 shannon.m

📁 shannon编码
💻 M
字号:
clear
global a;
  N=input('请输入信源符号个数:')
  pp=zeros(N);
  for i=1:N
      pp(i)=input('请由大到小依次输入各信源符号出现概率:');
  end
  y=zeros(N,15);
   for i=1:N
      y(i,1)=pp(i);  % y的第一列是各符号出现的概率
      y(1,2)=0;
      if i>1
          y(i,2)=y(i-1,2)+y(i-1,1) ;        % y的第二列是累加概率
      end
          k(i)=log2(1/pp(i));
       y(i,3)=k(i);                      %% y的第三列是各符号对应的累加概率的以2为底的对数
       y(i,4)=ceil(k(i));              % y的第四列是各符号编码的长度
  end
  sump=0;
%***************************
  for i=1:N
    if i>1
      y(i,5:15)=xiaoshuto2(y(i,2));     %便于列表显示
    end
end
%************************************
%化成小数的另一种算法,并直接编码
for i=1:N
data(i).Code='';     %各符号的编码结果 %code(i)='';
end
midy(:,1)=y(1:N,2);
for i=1:N
    
    for j=1:y(i,4)
     midy(i,j+1)=floor(midy(i,1)*2);   %二进制转换乘二取整
     if midy(i,j+1)==0
        data(i).Code=strcat(data(i).Code,'0');  %code(i) = strcat('0',code(i)); 
    else
        data(i).Code=strcat(data(i).Code,'1');%        code(i) = strcat('1',code(i)); 
    end
    midy(i,1)=midy(i,1)*2-floor(midy(i,1)*2);
    end
end


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -