%用迭代法计算信道容量;
%inputp最佳输入分布(不唯一);
%k迭代步数;
%c2信道容量;
function [c2 inputp k]=C(P,eps)
if nargin~=2
eps=1e-10;
end
[r,s]=size(P);
back=[];%后验概率矩阵;
inputp=ones(r,1)/r;%初始化输入概率分布;
c1=1;%信道容量初始化;
%..........................................................................
for k=0:1000
for i=1:r
for j=1:s
lamda=sum(inputp.*P(:,j));
back(j,i)=inputp(i)*P(i,j)/lamda;
end
end
s3=[];
for i=1:r
s2=[];
for j=1:s
if back(j,i)~=0
s2=[s2 (P(i,j)*(log(back(j,i))))];
end
end
s3=[s3 exp(sum(s2))];
end
inputp(1:r)=s3/sum(s3);
c2=log(sum(s3));
c2=c2*log2(exp(1));
if abs(c2-c1)/c2>eps
c1=c2;
else
return;
end
end
- 1
- 2
前往页