哈尔滨理工大学荣成学院信息论与编码实验报告——一般信道容量编码班级:电信13-2班姓名:学号:日期:2015.10.24一般信道的信道容量一、实验目的1、熟悉MATLAB的使用2、掌握一般信道的信道容量的求解3、学习用MATLAB编写一般信道的信道容量的求解程序二、实验内容用MATLAB编写一般信道的信道容量的程序,并求出信道容量,最佳信源分布。三、实验程序Matlab程序代码段:clearallformatrat%所有的数全部用分数显示A=ones(4)*2^-40;%定义一个极小值矩阵P=[1/2,1/4,0,1/4;0,1,0,0;0,0,1,0;1/4,0,1/4,1/2];%信道的传递矩阵B=A+P;%用极小值矩阵加上矩阵B避免出现log2(0)的情况fori=1:4forj=1:4D(i,j)=B(i,j)*log2(B(i,j));endendF=sum(D,2);%每行求和ΣX=P\F;%计算公式中的β值记为XC=log2(2^X(1,1)+2^X(2,1)+2^X(3,1)+2^X(4,1))%信道容量%以下代码段是求信道容量的最佳输入分布PAPb1=2^(X(1,1)-C);%Pb1,Pb2,Pb3,Pb4是求输出概率分布Pb2=2^(X(2,1)-C);Pb3=2^(X(3,1)-C);Pb4=2^(X(4,1)-C);PB=[Pb1;Pb2;Pb3;Pb4];%输出概率矩阵PA=inv(P')*PB%因为PB=PT(P的转置)*PA,所以PA=PT^(-1)(P转置矩阵的逆矩阵)*PBclearallformatrat%ËùÓеÄÊýÈ«²¿Ó÷ÖÊýÏÔʾs=input('pleaseinputaarray');A=ones(4)*2^-40;%¶¨ÒåÒ»¸ö¼«Ð¡Öµ¾ØÕóB=A+s;%Óü«Ð¡Öµ¾ØÕó¼ÓÉϾØÕóB±ÜÃâ³öÏÖlog2£¨0£©µÄÇé¿öfori=1:4forj=1:4D(i,j)=B(i,j)*log2(B(i,j));endendF=sum(D,2);%ÿÐÐÇóºÍ¦²X=s\F;%¼ÆË㹫ʽÖеĦÂÖµ¼ÇΪXC=log2(2^X(1,1)+2^X(2,1)+2^X(3,1)+2^X(4,1))%ÐŵÀÈÝÁ¿%ÒÔÏ´úÂë¶ÎÊÇÇóÐŵÀÈÝÁ¿µÄ×î¼ÑÊäÈë·Ö²¼PAPb1=2^(X(1,1)-C);%Pb1,Pb2,Pb3,Pb4ÊÇÇóÊä³ö¸ÅÂÊ·Ö²¼Pb2=2^(X(2,1)-C);Pb3=2^(X(3,1)-C);Pb4=2^(X(4,1)-C);PB=[Pb1;Pb2;Pb3;Pb4];%Êä³ö¸ÅÂʾØÕóPA=inv(s')*PB%ÒòΪPB=PT(PµÄתÖÃ)*PA£¬ËùÒÔPA=PT^(-1)(PתÖþØÕóµÄÄæ¾ØÕó)*PB四、实验结果五、出现的问题及解决方法:(1)信道的传递矩阵P中有0,在取对数的时候无法计算log2(0),经过向同学请教得到两种解决办法:[1]计算时将P中的所有0改为1,这样在计算对数是则为log2(1)=0,不影响计算结果,但是出现另一个问题是计算的F=sum(D,2)每行求和得到的F矩阵中的元素有0,那么在计算公式中的β值即X=P\F时,由于F处在分母的位置不能为0,则在编译的时候出现错误,因此放弃此方案。[2]计算时给P中的所有数加上一个极小的数,使其计算的过程中不影响计算值,那么在后面求解β值即X=P\F时就不会出现上述问题。(2)matlab的使用不熟练,在将计算公式向程序代码转换的时候思路不清晰,线性代数中矩阵的转置及矩阵的逆的运算掌握不到位,以至于在公式推导是遇到瓶颈,耽误了许多时间,没有按时完成本次试验。