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 hvr,hvi; FILE *fh; vsip_cfir_d *fir; vsip_cvview_d *x = vsip_cvcreate_d(N,0), *h,*y; fh = fopen(argv[3],"r"); while(fscanf(fh,"%lf %lf",&hvr, &hvi) == 2) n++; rewind(fh); y = vsip_cvcreate_d(N/D + ((N % D) ? 1:0),0); h = vsip_cvcreate_d(n,0); n=0; while(fscanf(fh,"%lf %lf",&hvr,&hvi) == 2){ vsip_cvput_d(h,n,vsip_cmplx_d(hvr,hvi)); n++; } fclose(fh); /* fir = vsip_cfir_create_d(h,VSIP_SYM_EVEN_LEN_ODD,N,D,STATE,0,0); */ /* fir = vsip_cfir_create_d(h,VSIP_SYM_EVEN_LEN_EVEN,N,D,STATE,0,0); */ fir = vsip_cfir_create_d(h,VSIP_NONSYM,N,D,STATE,0,0); n = VU_cscanstdin_d(x); while(n == N){ k = vsip_cfirflt_d(fir,x,y); VU_cprintstdout_d(y,0,k); n = VU_cscanstdin_d(x); } if(n != 0){ k = vsip_cfirflt_d(fir,x,y); VU_cprintstdout_d(y,0,k); } {/* test getattr */ vsip_cfir_attr attr; vsip_cfir_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_cvalldestroy_d(y); vsip_cvalldestroy_d(x); vsip_cvalldestroy_d(h); vsip_cfir_destroy_d(fir); }vsip_finalize((void*)0);return 1; } }
vsip_cfir_d *vsip_cfir_create_d( const vsip_cvview_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_cfir_d *fir = (vsip_cfir_d*)malloc(sizeof(vsip_cfir_d)); if(fir == NULL){ return (vsip_cfir_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 = vsip_cvcreate_d(klength,VSIP_MEM_NONE); fir->s = vsip_cvcreate_d(klength-1,VSIP_MEM_NONE); } if((fir->h == NULL) | (fir->s == NULL)){ vsip_cfir_destroy_d(fir); return (vsip_cfir_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_cvcopy_d_d(kernel,fir->h); } break; case 1: { fir->h->length = kernel->length; vsip_cvconj_d(kernel,fir->h); fir->h->offset = klength - 1; fir->h->stride = -1; VI_cvcopy_d_d(kernel,fir->h); fir->h->length = klength; } break; case 2: { fir->h->length = kernel->length; vsip_cvconj_d(kernel,fir->h); fir->h->offset = klength - 1; fir->h->stride = -1; VI_cvcopy_d_d(kernel,fir->h); fir->h->length = klength; } break; } fir->state = state; fir->h->offset = 0; fir->h->stride = 1; VI_cvfill_d(vsip_cmplx_d((vsip_scalar_d)0,(vsip_scalar_d)0),fir->s); return fir; } }