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; }
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; }
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; }
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; }