214 Real *xr1, *xr2, *xi1, *xi2;
215 Real *cn =
nullptr, *spcn =
nullptr, *smcn =
nullptr, *c3n =
nullptr,
216 *spc3n =
nullptr, *smc3n =
nullptr;
222 KALDI_ERR <<
"Error: logn is out of bounds in SRFFT";
265 else if (logn == 1) {
276 else if (logn == 0)
return;
280 m = 1 << logn; m2 = m / 2; m4 = m2 / 2; m8 = m4 /2;
284 xr1 = xr; xr2 = xr1 + m2;
285 xi1 = xi; xi2 = xi1 + m2;
286 for (n = 0; n < m2; n++) {
298 xr1 = xr + m2; xr2 = xr1 + m4;
299 xi1 = xi + m2; xi2 = xi1 + m4;
300 for (n = 0; n < m4; n++) {
305 *xr2++ = *xr1 - *xi2;
312 xr1 = xr + m2; xr2 = xr1 + m4;
313 xi1 = xi + m2; xi2 = xi1 + m4;
316 cn =
tab_[logn-4]; spcn = cn + nel; smcn = spcn + nel;
317 c3n = smcn + nel; spc3n = c3n + nel; smc3n = spc3n + nel;
319 xr1++; xr2++; xi1++; xi2++;
321 for (n = 1; n < m4; n++) {
323 tmp1 = sqhalf * (*xr1 + *xi1);
324 *xi1 = sqhalf * (*xi1 - *xr1);
326 tmp2 = sqhalf * (*xi2 - *xr2);
327 *xi2 = -sqhalf * (*xr2 + *xi2);
330 tmp2 = *cn++ * (*xr1 + *xi1);
331 tmp1 = *spcn++ * *xr1 + tmp2;
332 *xr1 = *smcn++ * *xi1 + tmp2;
334 tmp2 = *c3n++ * (*xr2 + *xi2);
335 tmp1 = *spc3n++ * *xr2 + tmp2;
336 *xr2 = *smc3n++ * *xi2 + tmp2;
339 xr1++; xr2++; xi1++; xi2++;
void ComputeRecursive(Real *xr, Real *xi, Integer logn) const