• 大小: 218KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-09
  • 语言: C/C++
  • 标签:

资源简介

信道容量的迭代算法的C语言实现,可以运行的源代码,可以运行

资源截图

代码片段和文件信息

#include 
#include 
#include 
#include “unistd.h“
#include “values.h“

#define DELTA 1e-6 /*delta the threshold*/

int main (void)
{
register int ij;
register int k;
int rs;

float*p_i=NULL;
float**p_ji=NULL;
float**phi_ij=NULL;
float CC_prevalidate;

float*sum=NULL;
float p_j;
    /* Read the number fof input symbol:rand the number of output symbol:s*/
fscanf(stdin“%d“&r);
fscanf(stdin“%d“&s);

    /*allocation memory for p_ip_ji andphi_ij*/
    p_i=(float*)calloc(rsizeof(float));

p_ji=(float**)calloc (ssizeof(float));

phi_ij=(float**) calloc (rsizeof(float*));
for(i=0;i p_ji[i]=(float*)calloc(rsizeof (float*));

phi_ij=(float**) calloc(rsizeof (float*));
for(i=0;i phi_ij[i]=(float*) calloc(ssizeof(float));

     /*read the channel transition probility matrix p_ji*/
for(i=0;i  for(j=0;j fscanf(stdin“%f“&p_ji[i][j]);

     /* validate the input data*/
 for(i=0;i  {
 validate=0.0;
 for(j=0;j  {validate+=p_ji[i][j];
 }
 if(fabs(validate-1.0)>DELTA)
 {fprintf(stdout“invalid input data.\n“);
 exit(-1);
 }
 }
    fprintf(stdout“statrt...\n“);

    /*initialize the p_i and phi_ij*/
for(i=0;i {p_i[i]=1.0/(float)r;
}

     /*initialize C iteration counter : k and temprory variable*/
C=-MAXFLOAT;//MAXFLOAT wos defined in 
k=0;
sum=(float*)calloc(rsizeof(float));

/*strat iterate*/
/***********************************************/
do
{
k++;

   /*calculate phi_ij(k) first*/
 for(j=0;j {p_j=0.0;
  for(i=0;i           p_j+=p_i[i]*p_ji[i][j];

  if(fabs(p_j)>=DELTA)
for(i=0;i  phi_ij[i][j]=p_i[i]*p_ji[i][j]/p_j;
else
for(i=0;i                  phi_ij[i][j]=0.0;

}

    /*caculate p_i(k+1) then*/
 p_j=0.0;
 for(i=0;i     {
 sum[i]=0.0;
 for(j=0;j  {/*prevent divided by zero*/
 if(fabs(phi_ij[i][j])>DELTA)
 sum[i]+=p_ji[i][j]*log(phi_ij[i][j])/log(2.0);
 }
 sum[i]=pow(2.0sum[i]);
 p_j+=sum[i];

}

 for(i=0;i  {
 p_i[i]=sum[i]/p_j;
 }
   /*and C(k+1)*/
  C_pre=C;
  C=log(p_j)/log(2.0);
}
while(fabs(C-C_pre)/C>DELTA);


free(sum);
sum=NULL;

/*Output the result*/
fprintf(stdout“The iteration number is %d.\n\n“k);
fprintf(stdout“The capacity of the channel is %.f bit /symbol .\n\n“C);
fprintf(stdout“The best input probality distribution is :\n“);
for(i=0;i fprintf(stdout“%.6f“p_i[i]);
fprintf(stdout“\n“);

/*Free the memory we allocation before with stack sequence*/
for (i=s-1;i>=0;i--)
{
free(phi_ij[i]);
phi_ij[i]=NULL;
}
free(phi_ij);
phi_ij=NULL;

for(i=r-1;i>=0;i--)
{
free(p_ji[i]);
p_ji[i]=NULL;
}
free(p_ji);
p_ji=NULL;
free(p_i);
p_i=NULL;

exit(0);
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      33792  2009-11-25 08:41  ximxilun\Debug\vc60.idb

     文件      45056  2009-11-25 08:41  ximxilun\Debug\vc60.pdb

     文件     225367  2009-11-25 08:41  ximxilun\Debug\xindao.exe

     文件     218728  2009-11-25 08:41  ximxilun\Debug\xindao.ilk

     文件       7063  2009-11-25 08:41  ximxilun\Debug\xindao.obj

     文件      43520  2009-11-25 08:46  ximxilun\Debug\xindao.opt

     文件     269200  2009-11-25 08:32  ximxilun\Debug\xindao.pch

     文件     386048  2009-11-25 08:41  ximxilun\Debug\xindao.pdb

     文件        201  2008-11-15 19:51  ximxilun\unistd.h

     文件       1151  2008-11-15 20:00  ximxilun\values.h

     文件       2943  2009-11-25 08:41  ximxilun\xindao.c

     文件       3399  2009-11-25 08:29  ximxilun\xindao.dsp

     文件        537  2009-11-25 08:46  ximxilun\xindao.dsw

     文件      33792  2009-11-25 08:46  ximxilun\xindao.ncb

     文件      48640  2009-11-25 08:46  ximxilun\xindao.opt

     文件        746  2009-11-25 08:41  ximxilun\xindao.plg

     目录          0  2009-11-25 08:46  ximxilun\Debug

     目录          0  2009-11-25 08:46  ximxilun

----------- ---------  ---------- -----  ----

              1320183                    18


评论

共有 条评论

相关资源