信道容量及其一般计算方法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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.实验结果

相关文档
最新文档