0
현재 Tizen IDE에서 작업 중입니다.KissFFT 출력이 나노 값을 반환합니까?
나는 MicroPhone에서 입력 데이터를 읽고 FFT를 적용하려고했습니다 ... 하지만 FFT에서 나노 출력을 얻을 때마다. 확장 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;
}
을 적용 여기
내 코드는 ...
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);
static inline float scale(kiss_fft_scalar val) {
if (val < 0)
return val * (1/32768.0f);
else
return val * (1/32767.0f);
}
아니요. 작동하지 않습니다. 가끔 0.0000과 출력이 완벽하지 못합니다. –
이 게시물을보십시오. 귀하의 문제와 관련이 높은 것 같습니다. [링크] (http://stackoverflow.com/questions/4453372/sqrt1-0-pow1-0-2-returns-nan?rq=1) –