您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 信道容量及其一般计算方法
实验一信道容量及其一般计算方法1.实验目的一般离散信道容量的迭代运算2.实验要求(1)理解和掌握信道容量的概念和物理意义(2)理解一般离散信道容量的迭代算法(3)采用Matlab编程实现迭代算法(4)认真填写实验报告。3.源代码clc;clearall;//清屏N=input('输入信源符号X的个数N=');//输入行数M=input('输出信源符号Y的个数M=');//输入列数p_yx=zeros(N,M);//程序设计需要信道矩阵初始化为零fprintf('输入信道矩阵概率\n')fori=1:N//从第一行第一列开始输入forj=1:Mp_yx(i,j)=input('p_yx=');//输入信道矩阵概率ifp_yx(i)0//若输出概率小于0则不符合概率分布error('不符合概率分布')endendendfori=1:N//各行概率累加求和s(i)=0;forj=1:Ms(i)=s(i)+p_yx(i,j);endendfori=1:N//判断是否符合概率分布if(s(i)=0.999999||s(i)=1.000001)//若行相加小于等于0.9999999或者大于等于1.000001Error//('不符合概率分布')endendb=input('输入迭代精度:');//输入迭代精度fori=1:Np(i)=1.0/N;//取初始概率为均匀分布(每行值分别为1/N,)endforj=1:M//计算q(j)q(j)=0;fori=1:Nq(j)=q(j)+p(i)*p_yx(i,j);//均匀分布的值乘上矩阵值后+q(j),然后赋值给q(j)实现求和endendfori=1:N//计算d(i)=∑p(yi|xi)ln[p(yi|xi)/∑p(xi)*p(yi|xi)]d(i)=0;forj=1:Mif(p_yx(i,j)==0)d(i)=d(i)+0;elsed(i)=d(i)+p_yx(i,j)*log(p_yx(i,j)/q(j));//公式如上endenda(i)=exp(d(i));//公式如上,对d(i)求指数endu=0;fori=1:Nu=u+p(i)*a(i);//对u的叠加求和endIL=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)fori=1:N//以下均同上步骤p(i)=p(i)*a(i)/u;//重新赋值p(i)endforj=1:M//计算q(j)q(j)=0;fori=1:Nq(j)=q(j)+p(i)*p_yx(i,j);//重复刚才步骤endendfori=1:N//计算a(i)d(i)=0;forj=1:Mif(p_yx(i,j)==0)d(i)=d(i)+0;elsed(i)=d(i)+p_yx(i,j)*log(p_yx(i,j)/q(j));endenda(i)=exp(d(i));endu=0;fori=1:N//计算uu=u+p(i)*a(i);endIL=log2(u);//计算ILU=log2(max(a));//计算IUn=n+1;endfprintf('信道矩阵为:\n');disp(p_yx);fprintf('迭代次数n=%d\n',n);fprintf('信道容量C=%f比特/符号',IL);4.实验的算法:1.初始化信源分布:pi=r1,循环变量k=1,门限△,C(0)=-;2.rijikijikikijpppp1)()()(3.risjkijjisjkijjikippp11)(1)()1(]logexp[]logexp[4.])logexp(log[11)()1(risjkijjikpC5.若)1()()1(kkkCCC,则k=k+1,转第2步6.输出P*=rkiP1和1kC,终止。5.实验结果
本文标题:信道容量及其一般计算方法
链接地址:https://www.777doc.com/doc-1766805 .html