当前位置:文档之家› 一般信道容量迭代算法

一般信道容量迭代算法

实验二一般信道容量迭代算法1.实验目的
一般离散信道容量的迭代运算
2.实验要求
(1)理解和掌握信道容量的概念和物理意义
(2)理解一般离散信道容量的迭代算法
(3)采用Matlab编程实现迭代算法
(4)认真填写实验报告。

3.算法
4.算法流程图
5.代码(要求写出关键语句的解释和运行结果)
6.计算下列信道的信道容量
例一:
0.980.02 0.050.95⎡⎤⎢⎥⎣⎦
例二:
0.60.4 0.010.99⎡⎤⎢⎥⎣⎦
例三:
0.790.160.05 0.050.150.8⎡⎤⎢⎥⎣⎦
7.思考题:
迭代精度指的是什么?它对计算结果的影响?
3.实验的算法:
1. 初始化信源分布:p i =r
1
,循环变量k=1,门限△,C (0)=-∞;
2. ∑==
r
i ji
k i
ji
k i k ij
p p
p p 1
)()()(φ
3. ∑∑∑===+=
r
i s
j k ij
ji
s
j k ij ji k i
p
p p 1
1)(1
)
()
1(]
log exp[]
log exp[φ
φ
4. ])log exp(log[1
1
)
()
1(∑∑==+=r i s
j k ij ji k p C
φ
5. 若
∆>-++)
1()
()1(k k k C
C C ,则k=k+1,转第2步
6. 输出P *=()()
r k i P 1+和()1+k C ,终止。

4.算法流程图如下:
5.代码如下:


()()⎪
⎭⎫
⎝⎛=+=+⎥⎥⎥⎦⎤
⎢⎢⎢⎣⎡=∑∑∑i i i
i i j i i j i i j i j i a n n C a x p n n C x y p x p x y p x y p a max ln ,1)(ln ,1)/()()/(ln
)/(exp 21 ()()ε
<+-+n n C n n C ,1,121()n n C C ,11+= ∑=
i
i
i i i i a x p a x p x p )()()(
输入
)()()0(i i x p x p = 结束
源程序:
clc;clear all;
N = input('输入信源符号X的个数N=');
M = input('输出信源符号Y的个数M=');
p_yx=zeros(N,M); %程序设计需要信道矩阵初始化为零
fprintf('输入信道矩阵概率\n')
for i=1:N
for j=1:M
p_yx(i,j)=input('p_yx=');%输入信道矩阵概率
if p_yx(i)<0
error('不符合概率分布')
end
end
end
for i=1:N %各行概率累加求和
s(i)=0;
for j=1:M
s(i)=s(i)+p_yx(i,j);
end
end
for i=1:N %判断是否符合概率分布
if (s(i)<=0.999999||s(i)>=1.000001) error('不符合概率分布')
end
end
b=input('输入迭代精度:');%输入迭代精度
for i=1:N
p(i)=1.0/N; %取初始概率为均匀分布
end
for j=1:M %计算q(j)
q(j)=0;
for i=1:N
q(j)=q(j)+p(i)*p_yx(i,j);
end
end
for i=1:N %计算a(i)
d(i)=0;
for j=1:M
if(p_yx(i,j)==0)
d(i)=d(i)+0;
else
d(i)=d(i)+p_yx(i,j)*log(p_yx(i,j)/q(j));
end
end
a(i)=exp(d(i));
end
u=0;
for i=1:N %计算u
u=u+p(i)*a(i);
end
IL=log2(u); %计算IL
IU=log2(max(a));%计算IU
n=1;
while((IU-IL)>=b) %迭代计算
for i=1:N
p(i)=p(i)*a(i)/u; %重新赋值p(i)
end
for j=1:M %计算q(j)
q(j)=0;
for i=1:N
q(j)=q(j)+p(i)*p_yx(i,j);
end
end
for i=1:N %计算a(i)
d(i)=0;
for j=1:M
if(p_yx(i,j)==0)
d(i)=d(i)+0;
else
d(i)=d(i)+p_yx(i,j)*log(p_yx(i,j)/q(j));
end
end
a(i)=exp(d(i));
end
u=0;
for i=1:N %计算u
u=u+p(i)*a(i);
end
IL=log2(u); %计算IL
IU=log2(max(a));%计算IU
n=n+1;
end
fprintf('信道矩阵为:\n');
disp(p_yx);
fprintf('迭代次数n=%d\n',n);
fprintf('信道容量C=%f比特/符号',IL);
例一的运行结果:
输入信源符号X的个数N=2
输出信源符号Y的个数M=2 输入信道矩阵概率
p_yx=0.98
p_yx=0.02
p_yx=0.05
p_yx=0.95
输入迭代精度:0.006
信道矩阵为:
0.9800 0.0200
0.0500 0.9500
迭代次数n=2
信道容量C=0.785846比特/符号
6.计算下列信道的信道容量
例一:
0.980.02 0.050.95⎡⎤⎢⎥⎣⎦
信道容量:C=0.785846(bit/符号)
例二:
0.60.4 0.010.99⎡⎤⎢⎥⎣⎦
信道容量:C=0.368754(bit/符号)
例三:
0.790.160.05 0.050.150.8⎡⎤⎢⎥⎣⎦
信道容量C=0.571214(bit/符号)。

相关主题