0

currently i m working on the Tizen IDE.

I had read the input data from the MicroPhone and Try to apply FFT on it... but everytime I gets the nan output from the FFT.

Here is my code..

ShortBuffer *pBuffer1 = pData->AsShortBufferN();

fft = new KissFFT(BUFFER_SIZE);

std::vector<short> input(pBuffer1->GetPointer(),
        pBuffer1->GetPointer() + BUFFER_SIZE); // this contains audio data
std::vector<float> specturm(BUFFER_SIZE);

fft->spectrum(input, specturm);

applying FFT

void KissFFT::spectrum(KissFFTO* fft, std::vector<short>& samples2,
        std::vector<float>& spectrum) {


    int len = fft->numSamples / 2 + 1;

    kiss_fft_scalar* samples = (kiss_fft_scalar*) &samples2[0];

    kiss_fftr(fft->config, samples, fft->spectrum);

    for (int i = 0; i < len; i++) {

        float re = scale(fft->spectrum[i].r) * fft->numSamples;
        float im = scale(fft->spectrum[i].i) * fft->numSamples;

         if (i > 0)
         spectrum[i] = sqrtf(re * re + im * im) / (fft->numSamples / 2);
         else
         spectrum[i] = sqrtf(re * re + im * im) / (fft->numSamples);
         AppLog("specturm %d",spectrum[i]); // everytime returns returns nan output
    }

}
    KissFFTO* KissFFT::create(int numSamples) {

    KissFFTO* fft = new KissFFTO();
    fft->config = kiss_fftr_alloc(numSamples/2, 0, NULL, NULL);
    fft->spectrum = new kiss_fft_cpx[numSamples / 2 + 1];
    fft->numSamples = numSamples;

    return fft;
}

scaling

    static inline float scale(kiss_fft_scalar val) {
    if (val < 0)
        return val * (1 / 32768.0f);
    else
        return val * (1 / 32767.0f);
}
Sunny Shah
  • 12,990
  • 9
  • 50
  • 86

1 Answers1

1
     AppLog("specturm %d",spectrum[i]); // everytime returns returns nan output

Try using %f rather than %d.

John Sheridan
  • 446
  • 4
  • 8
  • no its not working..it sometimes 0.0000 and nan output not getting perfect output – Sunny Shah Jun 04 '13 at 12:17
  • Take a look at this post. Seems highly related to your issue. [link](http://stackoverflow.com/questions/4453372/sqrt1-0-pow1-0-2-returns-nan?rq=1) – John Sheridan Jun 04 '13 at 12:31