124{
125
126 int k, ncfft;
127
128 if (st->substate->inverse == 0) {
129 fprintf (stderr, "kiss fft usage error: improper alloc\n");
130 exit (1);
131 }
132
133 ncfft = st->substate->nfft;
134
135 st->tmpbuf[0].r = freqdata[0].
r + freqdata[ncfft].
r;
136 st->tmpbuf[0].i = freqdata[0].
r - freqdata[ncfft].
r;
138
139 for (k = 1; k <= ncfft / 2; ++k) {
141 fk = freqdata[k];
142 fnkc.
r = freqdata[ncfft - k].
r;
143 fnkc.
i = -freqdata[ncfft - k].
i;
146
147 C_ADD (fek, fk, fnkc);
148 C_SUB (tmp, fk, fnkc);
149 C_MUL (fok, tmp, st->super_twiddles[k-1]);
150 C_ADD (st->tmpbuf[k], fek, fok);
151 C_SUB (st->tmpbuf[ncfft - k], fek, fok);
152#ifdef USE_SIMD
153 st->tmpbuf[ncfft - k].i *= _mm_set1_ps(-1.0);
154#else
155 st->tmpbuf[ncfft - k].i *= -1;
156#endif
157 }
159}
void kiss_fft(kiss_fft_cfg cfg, const kiss_fft_cpx *fin, kiss_fft_cpx *fout)