예제 #1
0
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;
   }
} 
예제 #2
0
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;
    }
}