No conozco todos los métodos que menciona, pero lo que elija dependerá principalmente de la naturaleza de sus datos de entrada. ¿Estás analizando tonos puros o tu fuente de entrada tiene múltiples notas? ¿El habla es una característica de tu entrada? ¿Hay alguna limitación en el tiempo que tiene para muestrear la entrada? ¿Puedes intercambiar algo de precisión por velocidad?
Hasta cierto punto, lo que elija también depende de si desea realizar sus cálculos en time o en frequency space. La conversión de un time series a una representación de frecuencia lleva tiempo, pero en mi experiencia tiende a dar mejores resultados.
Autocorrelation compara dos señales en el dominio del tiempo. Una implementación ingenua es simple pero relativamente caro de calcular, ya que requiere de pares de diferenciación entre todos los puntos en las señales originales y desplazados en el tiempo, seguido de la diferenciación para identificar puntos de inflexión en la función de autocorrelación, y entonces la selección del mínimo correspondiente a la frecuencia fundamental. Hay métodos alternativos. Por ejemplo, Average Magnitude Differencing es una forma muy barata de autocorrelación, pero la precisión sufre. Todas las técnicas de autocorrelación corren el riesgo de errores de octava, ya que existen picos distintos del fundamental en la función.
La medición de zero-crossing points es simple y directa, pero puede tener problemas si tiene múltiples formas de onda presentes en la señal.
En el espacio de frecuencia, las técnicas basadas en FFT pueden ser lo suficientemente eficientes para sus propósitos. Un ejemplo es la técnica de espectro de producto armónico, que compara el espectro de potencia de la señal con versiones reducidas de muestreo en cada armónico, e identifica el tono multiplicando los espectros para producir un pico claro.
Como siempre, no hay sustituto para probar y perfilar varias técnicas, para determinar empíricamente qué funcionará mejor para su problema y sus limitaciones.
Una respuesta como esta solo puede arañar la superficie de este tema. Además de los enlaces anteriores, aquí hay algunas referencias relevantes para lecturas adicionales.
Esto es muy informativo. Gracias. Creo que por ahora solo me interesarán 4 octavas, con media octava en cada lado, para un total de 5 octavas. Dado lo que me dices, podría hacer 6 u 8 sin ningún problema. – mahboudz
¿La respuesta del endolito no subestima groseramente la cantidad de contenedores requeridos? La frecuencia es * lineal * en frecuencia, ¿verdad? Por lo tanto, para obtener un 20% de precisión de un semitono en el extremo inferior del espectro, digamos 100Hz, se requeriría un ancho de frecuencia de bin alrededor de un hercio. cuatro octavas por encima de 100 Hz es 1600Hz, por lo que necesitaría 1500 bins. ¿O me estoy perdiendo algo, completamente posible ...? – tml
@tml Uhhhh, sí. ¿Cómo cometí un error tan tonto y todavía obtuve tantos votos ascendentes? – endolith