close all;
symbol=input('输入字符串r=');
pro=input('输入字符串p=');
symin=input('输入字符串s=');
%输入码字序列以及信源符号集和相应概率分布;
width=1;
plow=0;
phigh=0;
dec=0;
u=[];%为信源序列预留一维数组空间;
i=1;
temp=0;
pp=1;
N=length(symin);
for n=1:N;
dec=dec+symin(n)*2^(-n);
end
%将二进制码字序列化为十进制;
K=length(symbol);
M=length(pro);
f=zeros(1,M); %为分布函数;
for k=1:M
if(k==1)
f(k)=0;
else
f(k)=sum(pro(1:k-1));
end
end
p=0;
for m=1:M
p=pro(m)+p;
end
if((K~=M)||(p~=1)) %判断输入的信源符号集的个数和其概率分布是否合法;
disp('error!');
return;
end
while(temp==0)
for j=1:K
plow=plow+width*f(j);
phigh=plow+width*pro(j);
dis=dec-phigh;
if(dis<0)
u(i)=symbol(j);
i=i+1;
width=width*pro(j);
pp=pp*pro(j);
break;
else
plow=plow-width*f(j);
end
end
if(2^(-N)>=pp)
temp=1;
end
end
%译码
disp('译码输出字符串为:'); disp(u) %输出译码结果
评论0