2013-06-05 3 views
0

현재 Tizen IDE에서 작업 중입니다.Tizen에서 실시간 FFT로 가장 정확한 오디오 주파수 데이터를 얻으려면 어떻게해야합니까?

나는 마이크로폰에서 입력 데이터를 읽고 그것에 FFT를 적용했다. 그러나 매번 나는 나노 출력을 얻는다. 여기

내 코드는 ...

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); 

적용 FFT .. fft->config에서

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; 
} 

답변

1

2048 같은 FFT의 크기, 4096, 2, 즉 권력에 대한 몇 가지 매개 변수가 있어야합니다. 이 값을 늘리면 주파수에서 더 많은 해상도를 얻을 수 있습니다.

+0

** 내 FFT 크기는 8192입니다.하지만 문제는 내가 나노 출력을 얻고 있습니다. –

+0

@Sunny shah, fft-> numSamples가 0 일 수 있습니다. –

+0

친구가 아니기도합니다. 같은 8192 .. –

관련 문제