int main() { int i; vsip_randstate *state; vsip_cmview_d *xy; vsip_cvview_d *xy_row; vsip_length stride; vsip_cvview_d *sum; vsip_fftm_d *ccfftmip; vsip_length seed =0, num_procs=1, id=1; vsip_init((void *)0); /* Initialize Random Number Generator */ state = vsip_randcreate(seed, num_procs, id, VSIP_PRNG); /* Row major, 64 (ROWS) of 16 point data vectors */ xy = vsip_cmcreate_d(ROWS, 16, VSIP_ROW, VSIP_MEM_NONE); /* Bind xy_row view initially to row 0 of xy */ xy_row = vsip_cmrowview_d(xy, 0); /* Stride between column elements of xy */ stride = vsip_cmgetcolstride_d(xy); sum = vsip_cvcreate_d(N, VSIP_MEM_NONE); /* Create an in-place Cmplx->Cmplx Multiple N-pt FFT */ ccfftmip = vsip_ccfftmip_create_d(ROWS, N, 1.0, VSIP_FFT_FWD, VSIP_ROW, 1, VSIP_ALG_TIME); /* Initialize xy by rows with complex Gaussian noise N(0,1) */ for (i=0; i<ROWS; i++) { vsip_cvputoffset_d(xy_row, i*stride); /* view of row i of xy */ vsip_cvrand_d(state,xy_row); /* Initialize row i of xy */ } /* Compute an in-place Cmplx->Cmplx Multiple N-pt FFT using the ccfftmip object*/ vsip_ccfftmip_d(ccfftmip, xy); /* Coherently sum the rows together (in the Freq domain) */ vsip_cvputoffset_d(xy_row, 0); vsip_cvcopy_d_d(xy_row, sum); /* sum = row 0 of xy */ for (i=1; i<ROWS; i++) { vsip_cvputoffset_d(xy_row, i*stride); /* view of row i of xy */ vsip_cvadd_d(xy_row, sum, sum); /* sum += row i of xy */ } /* Print it */ printf("\nComplex Output Vector (Real, Imag)\n"); for(i=0; i<N; i++) printf("%d:\t" SCMPLX "\n", i, ACMPLX(vsip_cvget_d(sum,i))); printf("\n"); /* Destroy all the objects */ vsip_fftm_destroy_d(ccfftmip); vsip_cvdestroy(xy_row); vsip_cvdestroy(sum); vsip_cmalldestroy_d(xy); vsip_randdestroy(state); vsip_finalize((void *)0); return(0); }
void test_real_d(vsip_length N, vsip_major axis) { vsip_length rows = 5; vsip_length cols = N; vsip_length rows2 = 5; vsip_length cols2 = N/2 + 1; if (axis == VSIP_COL) { rows = N; cols = 5; rows2 = N/2 + 1; cols2 = 5; } vsip_fftm_d *f_fftm = vsip_rcfftmop_create_d(rows, cols, 1.0, axis, 0, VSIP_ALG_SPACE); vsip_fftm_d *i_fftm = vsip_crfftmop_create_d(rows, cols, 1.0/N, axis, 0, VSIP_ALG_SPACE); vsip_fftm_attr_d attr; vsip_fftm_getattr_d(f_fftm, &attr); test_assert(attr.input.r == rows && attr.input.c == cols); test_assert(attr.output.r == rows2 && attr.output.c == cols2); vsip_fftm_getattr_d(i_fftm, &attr); test_assert(attr.input.r == rows2 && attr.input.c == cols2); test_assert(attr.output.r == rows && attr.output.c == cols); vsip_mview_d *in = vsip_mcreate_d(rows, cols, VSIP_ROW, VSIP_MEM_NONE); vsip_randstate *rng = vsip_randcreate(0, 1, 1, VSIP_PRNG); vsip_mrandu_d(rng, in); vsip_randdestroy(rng); vsip_mview_d *inv = vsip_mcreate_d(rows, cols, VSIP_ROW, VSIP_MEM_NONE); vsip_cmview_d *out = vsip_cmcreate_d(rows2, cols2, VSIP_ROW, VSIP_MEM_NONE); vsip_rcfftmop_d(f_fftm, in, out); vsip_crfftmop_d(i_fftm, out, inv); test_assert(merror_db_d(inv, in) < -100.); vsip_malldestroy_d(inv); vsip_cmalldestroy_d(out); vsip_malldestroy_d(in); vsip_fftm_destroy_d(i_fftm); vsip_fftm_destroy_d(f_fftm); }
void test_complex_d(vsip_length N, vsip_major axis) { vsip_length rows = 5; vsip_length cols = N; if (axis == VSIP_COL) { rows = N; cols = 5; } vsip_fftm_d *f_fftm = vsip_ccfftmop_create_d(rows, cols, 1.0, VSIP_FFT_FWD, axis, 0, VSIP_ALG_SPACE); vsip_fftm_d *i_fftm = vsip_ccfftmop_create_d(rows, cols, 1.0/N, VSIP_FFT_INV, axis, 0, VSIP_ALG_SPACE); vsip_fftm_attr_d attr; vsip_fftm_getattr_d(f_fftm, &attr); test_assert(attr.input.r == rows && attr.input.c == cols); test_assert(attr.output.r == rows && attr.output.c == cols); vsip_fftm_getattr_d(i_fftm, &attr); test_assert(attr.input.r == rows && attr.input.c == cols); test_assert(attr.output.r == rows && attr.output.c == cols); vsip_cmview_d *in = vsip_cmcreate_d(rows, cols, VSIP_ROW, VSIP_MEM_NONE); vsip_randstate *rng = vsip_randcreate(0, 1, 1, VSIP_PRNG); vsip_cmrandu_d(rng, in); vsip_randdestroy(rng); vsip_cmview_d *out = vsip_cmcreate_d(rows, cols, VSIP_ROW, VSIP_MEM_NONE); vsip_cmview_d *inv = vsip_cmcreate_d(rows, cols, VSIP_ROW, VSIP_MEM_NONE); vsip_ccfftmop_d(f_fftm, in, out); vsip_ccfftmop_d(i_fftm, out, inv); test_assert(cmequal_d(inv, in)); vsip_cmalldestroy_d(inv); vsip_cmalldestroy_d(out); vsip_cmalldestroy_d(in); vsip_fftm_destroy_d(i_fftm); vsip_fftm_destroy_d(f_fftm); }
void test_ccorr_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_ccorr1d_d *corr = vsip_ccorr1d_create_d(ref_size, input_size, support, 0, VSIP_ALG_SPACE); vsip_ccorr1d_attr attr; vsip_ccorr1d_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_cvview_d *ref = vsip_cvcreate_d(ref_size, VSIP_MEM_NONE); vsip_cvview_d *in = vsip_cvcreate_d(input_size, VSIP_MEM_NONE); vsip_cvview_d *out = vsip_cvcreate_d(output_size, VSIP_MEM_NONE); vsip_cvfill_d(vsip_cmplx_d(100,0), out); vsip_cvview_d *chk = vsip_cvcreate_d(output_size, VSIP_MEM_NONE); vsip_cvfill_d(vsip_cmplx_d(101,0), chk); vsip_index loop; for (loop=0; loop<n_loop; ++loop) { if (loop == 0) { vsip_cvfill_d(vsip_cmplx_d(1,0), ref); vsip_cvramp_d(vsip_cmplx_d(0,0), vsip_cmplx_d(1,0), in); } else if (loop == 1) { vsip_cvrandu_d(rand, ref); vsip_cvramp_d(vsip_cmplx_d(0,0), vsip_cmplx_d(1,0), in); } else { vsip_cvrandu_d(rand, ref); vsip_cvrandu_d(rand, in); } vsip_ccorrelate1d_d(corr, bias, ref, in, out); ref_ccorr_d(bias, support, ref, in, chk); double error = cverror_db_d(out, chk); #if VERBOSE if (error > -100) { vsip_index i; for (i=0; i<output_size; ++i) { vsip_cscalar_d out_value = vsip_cvget_d(out, i); vsip_cscalar_d chk_value = vsip_cvget_d(chk, i); printf("%d : out = (%f, %f), chk = (%f, %f)\n", i, out_value.r, out_value.i, chk_value.r, chk_value.i); } printf("error = %f\n", error); } #endif test_assert(error < -100); } }
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; }
int main () { vsip_init((void*)0); { vsip_vview_f *kernel = vsip_vcreate_kaiser_f(128,15.0,VSIP_MEM_NONE); vsip_randstate *r_state = vsip_randcreate(11,1,1,VSIP_NPRNG); vsip_conv1d_f *conv; vsip_fir_f *fir; vsip_vview_f *data = vsip_vcreate_f( 2 * N_data,VSIP_MEM_NONE), *noise = vsip_vcreate_f( 3 * N_data,VSIP_MEM_NONE), *avg = vsip_vcreate_f( 4 * N_data,VSIP_MEM_NONE); int i; vsip_length N_len; vsip_vputlength_f(data, (vsip_length)((N_data-1)/dec1)+1); vsip_vputlength_f(avg, (vsip_length)((N_data-1)/dec1)+1); vsip_vputstride_f(data,2); vsip_vputstride_f(avg,4); vsip_vputlength_f(noise,N_data); vsip_vputstride_f(noise,3); conv = vsip_conv1d_create_f( kernel,VSIP_NONSYM, N_data,dec1,VSIP_SUPPORT_SAME,0,0); fir = vsip_fir_create_f( kernel,VSIP_NONSYM, N_data,dec1,VSIP_STATE_NO_SAVE,0,0); vsip_vfill_f(0,avg); for(i=0; i<10; i++){ vsip_vrandn_f(r_state,noise); vsip_convolve1d_f(conv,noise,data); VU_vfrdB_f(data,1e-13); vsip_vsma_f(data,0.1,avg,avg); } N_len = vsip_vgetlength_f(avg); { vsip_vview_f *x = vsip_vcreate_f( N_len,VSIP_MEM_NONE); vsip_vramp_f(-.5,1.0/(vsip_scalar_f)(N_len-1),x); VU_vfprintxyg_f("%8.6f %8.6f\n",x,avg,"conv_dec1"); vsip_vdestroy_f(x); } vsip_vfill_f(0,avg); for(i=0; i<10; i++){ vsip_vrandn_f(r_state,noise); vsip_firflt_f(fir,noise,data); VU_vfrdB_f(data,1e-13); vsip_vsma_f(data,0.1,avg,avg); } N_len = vsip_vgetlength_f(avg); { vsip_vview_f *x = vsip_vcreate_f( N_len,VSIP_MEM_NONE); vsip_vramp_f(-.5,1.0/(vsip_scalar_f)(N_len-1),x); VU_vfprintxyg_f("%8.6f %8.6f\n",x,avg,"fir_dec1"); vsip_vdestroy_f(x); } vsip_conv1d_destroy_f(conv); vsip_fir_destroy_f(fir); conv = vsip_conv1d_create_f( kernel,VSIP_NONSYM, N_data,dec3,VSIP_SUPPORT_SAME,0,0); fir = vsip_fir_create_f( kernel,VSIP_NONSYM, N_data,dec3,VSIP_STATE_NO_SAVE,0,0); vsip_vputlength_f(data, (vsip_length)((N_data-1)/dec3)+1); vsip_vputlength_f(avg, (vsip_length)((N_data-1)/dec3)+1); vsip_vfill_f(0,avg); for(i=0; i<10; i++){ vsip_vrandn_f(r_state,noise); vsip_convolve1d_f(conv,noise,data); VU_vfrdB_f(data,1e-13); vsip_vsma_f(data,0.1,avg,avg); } N_len = vsip_vgetlength_f(avg); { vsip_vview_f *x = vsip_vcreate_f( N_len,VSIP_MEM_NONE); vsip_vramp_f(-.5,1.0/(vsip_scalar_f)(N_len - 1),x); VU_vfprintxyg_f("%8.6f %8.6f\n", x, avg,"conv_dec3"); vsip_vdestroy_f(x); } vsip_vfill_f(0,avg); for(i=0; i<10; i++){ vsip_vrandn_f(r_state,noise); vsip_firflt_f(fir,noise,data); VU_vfrdB_f(data,1e-13); vsip_vsma_f(data,0.1,avg,avg); } N_len = vsip_vgetlength_f(avg); { vsip_vview_f *x = vsip_vcreate_f( N_len,VSIP_MEM_NONE); vsip_vramp_f(-.5,1.0/(vsip_scalar_f)(N_len-1),x); VU_vfprintxyg_f("%8.6f %8.6f\n", x, avg,"fir_dec3"); vsip_vdestroy_f(x); } N_len = vsip_vgetlength_f(kernel); { vsip_vview_f *x = vsip_vcreate_f( N_len,VSIP_MEM_NONE); vsip_vramp_f(0,1,x); VU_vfprintxyg_f("%8.6f %8.6f\n", x,kernel,"kaiser_window"); vsip_vramp_f(-.5,1.0/(vsip_scalar_f)(N_len-1),x); VU_vfrdB_f(kernel,1e-20); VU_vfprintxyg_f("%8.6f %8.6f\n", x,kernel,"Freq_Resp_Kaiser"); vsip_vdestroy_f(x); } vsip_randdestroy(r_state); vsip_valldestroy_f(kernel); vsip_conv1d_destroy_f(conv);vsip_fir_destroy_f(fir); vsip_valldestroy_f(data); vsip_valldestroy_f(noise); vsip_valldestroy_f(avg); } vsip_finalize((void*)0); return 0; }/*end of main program *******************************/