Detección de tono FFT para cuerda de guitarra

Simplemente tengo detección de tono. Los datos de entrada (micrófono) se pasan a la rutina fft, luego busco un tono con el valor máximo. Significa:

Max(pow(data[i].getRe(), 2) + pow(data[i].getIm(), 2)) for 0<= i < SAmplesSize

Lo necesito para detectar la frecuencia principal de la cuerda de guitarra. Funciona bien para freq 440 hz (y tal vez más alto, no lo comprobé) hasta 250 hz. Por debajo de este valor, la frecuencia detectada es el doble de lo que debería ser, es decir. para 195 hz la frecuencia detectada es de aproximadamente 380 hz. Parece que detecta armónicos más altos por debajo de 250 hz. Para un tono puro de 195 hz, detecta perfectamente, pero para quitar la cadena algo está mal.

¿Alguna sugerencia de qué puede causar eso? ¿O debería usar una detección de tono más sofisticada?

PD. frecuencia de muestreo: 8000Hz, tamaño de datos de entrada: 1024

Respuestas a la pregunta(1)

Su respuesta a la pregunta