void VU_cmprodqh_f(
     vsip_cmview_f *C,
     vsip_cmview_f *H,
     vsip_scalar_f *beta)
{
     vsip_cmattr_f attr_C,attr_C0;
     vsip_cmattr_f attr_H0;
     vsip_cvattr_f attr_h,attr_v0;
     vsip_cvview_f *h = vsip_cmcolview_f(H,0);
     vsip_length m,n;
     vsip_length j;
     vsip_stride k;
     vsip_cvview_f *v, *w;
     vsip_cmgetattrib_f(C,&attr_C);
     vsip_cvgetattrib_f(h,&attr_h);
     vsip_cmgetattrib_f(H,&attr_H0);
     attr_C0 = attr_C;
     m = attr_C.col_length;
     n = attr_C.row_length;
     v = vsip_cvcreate_f(n,0);
     vsip_cvgetattrib_f(v,&attr_v0);
     w = vsip_cvcreate_f(m,0);
     vsip_cvfill_f(vsip_cmplx_f(0,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_cvputlength_f(v,attr_h.length);
         vsip_cvputoffset_f(v,n - attr_h.length);
         vsip_cvputattrib_f(h,&attr_h);
         vsip_cvcopy_f_f(h,v);
         vsip_cvput_f(v,0,vsip_cmplx_f(1,0));
         vsip_cvputattrib_f(v,&attr_v0);
         VU_rscmvprod_f(-beta[j],C,v,w);
         VU_copuh_f(C,w,v);              
     }
     vsip_cmputattrib_f(C,&attr_C0);
     vsip_cvdestroy_f(h);
     vsip_cvalldestroy_f(v);
     vsip_cvalldestroy_f(w);
     return;
}
Пример #2
0
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;
}
Пример #3
0
int main () {
  vsip_init((void*)0);{
     double time0, time_rc=0, time_cr=0;
     int i;
     /*int k; for(k=0; k<4; k++)*/{
     vsip_cvview_f* vectorOut = vsip_cvcreate_f(L/2 + 1,VSIP_MEM_NONE);
     vsip_vview_f* vectorIn = vsip_vcreate_f(L,VSIP_MEM_NONE);
     vsip_vview_f* ivectorOut = vsip_vcreate_f(L,VSIP_MEM_NONE);
     vsip_fft_f* fftplan  = vsip_rcfftop_create_f(L,1.0/L,0,VSIP_ALG_SPACE);
     vsip_fft_f* ifftplan = vsip_crfftop_create_f(L,(double)(1.0),0,VSIP_ALG_TIME);
     char printbuffer[10][40];
/*     char printbuffer[L/2][40]; */
   
     vsip_vramp_f(0, 2 * M_PI * F, vectorIn);
     vsip_vcos_f(vectorIn,vectorIn);
   
     /* print vectorIn */
     /* for(i=0; i<L/2; i++) */
     for(i=0; i<10; i++)
        sprintf(printbuffer[i],"%2d, %2d input-> %7.3f, %7.3f",
                 i, i+L/2, vsip_vget_f(vectorIn,i), vsip_vget_f(vectorIn,i+L/2));

     /*find the fft*/
     for(i=0; i<N; i++){
        /* printf("%d\n",i);fflush(stdout); */
        time0=VU_ansi_c_clock();
        vsip_rcfftop_f(fftplan,vectorIn,vectorOut);
        time_rc += (VU_ansi_c_clock() - time0);
        /*find the inverse fft*/
        time0=VU_ansi_c_clock();
        vsip_crfftop_f(ifftplan,vectorOut,ivectorOut);  
        time_cr += (VU_ansi_c_clock() - time0);
     }
     /*print it */
     /* for(i=0; i<L/2; i++) */
     for(i=0; i<10; i++)
        printf("%s   fft -> (%9.4f, %9.4f) ifft-> %7.3f, %7.3f\n" ,
              printbuffer[i],
              vsip_real_f(vsip_cvget_f(vectorOut,i)),
              vsip_imag_f(vsip_cvget_f(vectorOut,i)),
              vsip_vget_f(ivectorOut,i), 
              vsip_vget_f(ivectorOut,i+L/2));
     printf("                                  fft -> (%9.4f, %9.4f)\n",
              vsip_real_f(vsip_cvget_f(vectorOut,i)),
              vsip_imag_f(vsip_cvget_f(vectorOut,i)));
    {/* test vsip_fft_getattr_f */
         vsip_fft_attr_f attr;
         vsip_fft_getattr_f(fftplan, &attr);
         printf("%lu %lu %d %f %d\n",attr.input,attr.output,attr.place,attr.scale,attr.dir);
         vsip_fft_getattr_f(ifftplan, &attr);
         printf("%lu %lu %d %f %d\n",attr.input,attr.output,attr.place,attr.scale,attr.dir);
     }
     vsip_cvalldestroy_f(vectorOut);
     vsip_valldestroy_f(vectorIn);
     vsip_fft_destroy_f(fftplan);
     printf("time_rc %f; time_cr %f\n",time_rc/(double)N, time_cr/(double)N);
   } 
   }
   vsip_finalize((void*)0); 
   return 0;
}
Пример #4
0
int main(){
vsip_init((void*)0);{
    vsip_cvview_f *A = vsip_cvcreate_f(16,0);
    vsip_cvview_f *a = vsip_cvsubview_f(A,0,4);
    vsip_cvview_f *B = vsip_cvcreate_f(16,0);
    vsip_cvview_f *b = vsip_cvsubview_f(B,0,4);
    vsip_scalar_f user_data_r[16],*udr;
    vsip_scalar_f user_data_i[16],*udi;
    vsip_cblock_f *cblock = vsip_cblockbind_f(
             user_data_r,user_data_i,16,0);
    vsip_cvview_f *c = vsip_cvbind_f(cblock,1,2,4);

    /* unit stride data_even out of place */
    FILE *fptr = fopen("data_even","r");
    vsip_cblockadmit_f(cblock,VSIP_FALSE);
    printf("test cvlog\n");
    printf("unit stride data even out of place");
    VU_cvreadf_f(fptr,a);
    fclose(fptr);
    printf("input vector\n"); VU_cvprintm_f("6.4",a);
    vsip_cvlog_f(a,b);
    printf("input vector after operation\n");VU_cvprintm_f("6.4",a);
    printf("output vector\n"); VU_cvprintm_f("6.4",b);
    /* inplace */
    vsip_cvlog_f(a,a);
    printf("output of inplace\n"); VU_cvprintm_f("6.4",a);

    /* unit stride data_odd out of place */
    printf("unit stride data odd out of place\n");
    vsip_cvputlength_f(a,5);
    vsip_cvputlength_f(b,5);
    fptr = fopen("data_odd","r");
    VU_cvreadf_f(fptr,a);
    fclose(fptr);
    printf("input vector\n"); VU_cvprintm_f("6.4",a);
    vsip_cvlog_f(a,b);
    printf("input vector after operation\n");VU_cvprintm_f("6.4",a);
    printf("output vector\n"); VU_cvprintm_f("6.4",b);

    /* input stride 1 output stride 2 */
    printf("input stride 1 output stride 2\n");
    vsip_cvputstride_f(b,2);
    fptr = fopen("data_odd","r"); VU_cvreadf_f(fptr,a); fclose(fptr);
    vsip_cvlog_f(a,b);
    printf("output vector\n"); VU_cvprintm_f("6.4",b);

    /* input stride 2 output stride 3 */
    printf("input stride 2 output stride 3\n");
    vsip_cvputstride_f(a,2);
    vsip_cvputstride_f(b,3);
    fptr = fopen("data_odd","r"); VU_cvreadf_f(fptr,a); fclose(fptr);
    vsip_cvlog_f(a,b);
    printf("output vector\n"); VU_cvprintm_f("6.4",b);

    /* input stride 2 output stride 1 */
    printf("input stride 2 output stride 1\n");
    vsip_cvputstride_f(a,2);
    vsip_cvputstride_f(b,1);
    fptr = fopen("data_odd","r"); VU_cvreadf_f(fptr,a); fclose(fptr);
    vsip_cvlog_f(a,b);
    printf("output vector\n"); VU_cvprintm_f("6.4",b);

    /* in place stride 2 */
    printf("in place stride 2\n");
    fptr = fopen("data_odd","r"); VU_cvreadf_f(fptr,a); fclose(fptr);
    vsip_cvlog_f(a,a);
    printf("output vector\n"); VU_cvprintm_f("6.4",a);

    /* out of place from user block to VSIPL block */
    printf("out of place from user block to VSIPL block\n");
    printf("User block associated with split complex data array\n");
    printf("user view offset 1, stride 2\n");
    printf("vsipl view offset 0, stride 2\n");
    fptr = fopen("data_odd","r"); VU_cvreadf_f(fptr,c); fclose(fptr);
    vsip_cvlog_f(c,a);
    printf("output vector\n"); VU_cvprintm_f("6.4",a);

    /* clean up */
    vsip_cblockrelease_f(cblock,VSIP_FALSE,&udr,&udi);
    vsip_cvalldestroy_f(c);
    vsip_cvdestroy_f(a);
    vsip_cvdestroy_f(b);
    vsip_cvalldestroy_f(A);
    vsip_cvalldestroy_f(B);
    }vsip_finalize((void*)0);return 0;
}