Example #1
0
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);
    }
}
Example #2
0
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);
}