이 코드가 있지만 0에서 약 1050까지 임의의 주파수가 계속 반환됩니다. 왜 이런 일이 발생하는지 이해하도록 도와주십시오.FFT 문제 (임의의 결과 반환)
내 데이터 길이는 1024이고 샘플 속도는 8192이며 데이터는 마이크의 입력 데이터로 채워진 짧은 배열입니다.
float *iSignal = new float[2048];
float *oSignal = new float[2048];
int pitch = 0;
for(x=0;x<=1024;x++) {
iSignal[x] = data[x];
}
fft(iSignal,oSignal,1024); //Input data, output data, length of input and output data
for(int y=0;y< 2048;y+=2) {
if((pow(oSignal[y],2)+pow(oSignal[y+1],2))>(pow(oSignal[pitch],2)+pow(oSignal[(pitch)+1],2))) {
pitch = y;
}
}
double pitchF = pitch/(8192.0/1024);
printf("Pitch: %f\n",pitchF);
감사합니다,
니얼.
편집 : 코드가 변경되었지만 여전히 임의의 빈도가 반환됩니다. oSignal
가정
무엇을 마이크에 제공합니까? 제가 말했듯이, 매우 순수한 음색이 아니라면 무작위적인 결과를 얻을 수밖에 없습니다. – avakar
당신의 코드에서 동일한 피치 값으로 여러 번 계산되기 때문에 pow (oSignal [pitch], 2) + pow (oSignal [pitch + 1], 2)의 결과 값을 캐싱하여 코드를 약간 최적화 할 수 있습니다. – moala
내 목소리와 기타 소리. 임의의 결과를 반환하지 않도록 제안 할 수 있습니까? 창 작업이 가능할까요? – Niall