📄 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 + -