您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 实验一--信道容量的迭代算法
信息工程12班吴玉明52111209实验一信道容量的迭代算法一、实验目的1、掌握信道容量的概念。2、了解迭代法计算信道容量的流程。3、熟悉Matlab程序的设计和调试方法。二、实验要求1、学习Matlab软件编程和调试方法;2、输入:任意一个信道转移概率矩阵。包括信源符号个数、信宿符号个数、信道转移概率,在程序运行时从键盘输入;3、输出:输入的信道矩阵、信道容量C。三实验算法程序clc;clearall;N=input('输入信源符号X的个数N=');M=input('输出信源符号Y的个数M=');p_yx=zeros(N,M);%程序设计需要信道矩阵初始化为零fprintf('输入信道矩阵概率\n')fori=1:Nforj=1:Mp_yx(i,j)=input('p_yx=');%输入信道矩阵概率ifp_yx(i)0error('不符合概率分布')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)error('不符合概率分布')endendb=input('输入迭代精度:');%输入迭代精度fori=1:Np(i)=1.0/N;%取初始概率为均匀分布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);%计算ILIU=log2(max(a));%计算IUn=1;while((IU-IL)=b)%迭代计算fori=1:Np(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);%计算ILIU=log2(max(a));%计算IUn=n+1;endfprintf('信道矩阵为:\n');disp(p_yx);fprintf('迭代次数n=%d\n',n);fprintf('信道容量C=%f比特/符号',IL);五信道容量迭代算法流程图四.实验的算法: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,终止。五算法流程图如下:六实验截图(一)否是iiiiijiijiijijiannCaxpnnCxypxpxypxypamaxln,1)(ln,1)/()()/(ln)/(exp21nnCnnC,1,121nnCC,11iiiiiiaxpaxpxp)()()(输入)()()0(iixpxp结束(二)七实验总结与体会本次试验是建立在迭代的基础上,首先要深刻理解信道容量的迭代算法,其次是,如何将复杂的公式转化为程序通过此次实验,我了解了信道容量的迭代算法的基本知识,学会了如何将复杂的公式如何用程序语言描述出来,掌握了高级语言数值计算过程程序的设计和调试的相关知识,对于将实际问题公式转化为程序的能力有提高
本文标题:实验一--信道容量的迭代算法
链接地址:https://www.777doc.com/doc-4733628 .html