www.pudn.com > MutualInformationICA.zip > ICAtests.C


//####################################################################
//ICA test 
//####################################################################
//2 May 2004
//Contact: kraskov@its.caltech.edu
//####################################################################
//uses mic_xnyn, mir_xnyn
#include 
#include 
#include 
#include 
#include 

#include "miutils.h"

int main(int argc, char **argv) {

  FILE *fin;
  int i,d,d1,d2,N_,ddel;
  int N=4096;;
  int dim=3;
  int K=1;
  
  double **x;
  double **xx,**yy;
  double *psi,*min,*max,*scalxx;
  double t_d,t_d1,st_d,ct_d;
  int BOX1;
  double **mi;

  double s,me;

  int k;
  double *rmi;
  double **varmi;
  double angle;

  int tau=1;
  int edim=2;
  int method=1;
  double addnoise=-1;
  int nr=4;

  if (argc<5) {
    fprintf(stderr,"\nReliability Test using MI based on k-nearest neighbours statistics (rectangular)\n\n");
    fprintf(stderr,"Usage:\n%s   <# points> <# neighbours> [tau] [edim] [method] [nrot] [addnoise]\n\n",argv[0]);
    fprintf(stderr,"Input:\n\t\ttext file with  columns and <# points> rows\n");
    fprintf(stderr,"\t\t\tnumber of columns in file\n");
    fprintf(stderr,"\t<# points>\tnumber of rows (length of characteristic vector)\n");
    fprintf(stderr,"\t<# neighbours>\tnumber of the nearest neighbours for MI estimator\n");
    fprintf(stderr,"\t[tau]\t\tembedding delay, default 1\n");
    fprintf(stderr,"\t[edim]\t\tembedding dimension, default 2\n");
    fprintf(stderr,"\t[method]\teither cubic (0), or rectangular (1); default 1\n");
    fprintf(stderr,"\t[nrot]\t\tnumber of angles to check; default 4 (pi/8,pi/4,3pi/8,pi/2)\n");
    fprintf(stderr,"\t[addnoise]\tnoise amplitude; default 1e-8\n");
    fprintf(stderr,"\nOutput:\n");
    fprintf(stderr,"\nMI matrix and variance of MI matrix\n");
    fprintf(stderr,"\nContact: kraskov@its.caltech.edu\n");
    exit(-1);
  }

  dim=atoi(argv[2]);
  N=atoi(argv[3]);
  K=atoi(argv[4]);
  
  if (argc>=6) tau=atoi(argv[5]);
  if (argc>=7) edim=atoi(argv[6]);
  if (argc>=8) method=atoi(argv[7]);
  if (argc>=9) nr=atoi(argv[8]);
  if (argc>=10) addnoise=atof(argv[9]);
  if (argc>=11) {fprintf(stderr,"Too many input arguments\n");exit(-1);}

  yy=(double **)calloc(2,sizeof(double*));
  yy[0]=(double *)calloc(N,sizeof(double));
  yy[1]=(double *)calloc(N,sizeof(double));

  xx=(double **)calloc(edim*2,sizeof(double*));
  for (ddel=0;ddelmax[d1]) max[d1]=xx[d1][i];
	  }
	  for (i=0;i0) fprintf(stdout," ");
      fprintf(stdout,"%2.8f\t",mi[d][d2]);
    }
    fprintf(stdout,"\n");
  }
  
  fprintf(stdout,"\n");
    
  for (d=0;d0) fprintf(stdout," ");
      fprintf(stdout,"%2.8f\t",varmi[d][d2]);
    }
    fprintf(stdout,"\n");
  }

  free(yy[0]);free(yy[1]);free(yy);

  for (ddel=0;ddel<2*edim;ddel++) free(xx[ddel]);
  free(xx);
  for (d=0;d