示例#1
0
LTFAT_EXTERN void
LTFAT_NAME_COMPLEX(idwiltiii_fb)(const LTFAT_COMPLEX *c, const LTFAT_COMPLEX *g,
                                 const ltfatInt L, const ltfatInt gl,
                                 const ltfatInt W, const ltfatInt M,
                                 LTFAT_COMPLEX *f)
{
    const ltfatInt N = L / M;
    const ltfatInt M2 = 2 * M;
    const ltfatInt M4 = 4 * M;
    const LTFAT_REAL scalconst = 1.0 / sqrt(2.0);
    const LTFAT_COMPLEX eipi4 = cexp(I * PI / 4.0);
    const LTFAT_COMPLEX emipi4 = cexp(-I * PI / 4.0);

    LTFAT_COMPLEX *coef2 = ltfat_calloc(2 * M * N * W, sizeof * coef2);
    LTFAT_COMPLEX *f2 = ltfat_malloc(L * W * sizeof * f2);


    const LTFAT_COMPLEX *pcoef  = c;
    LTFAT_COMPLEX *pcoef2 = coef2;

    PREPROC_COMPLEX

    LTFAT_NAME(idgt_fb)(coef2, g, L, gl, W, M, 2 * M, FREQINV, f2);

    POSTPROC_COMPLEX

    LTFAT_SAFEFREEALL(coef2, f2);

}
示例#2
0
LTFAT_EXTERN void
LTFAT_NAME_REAL(idwiltiii_long)(const LTFAT_REAL *c, const LTFAT_REAL *g,
                                const ltfatInt L, const ltfatInt W,
                                const ltfatInt M, LTFAT_REAL *f)
{
    const ltfatInt N = L / M;
    const ltfatInt M2 = 2 * M;
    const ltfatInt M4 = 4 * M;
    const LTFAT_REAL scalconst = 1.0 / sqrt(2.0);
    const LTFAT_COMPLEX eipi4 = cexp(I * PI / 4.0);
    const LTFAT_COMPLEX emipi4 = cexp(-I * PI / 4.0);

    LTFAT_COMPLEX *coef2 = ltfat_calloc(2 * M * N * W, sizeof * coef2);
    LTFAT_COMPLEX *f2 = ltfat_malloc(L * W * sizeof * f2);
    LTFAT_COMPLEX *g2 = ltfat_malloc(L * sizeof * g2);
    for (ltfatInt ii = 0; ii < L; ii++)
        g2[ii] = g[ii];


    const LTFAT_REAL *pcoef  = c;
    LTFAT_COMPLEX *pcoef2 = coef2;

    PREPROC_COMPLEX

    LTFAT_NAME(idgt_long)(coef2, g2, L, W, M, 2 * M, FREQINV, f2);

    POSTPROC_REAL

    LTFAT_SAFEFREEALL(coef2, f2, g2);

}
示例#3
0
LTFAT_EXTERN void
LTFAT_NAME_REAL(dwiltiii_long)(const LTFAT_REAL *f, const LTFAT_REAL *g,
                               const ltfatInt L, const ltfatInt W, const ltfatInt M,
                               LTFAT_REAL *cout)
{
    const ltfatInt N=L/M;
    const ltfatInt M2 = 2*M;
    const ltfatInt M4=4*M;

    LTFAT_COMPLEX *coef2 = ltfat_malloc(2*M*N*W*sizeof*coef2);
    LTFAT_COMPLEX *f2 = ltfat_malloc(L*W*sizeof*f2);
    LTFAT_COMPLEX *g2 = ltfat_malloc(L*sizeof*g2);

    // Real to complex
    for(ltfatInt ii=0; ii<L; ii++)
        g2[ii]=g[ii];

    PREPROC

    LTFAT_NAME_COMPLEX(dgt_long)(f2, g2, L, W, M, 2*M, coef2);


    LTFAT_REAL *pcoef  = cout;
    LTFAT_COMPLEX *pcoef2 = coef2;

    POSTPROC_REAL

    LTFAT_SAFEFREEALL(coef2,f2,g2);

}
示例#4
0
LTFAT_EXTERN void
LTFAT_NAME_COMPLEX(dwiltiii_long)(const LTFAT_COMPLEX *f, const LTFAT_COMPLEX *g,
                                  const ltfatInt L, const ltfatInt W, const ltfatInt M,
                                  LTFAT_COMPLEX *cout)
{
    const ltfatInt N=L/M;
    const ltfatInt M2=2*M;
    const ltfatInt M4=4*M;
    const LTFAT_REAL scalconst = 1.0/sqrt(2.0);
    const LTFAT_COMPLEX eipi4 = cexp(I*PI/4.0);
    const LTFAT_COMPLEX emipi4 = cexp(-I*PI/4.0);

    LTFAT_COMPLEX *coef2 = ltfat_malloc(2*M*N*W*sizeof*coef2);
    LTFAT_COMPLEX *f2 = ltfat_malloc(L*W*sizeof*f2);

    PREPROC

    LTFAT_NAME_COMPLEX(dgt_long)(f2, g, L, W, M, 2*M, coef2);

    LTFAT_COMPLEX *pcoef  = cout;
    LTFAT_COMPLEX *pcoef2 = coef2;

    POSTPROC_COMPLEX

    LTFAT_SAFEFREEALL(coef2,f2);
}
示例#5
0
LTFAT_EXTERN void
fbreassOptOut_destroy(fbreassOptOut* oo)
{

   for (ltfatInt ii = 0; ii < oo->l; ii++)
   {
      if (oo->repos[ii] && oo->reposlmax[ii] > 0)
      {
         ltfat_free(oo->repos[ii]);
      }
   }

   LTFAT_SAFEFREEALL(oo->repos, oo->reposl, oo->reposlmax, oo);
   oo = NULL;
}
示例#6
0
LTFAT_EXTERN void
LTFAT_NAME(gabreassign)(const LTFAT_REAL *s, const LTFAT_REAL *tgrad,
                        const LTFAT_REAL *fgrad, const ltfatInt L, const ltfatInt W,
                        const ltfatInt a, const ltfatInt M, LTFAT_REAL *sr)
{

    ltfatInt ii, posi, posj;


    const ltfatInt N=L/a;
    const ltfatInt b=L/M;

    ltfatInt *timepos = ltfat_malloc(N*sizeof*timepos);
    ltfatInt *freqpos = ltfat_malloc(M*sizeof*freqpos);

    fftindex(N,timepos);
    fftindex(M,freqpos);

    /* Zero the output array. */
    memset(sr,0,M*N*W*sizeof*sr);

    for (ltfatInt w=0; w<W; w++)
    {
        for (ii=0; ii<M; ii++)
        {
            for (ltfatInt jj=0; jj<N; jj++)
            {
                /* Do a 'round' followed by a 'mod'. 'round' is not
                 * present in all libraries, so use trunc(x+.5) instead */
                /*posi=positiverem((ltfatInt)trunc(tgrad[ii+jj*M]/b+freqpos[ii]+.5),M);
                  posj=positiverem((ltfatInt)trunc(fgrad[ii+jj*M]/a+timepos[jj]+.5),N);*/
                posi=positiverem(ltfat_round(tgrad[ii+jj*M]/b+freqpos[ii]),M);
                posj=positiverem(ltfat_round(fgrad[ii+jj*M]/a+timepos[jj]),N);

                sr[posi+posj*M]+=s[ii+jj*M];
            }
        }
    }

    LTFAT_SAFEFREEALL(freqpos,timepos);
}