void ne10_fft_c2c_1d_int16_neon (ne10_fft_cpx_int16_t *fout, ne10_fft_cpx_int16_t *fin, ne10_fft_cpx_int16_t *twiddles, ne10_int32_t *factors, ne10_int32_t nfft, ne10_int32_t inverse_fft) { if (fin == fout) { /* NOTE: for an in-place FFT algorithm. It just performs an out-of-place FFT into a temp buffer */ ne10_fft_cpx_int16_t * tmpbuf_ = (ne10_fft_cpx_int16_t*) NE10_MALLOC (sizeof (ne10_fft_cpx_int16_t) * nfft); // copy the data from input to output and bit reversal ne10_data_bitreversal_int16 (tmpbuf_, fin, 1, &factors[2]); if (inverse_fft) ne10_mixed_radix_butterfly_inverse_int16_neon (tmpbuf_, factors, twiddles); else ne10_mixed_radix_butterfly_int16_neon (tmpbuf_, factors, twiddles); memcpy (fout, tmpbuf_, sizeof (ne10_fft_cpx_int16_t) *nfft); NE10_FREE (tmpbuf_); } else { // copy the data from input to output and bit reversal ne10_data_bitreversal_int16 (fout, fin, 1, &factors[2]); if (inverse_fft) ne10_mixed_radix_butterfly_inverse_int16_neon (fout, factors, twiddles); else ne10_mixed_radix_butterfly_int16_neon (fout, factors, twiddles); } }
void ne10_fft_c2c_1d_int16_scaled_neon (ne10_fft_cpx_int16_t *fout, ne10_fft_cpx_int16_t *fin, ne10_fft_cpx_int16_t *twiddles, ne10_int32_t *factors, ne10_int32_t nfft, ne10_int32_t inverse_fft) { // copy the data from input to output and bit reversal ne10_data_bitreversal_int16 (fout, fin, 1, &factors[2]); if (inverse_fft) ne10_mixed_radix_butterfly_inverse_int16_neon (fout, factors, twiddles); else ne10_mixed_radix_butterfly_int16_neon (fout, factors, twiddles); }