コード例 #1
0
int main(int argc, char *argv[]){vsip_init((void*)0);
{  if(argc < 3){
      printf("usage\nqrdex M N FileName\n");
      exit(1);
   }
   {
     int VU_qrd_f(vsip_mview_f*,vsip_mview_f*);
     vsip_length M = (vsip_length)atoi(argv[1]),
                 N = (vsip_length)atoi(argv[2]);
     vsip_mview_f *A = vsip_mcreate_f(M,N,VSIP_COL,0),
                  *Q = vsip_mcreate_f(M,N,VSIP_COL,0),
                  *R = vsip_mcreate_f(N,N,VSIP_ROW,0);
     FILE *fptr = fopen(argv[3],"r");
     VU_mreadf_f(fptr,A);
     fclose(fptr);
     vsip_mcopy_f_f(A,Q);
     printf("A =");VU_mprintm_f("9.6",A);
     VU_qrd_f(Q,R);
     printf("Q =");VU_mprintm_f("9.6",Q); 
     printf("R =");VU_mprintm_f("9.6",R);
     vsip_mprod_f(Q,R,A);
     printf("QR =");VU_mprintm_f("9.6",A);
     vsip_malldestroy_f(A);
     vsip_malldestroy_f(Q);
     vsip_malldestroy_f(R);
     } vsip_finalize((void*)0); return 0;
   }
}
コード例 #2
0
ファイル: svd_f.c プロジェクト: rrjudd/jvsip
svdObj_f *svd_f(vsip_mview_f *A)
{
    svdObj_f *svd = svdInit_f(vsip_mgetcollength_f(A),vsip_mgetrowlength_f(A));
    if(!svd){ printf("malloc failure for SVD"); exit(0);}
    vsip_mcopy_f_f(A,svd->B);
    svdBidiag_f(svd);
    svdIteration_f(svd);
    svdSort_f(svd);
    return svd;
}
コード例 #3
0
int main(int argc, char *argv[]){vsip_init((void*)0);
{  if(argc < 3){
      printf("usage\nqrdex M N FileName\n");
   } else {
   /* matrix size */
   vsip_length M    = (vsip_length)atoi(argv[1]),
               N    = (vsip_length)atoi(argv[2]);
   /* Create some space to hold the matrix */
   vsip_mview_f *A  = vsip_mcreate_f(M,N,VSIP_COL,VSIP_MEM_NONE),
                *A0 = vsip_mcreate_f(M,N,VSIP_COL,VSIP_MEM_NONE);
   /* get data */
   FILE *fptr = fopen(argv[3],"r");
   VU_mreadf_f(fptr,A);
   fclose(fptr);
   vsip_mcopy_f_f(A,A0); /* will use A, original data in A0 */
   { /* test prodq for Q1 */
     /* create a QRD object */
     vsip_qr_f *qrd   = vsip_qrd_create_f(M,N,VSIP_QRD_SAVEQ1);
     /* create a matrix to hold Q */
     vsip_mview_f *I = VU_I_f(M);
     vsip_mview_f *Q = vsip_msubview_f(I,0,0,M,N);
     vsip_mview_f *Qt = vsip_mtransview_f(Q);
     /* create a matrix to hold R */
     vsip_mview_f *A1 = vsip_mcreate_f(M,N,VSIP_ROW,VSIP_MEM_NONE);
     vsip_mview_f *R1 = vsip_msubview_f(A1,0,0,N,N);
     vsip_mview_f *R  = vsip_mcreate_f(N,N,VSIP_ROW,VSIP_MEM_NONE);
     /* create a matrix to hold Q Q^t */
     vsip_mview_f *I1 = vsip_mcreate_f(M,M,VSIP_ROW,VSIP_MEM_NONE);
     vsip_mview_f *I_1NN = vsip_msubview_f(I1,0,0,N,N);
     vsip_mview_f *I_1MN = vsip_msubview_f(I1,0,0,M,N);
     vsip_mview_f *I_1NM = vsip_msubview_f(I1,0,0,N,M);
     /* create a matrix to hold Q^t Q */
     vsip_mview_f *I2 = vsip_mcreate_f(M,M,VSIP_ROW,VSIP_MEM_NONE);
     vsip_mview_f *I_2NN = vsip_msubview_f(I2,0,0,N,N);
     vsip_mview_f *I_2MN = vsip_msubview_f(I2,0,0,M,N);
     vsip_mview_f *I_2NM = vsip_msubview_f(I2,0,0,N,M);
     /* do decomposition */
     vsip_qrd_f(qrd,A);
     /* find Q */
     vsip_qrdprodq_f(qrd,VSIP_MAT_NTRANS,VSIP_MAT_RSIDE,I);
     printf("A = \n"); VU_mprintm_f("6.4",A0);
     printf("Q = \n"); VU_mprintm_f("6.4",Q);
     /* find R */
     vsip_mcopy_f_f(A0,A1);
     vsip_mprod_f(Qt,A1,R);
     printf("From mprod R = \n"); VU_mprintm_f("6.4",R);
     vsip_qrdprodq_f(qrd,VSIP_MAT_TRANS,VSIP_MAT_LSIDE,A1);
     printf("From qrdprod R = \n"); VU_mprintm_f("6.4",R1);

     /* find A from Q and R */
     vsip_mprod_f(Q,R,A1);
     printf("Q R = \n");VU_mprintm_f("6.4",A1);

     /* find Q^t Q using mprod */
     VU_mfillz_f(I1); VU_mfillz_f(I2);
     vsip_mcopy_f_f(Qt,I_1NM);
     vsip_mprod_f(I_1NM,Q,I_2NN);
     printf("directly using mprod Q^t Q = \n"); VU_mprintm_f("6.4",I_2NN);

     /* find Q^t Q using matprod on Rside */
     VU_mfillz_f(I1);
     vsip_mcopy_f_f(Qt,I_1NM);
     vsip_qrdprodq_f(qrd,VSIP_MAT_NTRANS,VSIP_MAT_RSIDE,I_1NM);
     printf("using qrdprodq Q^t Q Rside = \n"); VU_mprintm_f("6.4",I_1NN);

     /* find Q^t Q using matprod on Lside */
     VU_mfillz_f(I2);
     vsip_mcopy_f_f(Q,I_2MN);
     vsip_qrdprodq_f(qrd,VSIP_MAT_TRANS,VSIP_MAT_LSIDE,I2);
     printf("using qrdprodq Q^t Q Lside = \n"); VU_mprintm_f("6.4",I_2NN);
    
     /* find Q Q^t using Mprod */
     VU_mfillz_f(I1); VU_mfillz_f(I2);
     vsip_mcopy_f_f(Qt,I_1NM);
     vsip_mprod_f(Q,I_1NM,I2);
     printf("directly using mprod Q Q^t = \n"); VU_mprintm_f("6.4",I2);
      
     /* find Q Q^t using matprod on Rside */
     VU_mfillz_f(I1);
     vsip_mcopy_f_f(Q,I_1MN);
     vsip_qrdprodq_f(qrd,VSIP_MAT_TRANS,VSIP_MAT_RSIDE,I1);
     printf("using qrdprodq Q Q^t Rside = \n"); VU_mprintm_f("6.4",I1);

     /* find Q Q^t using matprod on Lside */
     VU_mfillz_f(I2);
     vsip_mcopy_f_f(Qt,I_2NM);
     vsip_qrdprodq_f(qrd,VSIP_MAT_NTRANS,VSIP_MAT_LSIDE,I2);
     printf("using qrdprodq Q Q^t Lside = \n"); VU_mprintm_f("6.4",I2);
    }
  }
  }vsip_finalize((void*)0);return 0;
}
コード例 #4
0
int main(){vsip_init((void*)0);
{  int i,j; /* counters */
   vsip_vview_f *windowt = vsip_vcreate_hanning_f(Ns,0);
   vsip_vview_f *windowp = vsip_vcreate_hanning_f(Mp,0);
   vsip_vview_f *kernel = 
         vsip_vcreate_kaiser_f(Nfilter,kaiser,0);
   vsip_fir_f *fir = vsip_fir_create_f(kernel,
                         VSIP_NONSYM,2 * Nn,2,VSIP_STATE_SAVE,0,0);
   vsip_vview_f *t =vsip_vcreate_f(Ns,0); /*time vector*/
   vsip_vview_f *noise[Nnoise];
   vsip_vview_f *nv = vsip_vcreate_f(2 * Nn,0);
   vsip_vview_f *tt = vsip_vcreate_f(Ns,0); 
   vsip_mview_f *data = vsip_mcreate_f(Mp,Ns,VSIP_ROW,0),
                *rmview;
   vsip_vview_f *data_v, *gram_v;
   vsip_cvview_f *gram_data_v;
   vsip_cmview_f *gram_data = 
        vsip_cmcreate_f(Mp,Ns/2 + 1,VSIP_COL,0);
   vsip_mview_f  *gram = 
         vsip_mcreate_f(Mp,Ns/2 + 1,VSIP_ROW,0);
   vsip_mview_f  *Xim = 
         vsip_mcreate_f(Mp,Mp+1,VSIP_ROW,0);
   vsip_scalar_f alpha = (D * Fs) / c;
vsip_vview_f *m = vsip_vcreate_f(Mp,0);
   vsip_vview_f *Xi = vsip_vcreate_f(Mp + 1,0);
   vsip_randstate *state =
          vsip_randcreate(15,1,1,VSIP_PRNG);
   vsip_scalar_f w0 = 2 * M_PI * F0/Fs;
   vsip_scalar_f w1 = 2 * M_PI * F1/Fs;
   vsip_scalar_f w2 = 2 * M_PI * F2/Fs;
   vsip_scalar_f w3 = 2 * M_PI * F3/Fs;
   vsip_scalar_f cnst1 = M_PI/Nnoise;  
   vsip_offset offset0 = (vsip_offset)(alpha * Mp + 1);
   vsip_fftm_f *rcfftmop_obj = /* time fft */
   vsip_rcfftmop_create_f(Mp,Ns,1,VSIP_ROW,0,0);
   vsip_fftm_f *ccfftmip_obj =
         vsip_ccfftmip_create_f(Mp,Ns/2 +
             1,VSIP_FFT_FWD,1,VSIP_COL,0,0);
   vsip_vramp_f(0,1,m);
   vsip_vramp_f(0,M_PI/Mp,Xi); 
   vsip_vcos_f(Xi,Xi);
   vsip_vouter_f(alpha,m,Xi,Xim);
   { vsip_vview_f *gram_v = vsip_mrowview_f(gram,0);
     vsip_vputlength_f(gram_v,Mp*(Ns/2 + 1));
     vsip_vfill_f(0,gram_v);
     vsip_vdestroy_f(gram_v);
   }
   for(j=0; j<Nnoise; j++){
      noise[j] = vsip_vcreate_f(Nn,0);
      vsip_vrandn_f(state,nv);
      vsip_firflt_f(fir,nv,noise[j]);
      vsip_svmul_f(12.0/(Nnoise),noise[j],noise[j]);
      vsip_vputlength_f(noise[j],Ns);
   }
   vsip_vramp_f(0,1.0,t); /* time vector */
for(i=0; i<Mp; i++){
      vsip_scalar_f Xim_val = vsip_mget_f(Xim,i,Theta_o);
      data_v = vsip_mrowview_f(data,i);
      vsip_vsmsa_f(t,w0,-w0 * Xim_val,tt);
      vsip_vcos_f(tt,data_v); /*F0 time series */
      vsip_vsmsa_f(t,w1,-w1 * Xim_val,tt);
      vsip_vcos_f(tt,tt); /*F1 time series */
      vsip_vadd_f(tt,data_v,data_v);
      vsip_vsmsa_f(t,w2,-w2 * Xim_val,tt);
      vsip_vcos_f(tt,tt); /*F2 time series */
      vsip_vadd_f(tt,data_v,data_v);
      vsip_vsmsa_f(t,w3,-w3 * Xim_val,tt);
      vsip_vcos_f(tt,tt); /*F3 time series */
      vsip_svmul_f(3.0,tt,tt); /* scale by 3.0 */
      vsip_vadd_f(tt,data_v,data_v);
      vsip_svmul_f(3,data_v,data_v);
      for(j=0; j<Nnoise; j++){ 
          /* simple time delay beam forming for noise */
         vsip_vputoffset_f(noise[j],offset0 + 
           (int)( i * alpha * cos(j * cnst1)));
         vsip_vadd_f(noise[j],data_v,data_v); 
      } 
      /* need to destroy before going on to next phone */
      vsip_vdestroy_f(data_v);
   }
   /* window the data and the array to reduce sidelobes */
   vsip_vmmul_f(windowt,data,VSIP_ROW,data);
   vsip_vmmul_f(windowp,data,VSIP_COL,data);

   /* do ffts */
   vsip_rcfftmop_f(rcfftmop_obj,data,gram_data);
   vsip_ccfftmip_f(ccfftmip_obj,gram_data);

   { /* scale gram to db, min 0 max 255 */
      vsip_index ind;
      gram_v = vsip_mrowview_f(gram,0);
      gram_data_v = vsip_cmcolview_f(gram_data,0);
      rmview = vsip_mrealview_f(gram_data);
      vsip_vputlength_f(gram_v,Mp*(Ns/2 + 1)); 
      vsip_cvputlength_f(gram_data_v,Mp*(Ns/2 + 1));
data_v = vsip_vrealview_f(gram_data_v);
      vsip_vcmagsq_f(gram_data_v,data_v);
      vsip_mcopy_f_f(rmview,gram);
      vsip_vdestroy_f(data_v);
      vsip_svadd_f(1.0 -
      vsip_vminval_f(gram_v,&ind),gram_v,gram_v);
      vsip_vlog10_f(gram_v,gram_v); 
      vsip_svmul_f(256.0 / vsip_vmaxval_f(gram_v,&ind),
                    gram_v,gram_v);/* scale */
      /* reorganize the data to place zero in the 
          center for direction space */
      data_v = vsip_vcloneview_f(gram_v);
      vsip_vputlength_f(data_v,(Mp/2) * (Ns/2 + 1));
      vsip_vputoffset_f(data_v,(Mp/2) * (Ns/2 + 1));
      vsip_vputlength_f(gram_v,(Mp/2) * (Ns/2 + 1));
      vsip_vswap_f(data_v,gram_v);
      vsip_vdestroy_f(gram_v);
      vsip_vdestroy_f(data_v);
      vsip_cvdestroy_f(gram_data_v);
      vsip_mdestroy_f(rmview);
   }
   VU_mprintgram_f(gram,"gram_output");
   } vsip_finalize((void*)0); return 0;        
}
コード例 #5
0
int main() {
vsip_init((void*)0);{
    vsip_mview_f *A  = vsip_mcreate_f(NN,NN,VSIP_COL,0);
    vsip_vview_f *x0 = vsip_vcreate_f(NN,0);
    vsip_vview_f *b  = vsip_vcreate_f(NN,0);
    vsip_mview_f *X  = vsip_mcreate_f(NN,3,VSIP_ROW,0);
    vsip_mview_f *XT  = vsip_mcreate_f(NN,3,VSIP_COL,0);
    vsip_vramp_f(1,1,x0); vsip_vmul_f(x0,x0,x0);
    vsip_mput_f(A,0,0,-3); vsip_mput_f(A,0,1,7); vsip_mput_f(A,0,2,10); vsip_mput_f(A,0,3,12);
    vsip_mput_f(A,1,0,0); vsip_mput_f(A,1,1,13); vsip_mput_f(A,1,2,18); vsip_mput_f(A,1,3,6);
    vsip_mput_f(A,2,0,2); vsip_mput_f(A,2,1,-9); vsip_mput_f(A,2,2,6); vsip_mput_f(A,2,3,3);
    vsip_mput_f(A,3,0,1); vsip_mput_f(A,3,1,2); vsip_mput_f(A,3,2,3); vsip_mput_f(A,3,3,4);
    {int i,j; printf("A = [\n"); for(i=0; i<NN; i++){
                  for(j=0; j<NN; j++) printf("%9.2f%s",vsip_mget_f(A,i,j),(j == NN-1) ? "":",");
                  printf(";\n");
              }
              printf("]\n");
    }
    { int k; 
      vsip_vview_f *x;
      vsip_length L    = vsip_mgetrowlength_f(X);
      for(k=0; k<L; k++){
        x  = vsip_mcolview_f(X,k);
        vsip_mvprod_f(A,x0,b);
        vsip_vcopy_f_f(b,x);
        vsip_svmul_f(2.0,x0,x0);
        vsip_vdestroy_f(x);
      }
    {int i,j; printf("X = [\n");for(i=0; i<NN; i++){
                  for(j=0; j<3; j++) printf("%9.2f%s",vsip_mget_f(X,i,j),(j == 2) ? "":",");
                  printf(";\n");
              }
              printf("]\n");
    }
    {
      vsip_lu_f* luAop = vsip_lud_create_f(NN);
      vsip_mcopy_f_f(X,XT);
      if(luAop == NULL) exit(1);
      vsip_lud_f(luAop,A);
      {  vsip_lu_attr_f attr;
         vsip_lud_getattr_f(luAop,&attr);
         printf("lud size %lu\n",attr.n);
      }  
      vsip_lusol_f(luAop,0,X);
      vsip_lusol_f(luAop,1,XT);
      vsip_lud_destroy_f(luAop);
    }
    }
    {int i,j; printf("A\\X\n"); for(i=0; i<NN; i++){
                  for(j=0; j<3; j++) printf("%9.2f%s",vsip_mget_f(X,i,j),(j == 2) ? "":",");
                  printf(";\n");
              }
    }
    {int i,j; printf("A'\\X\n"); for(i=0; i<NN; i++){
                  for(j=0; j<3; j++) printf("%9.2f%s",vsip_mget_f(XT,i,j),(j == 2) ? "":",");
                  printf(";\n");
              }
    }
    {
       vsip_valldestroy_f(b);
       vsip_valldestroy_f(x0);
       vsip_malldestroy_f(X);
       vsip_malldestroy_f(A);
    }
    }vsip_finalize((void*)0);return 1;
}