J'ai ce code, mais il continue de retourner des fréquences aléatoires de 0 à environ 1050. S'il vous plaît pouvez-vous m'aider à comprendre pourquoi cela se produit.FFT Problème (renvoie des résultats aléatoires)
La longueur de mes données est de 1024, la fréquence d'échantillonnage est de 8192, et les données sont un tableau court rempli de données d'entrée provenant du micro.
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);
Merci,
Niall. Editer: Modifié le code, mais il renvoie toujours des fréquences aléatoires.
Avec quoi alimentez-vous le micro? Comme je l'ai dit, à moins que ce soit un ton très pur, vous obtiendrez des résultats aléatoires. – avakar
peut-être optimiser légèrement votre code avec la mise en cache de la valeur de résultat de pow (oSignal [pitch], 2) + pow (oSignal [pitch + 1], 2), car dans votre code il est calculé plusieurs fois avec la même valeur de pitch. – moala
Ma voix et quelques bruits de guitare. Pourriez-vous suggérer un moyen de le faire ne pas retourner des résultats aléatoires? Le fenêtrage fonctionnerait-il? – Niall