《信息论与编码》第三章——信道容量的计算
%@author Zhang
%@copyright Zhang
%@release 2021.06.16
%特殊离散信道
%具有一一对应关系的无噪信道
% P = [1,0,0;0,1,0;0,0,1];
% C = log2(size(P,1));
%具有扩展性能的无噪信道/有噪无损信道,当PX=1/n时
% P = [1/2 1/4 1/4 0 0 0 0 0 0;
% 0 0 0 1/2 1/4 1/4 0 0 0;
% 0 0 0 0 0 0 1/2 1/4 1/4];
% C = log2(size(P,1));
%具有归并性能的无噪信道,当PY=1/m时
% PYx = [1 0 0;
% 1 0 0;
% 0 1 0;
% 0 1 0;
% 0 0 1];
% C = log2(size(PYx,2));
%强对称离散信道的信道容量
% syms p n;
% p = 1/4;
% n = 5;
% P = [(1-p),(p/(n-1))*ones(1,n-1)];
% P_toeplitz = toeplitz(P);
% C = log2(n) + P*log2(P');
%对称离散信道的信道容量
%行可排列:每一行都有同一集合中诸元素的不同排列
%列可排列:每一列都有同一集合中诸元素的不同排列
%一般信道的信道容量求解
PBA = [1,eps;1/4,3/4];%题目已知信道转移矩阵
[n,m] = size(PBA);
deta = 0.000001;%误差门限
pa = ones(n,1)/n;%初始化信源分布,一般设为均匀分布
E = repmat(pa,1,m);
C(1) = 0.000001;
for k = 1:1:1/deta
L = E .* PBA;
a = sum(L);
su1 = repmat(a,n,1);
t = L./su1;%反向信道转移概率的第k次迭代值
H = exp(sum(PBA.*log(t),2));
su2 = sum(H);
pa = H/su2;%信源分布的第k次迭代值
E = repmat(pa,1,m);
C(k+1) = log2(su2);%信道容量的第k+1次迭代值
kk = abs(C(k+1)-C(k))/C(k+1);
if(kk <= deta)
break;
end
end
disp('迭代次数:k='),disp(k);
disp('最大信道容量时的信源分布:pa=');disp(pa');
disp('最大信道容量:C=');disp(C(k+1));