このコードを取得しましたが、0 から約 1050 までのランダムな頻度を返し続けています。
私のデータ長は 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);
ありがとう、
ニール。
編集:コードを変更しましたが、まだランダムな周波数を返しています。