39 size_t subsize = 0, memneeded;
43 FL_WARN(
"Real FFT optimization must be even.");
54 if (*lenmem >= memneeded)
63 #pragma GCC diagnostic push
64 #pragma GCC diagnostic ignored "-Wcast-align"
67 #pragma GCC diagnostic pop
72 for (i = 0; i < nfft/2; ++i) {
74 -3.14159265358979323846264338327 * ((double) (i+1) / nfft + .5);
88 if ( st->substate->inverse) {
90 FL_WARN(
"kiss fft usage error: improper alloc");
94 ncfft = st->substate->nfft;
108 tdc.
r = st->tmpbuf[0].r;
109 tdc.
i = st->tmpbuf[0].i;
113 freqdata[0].r = tdc.
r + tdc.
i;
114 freqdata[ncfft].r = tdc.
r - tdc.
i;
116 freqdata[ncfft].i = freqdata[0].i = _mm_set1_ps(0);
118 freqdata[ncfft].i = freqdata[0].i = 0;
121 for ( k=1;k <= ncfft/2 ; ++k ) {
123 fpnk.
r = st->tmpbuf[ncfft-k].r;
124 fpnk.
i = - st->tmpbuf[ncfft-k].i;
128 C_ADD( f1k, fpk , fpnk );
129 C_SUB( f2k, fpk , fpnk );
130 C_MUL( tw , f2k , st->super_twiddles[k-1]);
134 freqdata[ncfft-k].r =
HALF_OF(f1k.
r - tw.
r);
135 freqdata[ncfft-k].i =
HALF_OF(tw.
i - f1k.
i);
144 if (st->substate->inverse == 0) {
146 FL_WARN(
"kiss fft usage error: improper alloc");
150 ncfft = st->substate->nfft;
152 st->tmpbuf[0].r = freqdata[0].r + freqdata[ncfft].r;
153 st->tmpbuf[0].i = freqdata[0].r - freqdata[ncfft].r;
156 for (k = 1; k <= ncfft / 2; ++k) {
159 fnkc.
r = freqdata[ncfft - k].r;
160 fnkc.
i = -freqdata[ncfft - k].i;
164 C_ADD (fek, fk, fnkc);
165 C_SUB (tmp, fk, fnkc);
166 C_MUL (fok, tmp, st->super_twiddles[k-1]);
167 C_ADD (st->tmpbuf[k], fek, fok);
168 C_SUB (st->tmpbuf[ncfft - k], fek, fok);
170 st->tmpbuf[ncfft - k].i *= _mm_set1_ps(-1.0);
172 st->tmpbuf[ncfft - k].i *= -1;
#define CHECK_OVERFLOW_OP(a, op, b)
#define kf_cexp(x, phase)
void kiss_fft(kiss_fft_cfg cfg, const kiss_fft_cpx *fin, kiss_fft_cpx *fout) FL_NOEXCEPT
kiss_fft_cfg kiss_fft_alloc(int nfft, int inverse_fft, void *mem, size_t *lenmem) FL_NOEXCEPT
struct kiss_fft_state * kiss_fft_cfg
#define KISS_FFT_MALLOC(nbytes)
void kiss_fftri(kiss_fftr_cfg st, const kiss_fft_cpx *freqdata, kiss_fft_scalar *timedata) FL_NOEXCEPT
void kiss_fftr(kiss_fftr_cfg st, const kiss_fft_scalar *timedata, kiss_fft_cpx *freqdata) FL_NOEXCEPT
kiss_fftr_cfg kiss_fftr_alloc(int nfft, int inverse_fft, void *mem, size_t *lenmem) FL_NOEXCEPT
kiss_fft_cpx * super_twiddles
struct kiss_fftr_state * kiss_fftr_cfg
Centralized logging categories for FastLED hardware interfaces and subsystems.
void exit(int code)
No-op exit function for embedded systems In embedded environments, calling exit is typically not mean...