void aec_rdft_inverse_128(float *a) { const int n = 128; a[1] = 0.5f * (a[0] - a[1]); a[0] -= a[1]; rftbsub_128(a); bitrv2_32or128(n, ip + 2, a); cftbsub_128(a); }
void aec_rdft_forward_128(float *a) { const int n = 128; float xi; bitrv2_32or128(n, ip + 2, a); cftfsub_128(a); rftfsub_128(a); xi = a[0] - a[1]; a[0] += a[1]; a[1] = xi; }
static void makewt_32() { const int nw = 32; int j, nwh; float delta, x, y; ip[0] = nw; ip[1] = 1; nwh = nw >> 1; delta = atanf(1.0f) / nwh; rdft_w[0] = 1; rdft_w[1] = 0; rdft_w[nwh] = cosf(delta * nwh); rdft_w[nwh + 1] = rdft_w[nwh]; for (j = 2; j < nwh; j += 2) { x = cosf(delta * j); y = sinf(delta * j); rdft_w[j] = x; rdft_w[j + 1] = y; rdft_w[nw - j] = y; rdft_w[nw - j + 1] = x; } bitrv2_32or128(nw, ip + 2, rdft_w); }
static void makewt_32(void) { const int nw = 32; int j, nwh; float delta, x, y; ip[0] = nw; ip[1] = 1; nwh = nw >> 1; delta = atanf(1.0f) / nwh; rdft_w[0] = 1; rdft_w[1] = 0; rdft_w[nwh] = cosf(delta * nwh); rdft_w[nwh + 1] = rdft_w[nwh]; for (j = 2; j < nwh; j += 2) { x = cosf(delta * j); y = sinf(delta * j); rdft_w[j] = x; rdft_w[j + 1] = y; rdft_w[nw - j] = y; rdft_w[nw - j + 1] = x; } bitrv2_32or128(nw, ip + 2, rdft_w); // pre-calculate constants used by cft1st_128 and cftmdl_128... cftmdl_wk1r[0] = rdft_w[2]; cftmdl_wk1r[1] = rdft_w[2]; cftmdl_wk1r[2] = rdft_w[2]; cftmdl_wk1r[3] = -rdft_w[2]; { int k1; for (k1 = 0, j = 0; j < 128; j += 16, k1 += 2) { const int k2 = 2 * k1; const float wk2r = rdft_w[k1 + 0]; const float wk2i = rdft_w[k1 + 1]; float wk1r, wk1i; // ... scalar version. wk1r = rdft_w[k2 + 0]; wk1i = rdft_w[k2 + 1]; rdft_wk3ri_first[k1 + 0] = wk1r - 2 * wk2i * wk1i; rdft_wk3ri_first[k1 + 1] = 2 * wk2i * wk1r - wk1i; wk1r = rdft_w[k2 + 2]; wk1i = rdft_w[k2 + 3]; rdft_wk3ri_second[k1 + 0] = wk1r - 2 * wk2r * wk1i; rdft_wk3ri_second[k1 + 1] = 2 * wk2r * wk1r - wk1i; // ... vector version. rdft_wk1r[k2 + 0] = rdft_w[k2 + 0]; rdft_wk1r[k2 + 1] = rdft_w[k2 + 0]; rdft_wk1r[k2 + 2] = rdft_w[k2 + 2]; rdft_wk1r[k2 + 3] = rdft_w[k2 + 2]; rdft_wk2r[k2 + 0] = rdft_w[k1 + 0]; rdft_wk2r[k2 + 1] = rdft_w[k1 + 0]; rdft_wk2r[k2 + 2] = -rdft_w[k1 + 1]; rdft_wk2r[k2 + 3] = -rdft_w[k1 + 1]; rdft_wk3r[k2 + 0] = rdft_wk3ri_first[k1 + 0]; rdft_wk3r[k2 + 1] = rdft_wk3ri_first[k1 + 0]; rdft_wk3r[k2 + 2] = rdft_wk3ri_second[k1 + 0]; rdft_wk3r[k2 + 3] = rdft_wk3ri_second[k1 + 0]; rdft_wk1i[k2 + 0] = -rdft_w[k2 + 1]; rdft_wk1i[k2 + 1] = rdft_w[k2 + 1]; rdft_wk1i[k2 + 2] = -rdft_w[k2 + 3]; rdft_wk1i[k2 + 3] = rdft_w[k2 + 3]; rdft_wk2i[k2 + 0] = -rdft_w[k1 + 1]; rdft_wk2i[k2 + 1] = rdft_w[k1 + 1]; rdft_wk2i[k2 + 2] = -rdft_w[k1 + 0]; rdft_wk2i[k2 + 3] = rdft_w[k1 + 0]; rdft_wk3i[k2 + 0] = -rdft_wk3ri_first[k1 + 1]; rdft_wk3i[k2 + 1] = rdft_wk3ri_first[k1 + 1]; rdft_wk3i[k2 + 2] = -rdft_wk3ri_second[k1 + 1]; rdft_wk3i[k2 + 3] = rdft_wk3ri_second[k1 + 1]; } } }