如何从Tizen的实时FFT获得最准确的音频数据? [英] How do I get most accurate audio frequency data possible from real time FFT on Tizen?

查看:252
本文介绍了如何从Tizen的实时FFT获得最准确的音频数据?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

目前正在使用Tizen IDE。

currently i m working on the Tizen IDE.

我已经从microPhone读取输入数据,并对其应用FFT ...但每次我获得nan输出。

I had read the input data from the microPhone and apply the FFT on it... but everytime i gets the nan output.

这里是我的代码..

 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 ..

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


推荐答案

> fft-> config 应该有一些关于FFT大小的参数,如2048,4096,即2的幂。如果增加这个值,你可以得到更高的频率分辨率。

In fft->config there should be some parameters about the size of FFT like 2048, 4096, i.e. powers of 2. If you increase this value, you can get more resolution in frequency.

这篇关于如何从Tizen的实时FFT获得最准确的音频数据?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆