示例#1
0
文件: example20.c 项目: rrjudd/jvsip
int VU_vfrdB_f(vsip_vview_f *a,vsip_scalar_f range)
{ int ret = 0;
  vsip_length N_len=vsip_vgetlength_f(a);
  vsip_cvview_f *ca=vsip_cvcreate_f(N_len,VSIP_MEM_NONE);
  vsip_fft_f *fft =   vsip_ccfftip_create_f(
       N_len,1,VSIP_FFT_FWD,0,0);
  vsip_vview_f *ra = vsip_vrealview_f(ca),
               *ia = vsip_vimagview_f(ca),
               *ta = vsip_vcloneview_f(a);
  vsip_offset s = (vsip_offset)vsip_vgetstride_f(ta);
  if((ca == NULL) || (fft == NULL) || (ra == NULL) ||
     (ia == NULL) || (ta == NULL)){ret =  1;
  }else{
     vsip_vfill_f(0,ia); vsip_vcopy_f_f(a,ra);
     vsip_ccfftip_f(fft,ca);
     vsip_vcmagsq_f(ca,ra);
     {  vsip_index ind;/* scale by "range" min to max*/
        vsip_scalar_f max = vsip_vmaxval_f(ra,&ind);
        vsip_scalar_f min = max * range;
        vsip_vclip_f(ra,min,max,min,max,ra);
     }
     if(N_len%2){vsip_length Nlen = N_len/2;
         vsip_vputlength_f(ta,Nlen+1);
         vsip_vputlength_f(ra,Nlen+1);
         vsip_vputoffset_f(ta,Nlen * s);
         vsip_vcopy_f_f(ra,ta);
         vsip_vputlength_f(ra,Nlen);
         vsip_vputlength_f(ta,Nlen);
         vsip_vputoffset_f(ta,vsip_vgetoffset_f(a));
         vsip_vputoffset_f(ra,Nlen+1);
         vsip_vcopy_f_f(ra,ta);
     }else{vsip_length Nlen = N_len/2;
         vsip_vcopy_f_f(ra,ta);
         vsip_vputlength_f(ta,Nlen);
         vsip_vputlength_f(a,Nlen);
         vsip_vputoffset_f(ta,(vsip_offset)(Nlen) * s);
         vsip_vswap_f(ta,a);
         vsip_vputlength_f(a,N_len);
      }vsip_vlog10_f(a,a);vsip_svmul_f(10,a,a);
   }vsip_fft_destroy_f(fft);
     vsip_vdestroy_f(ra); vsip_vdestroy_f(ia);
     vsip_cvalldestroy_f(ca);vsip_vdestroy_f(ta);
     return ret;
}
示例#2
0
int VU_qrd_f(
      vsip_mview_f *A,
      vsip_mview_f *R){
  vsip_length N = vsip_mgetrowlength_f(A);
  vsip_scalar_f r;
  vsip_stride cvst = vsip_mgetrowstride_f(A);
  vsip_offset a0o = vsip_mgetoffset_f(A);
  vsip_offset ao = a0o;
  vsip_length i,j;
  vsip_vview_f *a = vsip_mcolview_f(A,0);
  vsip_vview_f *q = vsip_mcolview_f(A,0);
  if((a == NULL) || (q == NULL)){  /* failure to create vector view */
      vsip_vdestroy_f(a);  /* destroy in case one create worked */
      vsip_vdestroy_f(q);
      return 1; /* zero implies success */
  }
  for(i=0; i<N; i++){
    vsip_vputoffset_f(a,a0o);
    vsip_vputoffset_f(q,a0o);
    vsip_mput_f(R,i,i,(r = sqrt(vsip_vdot_f(q,q))));
    if(r == 0){ /* no devide by zero */
        vsip_vdestroy_f(a);  /* clean up any creates */
        vsip_vdestroy_f(q);
        return 2; /* zero implies success */
    }
    vsip_svmul_f((1./r),q,q);
    a0o += cvst;
    for(j=i+1; j<N; j++){
       ao += cvst;
       vsip_vputoffset_f(a,ao);
       vsip_mput_f(R,i,j,(r = vsip_vdot_f(q,a)));
       vsip_mput_f(R,j,i,0); /* make sure lower diagonal is initialized to zero */
       vsip_vsma_f(q,-r,a,a);
    }
    ao = a0o;
  }
  vsip_vdestroy_f(a);  /* clean up any creates */
  vsip_vdestroy_f(q);
  return 0; /* zero implies success */
}
void VU_mprodqt_f(
     vsip_mview_f *C,
     vsip_mview_f *H,
     vsip_scalar_f *beta)
{
     vsip_mattr_f attr_C,attr_C0;
     vsip_mattr_f attr_H0;
     vsip_vattr_f attr_h,attr_v0;
     vsip_vview_f *h = vsip_mcolview_f(H,0);
     vsip_length m,n;
     vsip_length j;
     vsip_stride k;
     vsip_vview_f *v, *w;
     vsip_mgetattrib_f(C,&attr_C);
     vsip_vgetattrib_f(h,&attr_h);
     vsip_mgetattrib_f(H,&attr_H0);
     attr_C0 = attr_C;
     m = attr_C.col_length;
     n = attr_C.row_length;
     v = vsip_vcreate_f(n,0);
     vsip_vgetattrib_f(v,&attr_v0);
     w = vsip_vcreate_f(m,0);
     vsip_vfill_f(0,v);
     for(k= attr_H0.row_length - 1; k >= 0; k--){
         j = (vsip_length)k;
         attr_h.offset = j * attr_H0.row_stride +
                         j * attr_H0.col_stride + attr_H0.offset;
         attr_h.length = attr_H0.col_length - j;
         vsip_vputlength_f(v,attr_h.length);
         vsip_vputoffset_f(v,n - attr_h.length);
         vsip_vputattrib_f(h,&attr_h);
         vsip_vcopy_f_f(h,v);
         vsip_vput_f(v,0,1);
         vsip_vputattrib_f(v,&attr_v0);
         VU_smvprod_f(-beta[j],C,v,w);
         VU_opu_f(C,w,v);              
     }
     printf("here 2\n");
     vsip_mputattrib_f(C,&attr_C0);
     vsip_vdestroy_f(h);
     vsip_valldestroy_f(v);
     vsip_valldestroy_f(w);
     return;
}
void VU_qtprodm_f(
     vsip_mview_f *C,
     vsip_mview_f *H,
     vsip_scalar_f *beta)
{
     vsip_mattr_f attr_C,attr_C0;
     vsip_mattr_f attr_H0;
     vsip_vattr_f attr_h,attr_v0;
     vsip_vview_f *h = vsip_mcolview_f(H,0);
     vsip_length m,n;
     vsip_length j;
     vsip_stride k;
     vsip_vview_f *v, *w;
     vsip_mgetattrib_f(C,&attr_C);
     vsip_vgetattrib_f(h,&attr_h);
     vsip_mgetattrib_f(H,&attr_H0);
     attr_C0 = attr_C;
     m = attr_C.col_length;
     n = attr_C.row_length;
     v = vsip_vcreate_f(m,0);
     vsip_vgetattrib_f(v,&attr_v0);
     w = vsip_vcreate_f(n,0);
     for(k= 0; k < attr_H0.row_length; k++){
         j = (vsip_length)k;
         attr_h.offset = j * attr_H0.row_stride +
                         j * attr_H0.col_stride + attr_H0.offset;
         attr_h.length = attr_H0.col_length -j;
         vsip_vputlength_f(v,attr_h.length);
         vsip_vputoffset_f(v,m - attr_h.length);
         vsip_vputattrib_f(h,&attr_h);
         vsip_vcopy_f_f(h,v);
         vsip_vput_f(v,0,1);
         vsip_vputattrib_f(v,&attr_v0);
         VU_svmprod_f(-beta[j],v,C,w);
         VU_opu_f(C,v,w);
         vsip_vput_f(v,k,0);
     }
     vsip_mputattrib_f(C,&attr_C0);
     vsip_vdestroy_f(h);
     vsip_valldestroy_f(v);
     vsip_valldestroy_f(w);
     return;
}
int main() {  
vsip_init((void*)0);{
   vsip_mview_f *A = vsip_mcreate_f(NN,NN,VSIP_ROW,VSIP_MEM_NONE);
   vsip_mview_f *B = vsip_mcreate_f(NN,2,VSIP_COL,VSIP_MEM_NONE);
   struct tms t_buf;
   clock_t tclicks;
   vsip_lu_f *lud = vsip_lud_create_f(NN);
   printf("data fill in times 1 %lu\n",times(&t_buf));
   { int i;
      vsip_vview_f *r = vsip_mrowview_f(A,0);
      vsip_offset o = vsip_vgetoffset_f(r);
      vsip_stride s = vsip_mgetcolstride_f(A);
      for(i=0; i<NN; i++){
          vsip_vputoffset_f(r,o);
          vsip_vramp_f(i,1,r);
          o += s;
      }
      vsip_vdestroy_f(r);
   }
   { vsip_vview_f *r = vsip_mdiagview_f(A,0);
      vsip_vfill_f(0,r);
      vsip_vdestroy_f(r);
   }
   {  
      vsip_vview_f *r = vsip_mcolview_f(B,0);
      vsip_vramp_f(1,.01,r);
      vsip_vdestroy_f(r); r = vsip_mcolview_f(B,1);
      vsip_vramp_f(2,.01,r); vsip_vdestroy_f(r); 
   }
/*   printf("A = "); VU_mprintm_f("7.4",A);  */
/*   printf("B = "); VU_mprintm_f("7.4",B);  */
   printf("lud in times 2 %lu\n",(tclicks = times(&t_buf)));
   vsip_lud_f(lud,A);
   printf("lud out times 3 %lu\n",times(&t_buf) - tclicks);
/*   printf("Adec = "); VU_mprintm_f("7.4",A); */  
   printf("lusol in times 4 %lu\n",(tclicks = times(&t_buf)));
   vsip_lusol_f(lud,VSIP_MAT_NTRANS,B);
   printf("lusol out times 5 %lu\n",times(&t_buf) - tclicks);
/*   printf("B = "); VU_mprintm_f("7.4",B);   */
   } vsip_finalize((void*)0);return 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;        
}