Un algoritmo de detección de tono ( PDA ) es un algoritmo diseñado para estimar el tono o la frecuencia fundamental de una señal cuasiperiódica u oscilante , generalmente una grabación digital de voz o una nota o tono musical. Esto se puede hacer en el dominio del tiempo , el dominio de la frecuencia o ambos.
Los PDA se utilizan en diversos contextos (por ejemplo, fonética , recuperación de información musical , codificación de voz , sistemas de interpretación musical ) y, por lo tanto, pueden existir diferentes demandas sobre el algoritmo. Hasta el momento no existe un único PDA ideal, por lo que existe una variedad de algoritmos, la mayoría de los cuales se incluyen en las clases que se indican a continuación. [1 ]
Un PDA normalmente estima el período de una señal cuasiperiódica y luego invierte ese valor para obtener la frecuencia.
Un enfoque simple sería medir la distancia entre los puntos de cruce por cero de la señal (es decir, la tasa de cruce por cero ). Sin embargo, esto no funciona bien con formas de onda complicadas que están compuestas de múltiples ondas sinusoidales con diferentes períodos o datos ruidosos. No obstante, hay casos en los que el cruce por cero puede ser una medida útil, por ejemplo, en algunas aplicaciones de voz donde se supone una sola fuente. [ cita requerida ] La simplicidad del algoritmo hace que sea "barato" de implementar.
Los métodos más sofisticados comparan segmentos de la señal con otros segmentos separados por un período de prueba para encontrar una coincidencia. La función AMDF (promedio de la diferencia de magnitud), la función ASMDF (promedio de la diferencia de medias al cuadrado) y otros algoritmos de autocorrelación similares funcionan de esta manera. Estos algoritmos pueden dar resultados bastante precisos para señales altamente periódicas. Sin embargo, tienen problemas de detección falsa (a menudo " errores de octava "), a veces pueden lidiar mal con señales ruidosas (dependiendo de la implementación) y, en sus implementaciones básicas, no tratan bien con sonidos polifónicos (que involucran múltiples notas musicales de diferentes tonos). [ cita requerida ]
Los algoritmos actuales de detección de tono en el dominio del tiempo [¿ cuándo? ] tienden a basarse en los métodos básicos mencionados anteriormente, con mejoras adicionales para que el rendimiento se ajuste más a una evaluación humana del tono. Por ejemplo, el algoritmo YIN [2] y el algoritmo MPM [3] se basan en la autocorrelación .
En el dominio de frecuencia, es posible la detección polifónica, generalmente utilizando el periodograma para convertir la señal en una estimación del espectro de frecuencia [4] . Esto requiere más potencia de procesamiento a medida que aumenta la precisión deseada, aunque la conocida eficiencia de la FFT , una parte clave del algoritmo del periodograma, lo hace adecuadamente eficiente para muchos propósitos.
Los algoritmos populares del dominio de frecuencia incluyen: el espectro del producto armónico; [5] [6] el análisis cepstral [7] y la máxima verosimilitud que intenta hacer coincidir las características del dominio de frecuencia con mapas de frecuencia predefinidos (útiles para detectar el tono de instrumentos de afinación fija); y la detección de picos debido a series armónicas. [8]
Para mejorar la estimación del tono derivada del espectro discreto de Fourier, se pueden utilizar técnicas como la reasignación espectral (basada en la fase) o la interpolación Grandke (basada en la magnitud) para ir más allá de la precisión proporcionada por los bins de FFT. Brown y Puckette [9] ofrecen otro enfoque basado en la fase.
Los algoritmos de detección de tono espectral/temporal, por ejemplo, el algoritmo de seguimiento de tono YAAPT, [10] [11] se basan en una combinación de procesamiento del dominio del tiempo utilizando una función de autocorrelación como la correlación cruzada normalizada y procesamiento del dominio de la frecuencia utilizando información espectral para identificar el tono. Luego, entre los candidatos estimados a partir de los dos dominios, se puede calcular un seguimiento de tono final utilizando programación dinámica . La ventaja de estos enfoques es que el error de seguimiento en un dominio se puede reducir mediante el proceso en el otro dominio.
La frecuencia fundamental del habla puede variar desde 40 Hz para voces graves hasta 600 Hz para voces agudas. [12]
Los métodos de autocorrelación necesitan al menos dos períodos de tono para detectar el tono. Esto significa que para detectar una frecuencia fundamental de 40 Hz, se deben analizar al menos 50 milisegundos (ms) de la señal de voz. Sin embargo, durante 50 ms, el habla con frecuencias fundamentales más altas puede no tener necesariamente la misma frecuencia fundamental en toda la ventana. [12]