int main() { vsip_vview_d *dataA; vsip_vview_d *dataB; vsip_vview_vi *Index; vsip_vview_bl *dataBl; int i; vsip_length N; vsip_init((void *)0); dataA = vsip_vcreate_d(L, VSIP_MEM_NONE); dataB = vsip_vcreate_d(L, VSIP_MEM_NONE); Index = vsip_vcreate_vi(L, VSIP_MEM_NONE); dataBl= vsip_vcreate_bl(L, VSIP_MEM_NONE); /* make up some data */ vsip_vramp_d(0,2 * PI/(L-1),dataA); vsip_vcos_d(dataA,dataB); /* find out where dataB is greater than zero */ vsip_vfill_d(0,dataA); vsip_vlgt_d(dataB,dataA,dataBl); /* find the index where dataB is greater than zero */ if((N = vsip_vindexbool(dataBl,Index))) { /* make a vector of those points where dataB is greater than zero*/ vsip_vgather_d(dataB,Index,vsip_vputlength_d(dataA,N)); /*print out the results */ printf("Index Value\n"); for(i=0; i<N; i++) printf("%li %6.3f\n", vsip_vget_vi(Index,i), vsip_vget_d(dataA,i)); } else { printf("Zero Length Index"); exit(0); } vsip_vfill_d(0,dataB); vsip_vscatter_d(dataA,dataB,Index); for(i=0; i<L; i++) printf("%6.3f\n",vsip_vget_d(dataB,i)); /*recover the data space*/ vsip_blockdestroy_d(vsip_vdestroy_d(dataA)); vsip_blockdestroy_d(vsip_vdestroy_d(dataB)); vsip_blockdestroy_vi(vsip_vdestroy_vi(Index)); vsip_blockdestroy_bl(vsip_vdestroy_bl(dataBl)); vsip_finalize((void *)0); return 0; }
vsip_mview_d* VU_I_d(vsip_length M) { vsip_mview_d *I = vsip_mcreate_d(M,M,VSIP_ROW,VSIP_MEM_NONE); if(I != NULL){ vsip_vview_d *row = vsip_mrowview_d(I,0); if(row != NULL){ vsip_vputlength_d(row,(vsip_length)(M * M)); vsip_vfill_d((vsip_scalar_d)0.0,row); vsip_vputlength_d(row,M); vsip_vputstride_d(row,(vsip_stride) (M + 1)); vsip_vfill_d((vsip_scalar_d)1.0,row); vsip_vdestroy_d(row); } else { vsip_mdestroy_d(I); return (vsip_mview_d*) NULL; } } else { return (vsip_mview_d*) NULL; } return I; }
int main (){vsip_init((void*)0); { int i; vsip_cvview_d* vector = vsip_cvcreate_d(L,0); vsip_vview_d* realIn = vsip_vrealview_d(vector); vsip_vview_d* imagIn = vsip_vimagview_d(vector); vsip_fft_d* fftplan = vsip_ccfftip_create_d(L,1,-1,0,0); vsip_fft_d* fftplanI = vsip_ccfftip_create_d(L,(double)1/L,1,0,0); char printDataOne[L][20], printDataTwo[L][30]; /* put some data in realIn*/ vsip_vramp_d(0, 2 * VU_PI * F, realIn); vsip_vcos_d(realIn,realIn); /* print realIn */ for(i=0; i<L; i++){ sprintf(printDataOne[i],"%2d input -> %7.4f",i, vsip_vget_d(realIn,i)); } /*make sure imagIn is full of zeros*/ vsip_vfill_d(0,imagIn); /*find the fft*/ vsip_ccfftip_d(fftplan,vector); for(i=0; i<L; i++){ sprintf(printDataTwo[i]," fft -> (%7.3f, %7.3f)", vsip_real_d(vsip_cvget_d(vector,i)), vsip_imag_d(vsip_cvget_d(vector,i))); } /*invert the fft*/ vsip_ccfftip_d(fftplanI,vector); /*print it */ for(i=0; i<L; i++){ printf("%s %s ifft -> (%7.3f, %7.3f)\n", printDataOne[i], printDataTwo[i], vsip_real_d(vsip_cvget_d(vector,i)), vsip_imag_d(vsip_cvget_d(vector,i))); } { vsip_vdestroy_d((void*)imagIn); vsip_vdestroy_d((void*)realIn); vsip_cblockdestroy_d(vsip_cvdestroy_d((void*)vector)); vsip_fft_destroy_d((void*)fftplan); vsip_fft_destroy_d((void*)fftplanI); } } vsip_finalize((void*)0);return 0; }
int main() { int i; /* define some vectors */ vsip_vview_d* dataReOne; vsip_vview_d* dataReTwo; vsip_vview_d* dataReQuotient; vsip_cvview_d* dataComplex; vsip_cvview_d* dataComplexQuotient; vsip_init((void *)0); dataReOne = vsip_vcreate_d(L, VSIP_MEM_NONE); dataReTwo = vsip_vcreate_d(L, VSIP_MEM_NONE); dataReQuotient = vsip_vcreate_d(L, VSIP_MEM_NONE); dataComplex = vsip_cvcreate_d(L, VSIP_MEM_NONE); dataComplexQuotient = vsip_cvcreate_d(L, VSIP_MEM_NONE); /* make up some data */ vsip_vramp_d(1,1,dataReOne); vsip_vfill_d(2,dataReTwo); vsip_vcmplx_d(dataReTwo,dataReOne,dataComplex); /*divide one by two and print the input and output */ vsip_vdiv_d(dataReOne,dataReTwo,dataReQuotient); for(i=0; i<L; i++) printf("%7.4f / %7.4f = %7.4f\n", vsip_vget_d(dataReOne,i), vsip_vget_d(dataReTwo,i), vsip_vget_d(dataReQuotient,i)); printf("\n"); /*divide one by complex and print the input and output */ vsip_rcvdiv_d(dataReOne,dataComplex,dataComplexQuotient); for(i=0; i<L; i++) printf("%7.4f / (%7.4f + %7.4fi) = (%7.4f + %7.4fi)\n", vsip_vget_d(dataReOne,i), vsip_real_d(vsip_cvget_d(dataComplex,i)), vsip_imag_d(vsip_cvget_d(dataComplex,i)), vsip_real_d(vsip_cvget_d(dataComplexQuotient,i)), vsip_imag_d(vsip_cvget_d(dataComplexQuotient,i))); /* destroy created objects */ vsip_blockdestroy_d(vsip_vdestroy_d(dataReOne)); vsip_blockdestroy_d(vsip_vdestroy_d(dataReTwo)); vsip_blockdestroy_d(vsip_vdestroy_d(dataReQuotient)); vsip_cblockdestroy_d(vsip_cvdestroy_d(dataComplex)); vsip_cblockdestroy_d(vsip_cvdestroy_d(dataComplexQuotient)); vsip_finalize((void *)0); return 0; }
int main (){ vsip_init((void*)0); { int i; vsip_cblock_d* blockOut = vsip_cblockcreate_d(2 * L, 0); vsip_cvview_d* vectorOut = vsip_cvbind_d(blockOut,0,2,L); vsip_cvview_d* vectorIn = vsip_cvcreate_d(L,0); vsip_vview_d* realIn = vsip_vrealview_d(vectorIn); vsip_vview_d* imagIn = vsip_vimagview_d(vectorIn); vsip_fft_d* fftplan = vsip_ccfftop_create_d(L,1,-1,0,0); vsip_fft_d* fftplanI = vsip_ccfftop_create_d(L,(double)1/L,1,0,0); char inputdata[L][20]; /* put some data in realIn*/ vsip_vramp_d(0, 2 * PI * F, realIn); vsip_vcos_d(realIn,realIn); /* print realIn */ for(i=0; i<L; i++) sprintf(inputdata[i],"%2d input-> %7.3f",i, vsip_vget_d(realIn,i)); /*make sure imagIn is full of zeros*/ vsip_vfill_d(0,imagIn); /*find the fft*/ vsip_ccfftop_d(fftplan,vectorIn,vectorOut); /*invert the fft*/ vsip_ccfftop_d(fftplanI,vectorOut,vectorIn); /*print it */ for(i=0; i<L; i++) printf("%s fft -> (%7.3f, %7.3f) ifft -> (%7.3f, %7.3f)\n", inputdata[i], vsip_real_d(vsip_cvget_d(vectorOut,i)), vsip_imag_d(vsip_cvget_d(vectorOut,i)), vsip_real_d(vsip_cvget_d(vectorIn,i)), vsip_imag_d(vsip_cvget_d(vectorIn,i))); { vsip_vdestroy_d(imagIn); vsip_vdestroy_d(realIn); vsip_cblockdestroy_d(vsip_cvdestroy_d(vectorIn)); vsip_cblockdestroy_d(vsip_cvdestroy_d(vectorOut)); vsip_fft_destroy_d(fftplan); vsip_fft_destroy_d(fftplanI); } } vsip_finalize((void*)0);return 0; }
void ref_corr_d(vsip_bias bias, vsip_support_region sup, vsip_vview_d const *ref, vsip_vview_d const *in, vsip_vview_d const *out) { vsip_length M = vsip_vgetlength_d(ref); vsip_length N = vsip_vgetlength_d(in); vsip_length P = vsip_vgetlength_d(out); vsip_length expected_P = ref_corr_output_size(sup, M, N); vsip_stride shift = ref_expected_shift(sup, M); assert(expected_P == P); vsip_vview_d *sub = vsip_vcreate_d(M, VSIP_MEM_NONE); // compute correlation vsip_index i; for (i=0; i<P; ++i) { vsip_vfill_d(0, sub); vsip_stride pos = (vsip_stride)i + shift; double scale; if (pos < 0) { vsip_vview_d *subsub = vsip_vsubview_d(sub, -pos, M + pos); vsip_vview_d *insub = vsip_vsubview_d(in, 0, M + pos); vsip_vcopy_d_d(insub, subsub); vsip_vdestroy_d(subsub); vsip_vdestroy_d(insub); scale = M + pos; } else if (pos + M > N) { vsip_vview_d *subsub = vsip_vsubview_d(sub, 0, N - pos); vsip_vview_d *insub = vsip_vsubview_d(in, pos, N - pos); vsip_vcopy_d_d(insub, subsub); vsip_vdestroy_d(subsub); vsip_vdestroy_d(insub); scale = N - pos; } else { vsip_vview_d *insub = vsip_vsubview_d(in, pos, M); vsip_vcopy_d_d(insub, sub); vsip_vdestroy_d(insub); scale = M; } #if VSIP_IMPL_CORR_CORRECT_SAME_SUPPORT_SCALING #else if (sup == VSIP_SUPPORT_SAME) { if (i < (M/2)) scale = i + (M+1)/2; // i + ceil(M/2) else if (i < N - (M/2)) scale = M; // M else scale = N - 1 + (M+1)/2 - i; // N-1+ceil(M/2)-i } #endif double val = vsip_vdot_d(ref, sub); if (bias == VSIP_UNBIASED) val /= scale; vsip_vput_d(out, i, val); } }
void test_corr_d(vsip_support_region support, vsip_bias bias, vsip_length ref_size, vsip_length input_size) { vsip_length const n_loop = 3; vsip_length const output_size = ref_corr_output_size(support, ref_size, input_size); vsip_corr1d_d *corr = vsip_corr1d_create_d(ref_size, input_size, support, 0, VSIP_ALG_SPACE); vsip_corr1d_attr attr; vsip_corr1d_getattr_d(corr, &attr); test_assert(attr.support == support); test_assert(attr.ref_len == ref_size); test_assert(attr.data_len == input_size); test_assert(attr.lag_len == output_size); vsip_randstate *rand = vsip_randcreate(0, 1, 1, VSIP_PRNG); vsip_vview_d *ref = vsip_vcreate_d(ref_size, VSIP_MEM_NONE); vsip_vview_d *in = vsip_vcreate_d(input_size, VSIP_MEM_NONE); vsip_vview_d *out = vsip_vcreate_d(output_size, VSIP_MEM_NONE); vsip_vfill_d(100, out); vsip_vview_d *chk = vsip_vcreate_d(output_size, VSIP_MEM_NONE); vsip_vfill_d(101, chk); vsip_index loop; for (loop=0; loop<n_loop; ++loop) { if (loop == 0) { vsip_vfill_d(1, ref); vsip_vramp_d(0, 1, in); } else if (loop == 1) { vsip_vrandu_d(rand, ref); vsip_vramp_d(0, 1, in); } else { vsip_vrandu_d(rand, ref); vsip_vrandu_d(rand, in); } vsip_correlate1d_d(corr, bias, ref, in, out); ref_corr_d(bias, support, ref, in, chk); double error = verror_db_d(out, chk); #if VERBOSE if (error > -100) { vsip_index i; for (i=0; i<output_size; ++i) { printf("%d : out = %f, chk = %f\n", i, vsip_vget_d(out, i), vsip_vget_d(chk, i)); } printf("error = %f\n", error); } #endif test_assert(error < -100); } }
int main(){vsip_init((void*)0); { void VU_cmprint_d(vsip_cmview_d*); /* int i;*/ vsip_cmview_d *w = vsip_cmcreate_d(5,L+1,VSIP_ROW,0); vsip_cmview_d *W = vsip_cmcreate_d(5,L+1,VSIP_ROW,0); vsip_cmview_d *IW = vsip_cmcreate_d(5,L+1,VSIP_ROW,0); vsip_vview_d *blackman = vsip_vcreate_blackman_d(L,0), *hanning = vsip_vcreate_hanning_d(L,0), *kaiser = vsip_vcreate_kaiser_d(L,beta,0), *cheby = vsip_vcreate_cheby_d(L,ripple,0); vsip_fftm_d *fft = vsip_ccfftmop_create_d(4,L,1,VSIP_FFT_FWD,VSIP_ROW,0,0); vsip_fftm_d *ifft = vsip_ccfftmop_create_d(4, L, 1.0/L, VSIP_FFT_INV, VSIP_ROW,0,0); /*printf(" blackman "); printf(" hanning kaiser chebyshev\n"); for(i=0; i < L; i++) printf("%11.8f; %11.8f; %11.8f; %11.8f\n", vsip_vget_d(blackman,i), vsip_vget_d(hanning,i), vsip_vget_d(kaiser,i), vsip_vget_d(cheby,i)); */ vsip_cmputcollength_d(w,4); vsip_cmputcollength_d(W,4); vsip_cmputcollength_d(IW,4); vsip_cmputrowlength_d(w,L); vsip_cmputrowlength_d(W,L); vsip_cmputrowlength_d(IW,L); { vsip_mview_d *wR = vsip_mrealview_d(w); vsip_mview_d *wI = vsip_mimagview_d(w); vsip_vview_d *v = vsip_mrowview_d(wR,0); vsip_vview_d *vi = vsip_mrowview_d(wI,0); vsip_offset o = (vsip_offset)vsip_mgetcolstride_d(wR); vsip_offset oi = (vsip_offset)vsip_mgetcolstride_d(wI); vsip_vcopy_d_d(blackman,v); vsip_vfill_d(0,vi); vsip_vputoffset_d(v,vsip_vgetoffset_d(v) + o); vsip_vputoffset_d(vi,vsip_vgetoffset_d(vi) + oi); vsip_vcopy_d_d(hanning,v); vsip_vfill_d(0,vi); vsip_vputoffset_d(v,vsip_vgetoffset_d(v) + o); vsip_vputoffset_d(vi,vsip_vgetoffset_d(vi) + oi); vsip_vcopy_d_d(kaiser,v); vsip_vfill_d(0,vi); vsip_vputoffset_d(v,vsip_vgetoffset_d(v) + o); vsip_vputoffset_d(vi,vsip_vgetoffset_d(vi) + oi); vsip_vcopy_d_d(cheby,v); vsip_vfill_d(0,vi); vsip_mdestroy_d(wR); vsip_vdestroy_d(v); vsip_mdestroy_d(wI); vsip_vdestroy_d(vi); } vsip_ccfftmop_d(fft,w,W); vsip_ccfftmop_d(ifft,W,IW); printf(" w = ");VU_cmprint_d(w); printf(" W = ");VU_cmprint_d(W); printf("IW = ");VU_cmprint_d(IW); {/* test vsip_fftm_getattr_d */ vsip_fftm_attr_d attr; vsip_fftm_getattr_d(fft, &attr); printf("%lu %lu %lu %lu %d %f %d %d\n", vsip_rowindex(attr.input), vsip_colindex(attr.input), vsip_rowindex(attr.output), vsip_colindex(attr.output), attr.place,attr.scale,attr.dir,attr.major); vsip_fftm_getattr_d(ifft, &attr); printf("%lu %lu %lu %lu %d %f %d %d\n", vsip_rowindex(attr.input), vsip_colindex(attr.input), vsip_rowindex(attr.output), vsip_colindex(attr.output), attr.place,attr.scale,attr.dir,attr.major); } vsip_fftm_destroy_d(fft); vsip_fftm_destroy_d(ifft); vsip_valldestroy_d(blackman); vsip_valldestroy_d(hanning); vsip_valldestroy_d(kaiser); vsip_valldestroy_d(cheby); vsip_cmalldestroy_d(w); vsip_cmalldestroy_d(W); vsip_cmalldestroy_d(IW); }vsip_finalize((void*)0);return 0; }
int main(){vsip_init((void*)0); { vsip_mview_d *A = vsip_mcreate_d(N,N,VSIP_ROW,0); vsip_vview_d *x0 = vsip_vcreate_d(N,0); vsip_vview_d *b = vsip_vcreate_d(N,0); vsip_mview_d *X = vsip_mcreate_d(N,3,VSIP_ROW,0); vsip_mview_d *XT = vsip_mcreate_d(N,3,VSIP_ROW,0); vsip_vramp_d(1,1,x0); vsip_vmul_d(x0,x0,x0); { int i; vsip_vview_d *r = vsip_mrowview_d(A,0); vsip_offset o = vsip_vgetoffset_d(r); for(i=0; i<N; i++){ vsip_vputoffset_d(r,o); vsip_vramp_d(i,1,r); o +=N; } vsip_vdestroy_d(r); } { vsip_vview_d *r = vsip_mdiagview_d(A,0); vsip_vfill_d(0,r); vsip_vdestroy_d(r); } {int i,j; printf("A = [\n"); for(i=0; i<N; i++){ for(j=0; j<N; j++) printf("%9.2f%s",vsip_mget_d(A,i,j),(j == N-1) ? "":","); printf(";\n"); } printf("]\n"); } { int k; vsip_vview_d *x; vsip_length L = vsip_mgetrowlength_d(X); for(k=0; k<L; k++){ x = vsip_mcolview_d(X,k); vsip_mvprod_d(A,x0,b); vsip_vcopy_d_d(b,x); vsip_svmul_d(2.0,x0,x0); vsip_vdestroy_d(x); } {int i,j; printf("X = [\n"); for(i=0; i<N; i++){ for(j=0; j<3; j++) printf("%9.2f%s",vsip_mget_d(X,i,j),(j == 2) ? "":","); printf(";\n"); } printf("]\n"); } {vsip_lu_d* luAop = vsip_lud_create_d(N); vsip_mcopy_d_d(X,XT); if(luAop == NULL) exit(1); vsip_lud_d(luAop,A); vsip_lusol_d(luAop,0,X); vsip_lusol_d(luAop,1,XT); vsip_lud_destroy_d(luAop); } } {int i,j; printf("A\\X\n"); for(i=0; i<N; i++){ for(j=0; j<3; j++) printf("%9.2f%s",vsip_mget_d(X,i,j),(j == 2) ? "":","); printf(";\n"); } } {int i,j; printf("A'\\X\n"); for(i=0; i<N; i++){ for(j=0; j<3; j++) printf("%9.2f%s",vsip_mget_d(XT,i,j),(j == 2) ? "":","); printf(";\n"); } } { vsip_valldestroy_d(b); vsip_valldestroy_d(x0); vsip_malldestroy_d(X); vsip_malldestroy_d(A); } }vsip_finalize((void*)0);return 1; }