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;ddel max[d1]) max[d1]=xx[d1][i]; } for (i=0;i 0) fprintf(stdout," "); fprintf(stdout,"%2.8f\t",mi[d][d2]); } fprintf(stdout,"\n"); } fprintf(stdout,"\n"); for (d=0;d 0) 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