📄 信息论编码.cpp
字号:
void chengfa(double *a,double **b,double *c,double **d,double **e,int m,int n)
{
int a1=0,a2=0;
int c1=0;
double sum=0;
int i,t;
//------------------------------计算得到py的值
for(i=0;i<n;i++)
{
sum=0;
for(a2=0;a2<m;a2++)
{
sum+=a[a2]*b[i][a2];
}
c[a1]=sum;
a1++;
}
//--------------------------------计算得到pxy的值
for(i=0;i<n;i++)
{
for(a2=0;a2<m;a2++)
{
d[i][a2]=a[a2]*b[i][a2];
}
}
//-------------------------------------------计算得到px_y
for(i=0;i<n;i++)
{
for(t=0;t<m;t++)
{
e[i][t]=d[i][t]/c[t];
}
}
}
//------------------------------------------计算log时的函数
double log(double a,double b)
{
double c;
c=log(b)/log(a);
return c;
}
void xinxi()
{
int m,n;
int k,t;
double p1=0,p2=0,p3=0,p4=0;
double *px,**py_x,*py,**px_y,**pxy;
cout<<"请输入信道特性矩阵的大小:"<<endl;
cin>>m>>n;
//---------------------------------------开辟空间
px=(double *)malloc((m)*sizeof(double));
py_x=(double **)malloc(m);
pxy=(double **)malloc(m);
px_y=(double **)malloc(m);
for(k=0;k<m;k++)
{
py_x[k]=(double *)malloc(n*sizeof(double));
}
py=(double *)malloc((n)*sizeof(double));
for(k=0;k<m;k++)
{
pxy[k]=(double *)malloc(n*sizeof(double));
}
for(k=0;k<m;k++)
{
px_y[k]=(double *)malloc(n*sizeof(double));
}
//------------------------------------输入px的值
cout<<"input px\n";
for(int j=0;j<m;j++)
cin>>px[j];
//-------------------------------------输入py_x的值
cout<<"input py_x\n";
for(t=0;t<m;t++)
{
for(k=0;k<n;k++)
{
cin>>py_x[t][k];
}
}
chengfa(px,py_x,py,pxy,px_y,m,n);
//------------------------------------输出py
cout<<"py的值为:"<<endl;
for(k=0;k<n;k++)
cout<<py[k]<<"\t";
cout<<"\n";
//----------------------------------输出pxy
cout<<" pxy的值为:"<<endl;
for(t=0;t<m;t++)
{
for(k=0;k<n;k++)
{
cout<<pxy[t][k]<<"\t";
}
cout<<endl;
}
//-----------------------------输出px_y
cout<<" px_y的值为:"<<endl;
for(t=0;t<m;t++)
{
for(k=0;k<n;k++)
{
cout<<px_y[t][k]<<"\t";
}
cout<<endl;
}
//-------------------------输出信源商
cout<<"信源商值为"<<endl;
for(t=0;t<n;t++)
p1+=(-px[t])*log(2,px[t]);
cout<<p1<<endl;
//--------------------------输出条件商
cout<<"条件商值为"<<endl;
for(t=0;t<m;t++)
{
for(k=0;k<n;k++)
{
p2+=(-pxy[t][k])*log(2,py_x[t][k]);
}
}
cout<<p2<<endl;
//------------------------------输出联合商
cout<<"联合商值为"<<endl;
for(t=0;t<m;t++)
{
for(k=0;k<n;k++)
{
p3+=(-pxy[t][k])*log(2,pxy[t][k]);
}
}
cout<<p3<<endl;
//------------------------------输出交互商
cout<<"交互商值为"<<endl;
for(t=0;t<m;t++)
{
for(k=0;k<n;k++)
{
p3+=(-pxy[t][k])*(log(2,pxy[t][k])-log(2,px[t])-log(2,py[k]));
}
}
cout<<p3<<endl;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -