信道容量及其一般计算方法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一信道容量及其一般计算方法
1.实验目的
一般离散信道容量的迭代运算
2.实验要求
(1)理解和掌握信道容量的概念和物理意义
(2)理解一般离散信道容量的迭代算法
(3)采用Matlab编程实现迭代算法
(4)认真填写实验报告。
3.源代码
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 //若输出概率小于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) //若行相加小于等于0.9999999或者大于等于1.000001
Error //('不符合概率分布')
end
end
b=input('输入迭代精度:'); //输入迭代精度
for i=1:N
p(i)=1.0/N; //取初始概率为均匀分布(每行值分别为1/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); //均匀分布的值乘上矩阵值后+q(j),然后赋值给q(j)实现求和
end
end
for i=1:N //计算d(i)=∑p(yi|xi)ln[p(yi|xi)/∑p(xi)*p(yi|xi)] 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)); //公式如上,对d(i)求指数
end
u=0;
for i=1:N
u=u+p(i)*a(i); //对u的叠加求和
end
IL=log2(u); //计算IL(信道容量C1=log2∑p(xi)*a(i))IU=log2(max(a)); //计算IU(信道容量C2=log2max(a(i)))
n=1;
while((IU-IL)>=b) //若C1-C2<一个接近零的数ε则输出信道容量C1否则跳出重新求p(xi)再代入a(i)
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 U=log2(max(a)); //计算IU
n=n+1;
end
fprintf('信道矩阵为:\n');
disp(p_yx);
fprintf('迭代次数n=%d\n',n);
fprintf('信道容量C=%f 比特/符号',IL); 4.实验的算法:
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 11
)(1)()1(]log exp[]log exp[φφ 4. ])log exp(log[11)()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 ,终止。
5.实验结果