信息论与编码实验报告
float pX[2]={0.5,0.5},pY_X[2][2]={{0.98,0.02},{0.2,0.8}}; float pXY[2][2],pY[2],pX_Y[2][2];
float hX,hY,hXY=0.0,hY_X=0.0,hX_Y=0.0; float iXY=0.0,iYX=0.0; int i,j;
//计算联合概率 for(i=0;i<2;i++) for(j=0;j<2;j++) pXY[i][j]=pX[i]*pY_X[i][j]; //计算Y的概率 for(i=0;i<2;i++) pY[i]=pXY[0][i]+pXY[1][i]; //计算X的后验概率 for(i=0;i<2;i++) for(j=0;j<2;j++) pX_Y[j][i]=pXY[i][j]/pY[j]; //求信源熵
hX=-(pX[0]*(log(pX[0])/log(2))+pX[1]*(log(pX[1])/log(2))); cout<<"信源熵H(X)="<<hX<<endl;
hY=-(pY[0]*(log(pY[0])/log(2))+pY[1]*(log(pY[1])/log(2))); cout<<"信源熵H(Y)="<<hY<<endl; //求条件熵 for(i=0;i<2;i++) for(j=0;j<2;j++) hY_X+=-(pXY[i][j]*log(pY_X[i][j])/log(2)); cout<<"条件熵H(Y/X)="<<hY_X<<endl; for(i=0;i<2;i++) for(j=0;j<2;j++) hX_Y+=-(pXY[i][j]*log(pX_Y[j][i])/log(2)); cout<<"条件熵H(X/Y)="<<hX_Y<<endl; //求联合熵 for(i=0;i<2;i++) for(j=0;j<2;j++) hXY+=-(pXY[i][j]*log(pXY[i][j])/log(2)); cout<<"联合熵H(XY)="<<hXY<<endl; //交互熵
iXY=hX+hY-hXY;
cout<<"交互熵I(X;Y)=I(Y;X)="<<iXY<<endl; float beta[2],C;
//求信道容量