gpt4 book ai didi

c++ - KissFFT 输出返回 nan 值?

转载 作者:行者123 更新时间:2023-11-28 07:35:03 25 4
gpt4 key购买 nike

目前我正在开发 Tizen IDE。

我已经从麦克风读取输入数据并尝试对其应用 FFT...但每次我从 FFT 得到 nan 输出。

这是我的代码..

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

缩放

    static inline float scale(kiss_fft_scalar val) {
if (val < 0)
return val * (1 / 32768.0f);
else
return val * (1 / 32767.0f);
}

最佳答案

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

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

关于c++ - KissFFT 输出返回 nan 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16917393/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com