实验二 一般信道容量迭代算法
1. 实验目的
掌握一般离散信道的迭代运算方法。
2. 实验要求
1) 理解和掌握信道容量的概念和物理意义
2) 理解一般离散信道容量的迭代算法
3) 采用Matlab 编程实现迭代算法
4) 认真填写试验报告
3.算法步骤
①初始化信源分布),,,,,(21)0(p p p p P r
i ????=(一般初始化为均匀分布) ,置迭代计数器k=0 ,设信道容量相对误差门限为δ ,δ>0 ,可设-∞=C )0(; ②∑=i k i ij k i ij k ji p p p p )()
()
(? s j r i ,??=??=,1;,,1 ③∑∑∑??
????????????????????=+i k ji j ij k ji j ij k i p p p ??)()()1(ln exp ln exp r i ,,1??= ④??
??????????????=∑∑+i
k ji j ij k p C ?)()1(ln exp ln ⑤如果δ≤-++C C C
k k k )1()()1( ,转向⑦; ⑥置迭代序号k k →+1,转向②; ⑦输出p k i )
1(+和C k )(1+的结果;
⑧停止。
4.代码P=input('转移概率矩阵P=')
e=input('迭代精度e=')
[r,s]=size(P);
n=0;
C=0;
C_k=0;
C_k1=0;
X=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);
if P(i,j)==0
B(i,j)=0;
else
end
end
A(1,i)=exp(P(i,:)*B(i,:)');
end
C_k=log2(X*A');
C_k1=log2(max(A));
if (abs(C_0-C_1) fprintf('信道容量:C=\n',C) disp('最佳分布P(x)=');disp(X); break; else %不满足则继续迭代 X=(X.*A)/(X*A'); continue; end end 5.计算下列信道的信道容量 例一: 0.980.02 0.050.95?????? P = 0.9800 0.0200 0.0500 0.950 e = 1.0000e-005 迭代次数: n=5 信道容量: C=0.785847比特/符号最佳分布P(x)= 0.5129 0.4871 例二: 0.60.4 0.010.99?????? P = 0.6000 0.4000 0.0100 0.9900 e = 1.0000e-005 迭代次数: n=17 信道容量: C=0.368768比特/符号最佳分布P(x)= 0.4238 0.5762 例三: 0.790.160.05 0.050.150.8?????? P = 0.7900 0.1600 0.0500 0.0500 0.1500 0.8000 e =1.0000e-005 迭代次数: n=6 信道容量: C=0.571215比特/符号 最佳分布P(x)= 0.5009 0.4991 .思考题: 迭代精度指的是什么?它对计算结果的影响? 迭代精度小数点的位数与迭代次数相同,迭代精度越小,信道容量越大。