LTFAT_EXTERN void LTFAT_NAME(gabdual_long)(const LTFAT_TYPE *g, const int L, const int R, const int a, const int M, LTFAT_TYPE *gd) { #ifdef LTFAT_COMPLEXTYPE const int wfs = L; #else const int wfs = L; /* wfacreal_size(L,a,M); */ #endif LTFAT_COMPLEX *gf = ltfat_malloc(wfs*R*sizeof(LTFAT_COMPLEX)); LTFAT_COMPLEX *gdf = ltfat_malloc(wfs*R*sizeof(LTFAT_COMPLEX)); #ifdef LTFAT_COMPLEXTYPE LTFAT_NAME_REAL(wfac)(g, L, R, a, M, gf); LTFAT_NAME_REAL(gabdual_fac)((const LTFAT_COMPLEX *)gf,L,R,a,M,gdf); LTFAT_NAME_REAL(iwfac)((const LTFAT_COMPLEX *)gdf,L,R,a,M,gd); #else LTFAT_NAME_REAL(wfacreal)(g, L, R, a, M, gf); LTFAT_NAME_REAL(gabdualreal_fac)((const LTFAT_COMPLEX *)gf,L,R,a,M,gdf); LTFAT_NAME_REAL(iwfacreal)((const LTFAT_COMPLEX *)gdf,L,R,a,M,gd); #endif ltfat_free(gdf); ltfat_free(gf); }
CHECK(LTFATERR_CANNOTHAPPEN, ltfat_phaseconvention_is_valid(ptype), "Invalid ltfat_phaseconvention enum value." ); CHECKMEM( p = LTFAT_NEW(LTFAT_NAME(idgt_fb_plan)) ); p->ptype = ptype; p->a = a; p->M = M; p->gl = gl; CHECKMEM( p->cbuf = LTFAT_NAME_COMPLEX(malloc)(M)); CHECKMEM( p->gw = LTFAT_NAME(malloc)(gl)); CHECKMEM( p->ff = LTFAT_NAME_COMPLEX(malloc)(gl > M ? gl : M)); CHECKSTATUS( LTFAT_NAME_REAL(ifft_init)(M, 1, p->cbuf, p->cbuf, flags, &p->p_small)); LTFAT_NAME(fftshift)(g, gl, p->gw); *pout = p; return status; error: if (p) LTFAT_NAME(idgt_fb_done)(&p); return status; } LTFAT_API int LTFAT_NAME(idgt_fb_done)(LTFAT_NAME(idgt_fb_plan)** p) { LTFAT_NAME(idgt_fb_plan)* pp; int status = LTFATERR_SUCCESS;