1、代码:function main()clc; p=1/2 1/4 0 1/40 1 0 00 0 1 01/4 0 1/4 1/2;channel_cap(p,0.001)% Matlab实现离散信道容量的迭代算法% 功能:利用迭代算法计算离散信道的容量%参数解释%C:信道容量%P:转移概率矩阵%B:中间变量矩阵%e:信道容限%X:输入概率分布%n:迭代次数function channel_cap(P, e)n=0;C=0;C_0=0;C_1=0;r,s=size(P);for i=1:r if(sum(P(i,:)=1)%检测概率转移矩阵是否行和为 1. error(概率转移矩阵输入有误!)
2、 return; end for j=1:s if(P(i,j)1)%检测概率转移矩阵是否负值或大于1 error(概率转移矩阵输入有误!) return; end end endX=ones(1,r)/r;A=zeros(1,r);B=zeros(r,s);while(1) n=n+1; for i=1:r for j=1:s B(i,j)=log(P(i,j)/(X*P(:,j)+eps); end A(1,i)=exp(P(i,:)*B(i,:); end C_0=log2(X*A); C_1=log2(max(A); if (abs(C_0-C_1)e) %满足迭代终止条件停止迭代 C=C_0; fprintf(迭代次数: n=%dn,n) fprintf(信道容量: C=%f 比特/符号n,C) break; %满足后输出结果并退出 else X=(X.*A)/(X*A); continue; end end结果:迭代次数: n=6信道容量: C=1.321928 比特/符号