实验二 一般信道容量迭代算法
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)<e) C=C_0; %检验是否满足迭代精度 fprintf('迭代次数n=\n',n)%满足则输出相关的被求量
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
.思考题:
迭代精度指的是什么?它对计算结果的影响?
迭代精度小数点的位数与迭代次数相同,迭代精度越小,信道容量越大。