首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >KissFFT输出返回NaN值?

KissFFT输出返回NaN值?
EN

Stack Overflow用户
提问于 2013-06-04 20:07:42
回答 1查看 571关注 0票数 0

目前我正在开发Tizen IDE。

我已经从MicroPhone中读取了输入数据,并尝试对其应用快速傅立叶变换。但每次我从FFT得到nan输出。

这是我的代码..

代码语言:javascript
复制
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

代码语言:javascript
复制
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;
}

缩放

代码语言:javascript
复制
    static inline float scale(kiss_fft_scalar val) {
    if (val < 0)
        return val * (1 / 32768.0f);
    else
        return val * (1 / 32767.0f);
}
EN

回答 1

Stack Overflow用户

发布于 2013-06-04 20:13:00

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

请尝试使用%f而不是%d。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16917393

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档