304 {
307 const int numRawBins = fftSize / 2 + 1;
308
310 s.fftOut.resize(fftSize);
311 s.re.resize(numRawBins);
312 s.im.resize(numRawBins);
313 s.mag.resize(numRawBins);
314
316
317
318 deinterleave(s.fftOut.data(), s.re.data(), s.im.data(), numRawBins);
319 batchMag(s.re.data(), s.im.data(), s.mag.data(), numRawBins);
320
322
325
326 const int bands =
mCqCfg.bands;
327 fl::vector<float> &rawBins = out->raw_mut();
329 for (int i = 0; i < bands; ++i) {
330 i32 real = cq[i].r;
331 i32 imag = cq[i].i;
332#ifdef FIXED_POINT
333 rawBins[i] =
static_cast<float>(
fastMag(real, imag));
334#else
335 float r2 = float(real * real);
336 float i2 = float(imag * imag);
337 rawBins[i] =
sqrt(r2 + i2);
338#endif
339 }
340 }
#define FASTLED_STACK_ARRAY(TYPE, NAME, SIZE)
Stack-allocated array with automatic zero-initialization.
static void batchMag(const kiss_fft_scalar *re, const kiss_fft_scalar *im, u16 *mag, int n) FL_NO_EXCEPT
void computeLinearBins(const u16 *mag, int, Bins *out) FL_NO_EXCEPT
static u16 fastMag(i32 re, i32 im) FL_NO_EXCEPT
static FftScratch & scratch() FL_NO_EXCEPT
static void deinterleave(const kiss_fft_cpx *cpx, kiss_fft_scalar *re, kiss_fft_scalar *im, int n) FL_NO_EXCEPT
void resize(fl::size n) FL_NO_EXCEPT
void apply_kernels(kiss_fft_cpx fft[], kiss_fft_cpx cq[], struct sparse_arr kernels[], struct cq_kernel_cfg cfg)
void kiss_fftr(kiss_fftr_cfg st, const kiss_fft_scalar *timedata, kiss_fft_cpx *freqdata)
constexpr enable_if< is_fixed_point< T >::value, T >::type sqrt(T x) FL_NO_EXCEPT