int main(int argc, char *argv[]) { vsip_init((void*)0); { if(argc < 4) { printf("usage\nfirEx length decimation filterFile <indataFile >outputFile\n"); exit(0); } { vsip_length N = (vsip_length)atoi(argv[1]); int D = atoi(argv[2]); vsip_scalar_vi n = 0,k = 0; vsip_scalar_d hv; FILE *fh; vsip_fir_d *fir; vsip_vview_d *x = vsip_vcreate_d(N,0), *h,*y; fh = fopen(argv[3],"r"); while(fscanf(fh,"%lf",&hv) == 1) n++; rewind(fh); y = vsip_vcreate_d(N/D + 1,0); h = vsip_vcreate_d(n,0); n=0; while(fscanf(fh,"%lf",&hv) == 1) { vsip_vput_d(h,n,hv); n++; } fclose(fh); fir = vsip_fir_create_d(h,VSIP_NONSYM,N,D,STATE,0,0); n = VU_scanstdin_d(x); while(n == N) { k = vsip_firflt_d(fir,x,y); VU_printstdout_d(y,0,k); n = VU_scanstdin_d(x); } if(n != 0) { k = vsip_firflt_d(fir,x,y); VU_printstdout_d(y,0,k); } { /* test getattr */ vsip_fir_attr attr; vsip_fir_getattr_d(fir,&attr); printf("kernel %lu\n input %lu\n output %lu\ndecimation %d\n", attr.kernel_len,attr.in_len,attr.out_len, attr.decimation); } vsip_valldestroy_d(y); vsip_valldestroy_d(x); vsip_valldestroy_d(h); vsip_fir_destroy_d(fir); } vsip_finalize((void*)0); return 1; } }
vsip_fir_d *vsip_fir_create_d( const vsip_vview_d *kernel, vsip_symmetry symm, vsip_length N, vsip_length D, vsip_obj_state state, unsigned int ntimes, vsip_alg_hint hint) { vsip_length klength = 0; vsip_fir_d *fir = (vsip_fir_d*)malloc(sizeof(vsip_fir_d)); if(fir == NULL){ return (vsip_fir_d*) NULL; } else { switch(symm){ case 0: klength = kernel->length; break; case 1: klength = 2 * kernel->length - 1; break; case 2: klength = 2 * kernel->length; break; } fir->h = VI_vcreate_d(klength,VSIP_MEM_NONE); fir->s = VI_vcreate_d(klength-1,VSIP_MEM_NONE); } if((fir->h == NULL) | (fir->s == NULL)){ vsip_fir_destroy_d(fir); return (vsip_fir_d*) NULL; } else { fir->N = N; fir->M = klength; fir->D = D; fir->p = 0; fir->ntimes = ntimes; fir->symm = symm; fir->hint = hint; switch(symm){ case 0:{ fir->h->offset = fir->h->length - 1; fir->h->stride = -1; VI_vcopy_d_d(kernel,fir->h); } break; case 1: { fir->h->length = kernel->length; VI_vcopy_d_d(kernel,fir->h); fir->h->offset = klength - 1; fir->h->stride = -1; VI_vcopy_d_d(kernel,fir->h); fir->h->length = klength; } break; case 2: { fir->h->length = kernel->length; VI_vcopy_d_d(kernel,fir->h); fir->h->offset = klength - 1; fir->h->stride = -1; VI_vcopy_d_d(kernel,fir->h); fir->h->length = klength; } break; } fir->state = state; fir->h->offset = 0; fir->h->stride = 1; VI_vfill_d(0,fir->s); return fir; } }