Detección de tono de piano

8

Estoy trabajando en un programa de afinación de piano y parte de él requiere detección de tono en tiempo real. Aquí está el esquema que tengo hasta ahora, que funciona hasta cierto punto, pero probablemente podría usar algún refinamiento.

Estoy capturando audio PCM mono de 44.1 kHz y 16 bits en fragmentos de 2 ^ 14 muestras. Combino las últimas 4 muestras en un búfer de 2 ^ 16 de longitud, aplico una ventana Hann al búfer y ejecuto un FFT en él. Luego, clasifico los resultados de la FFT en dos resoluciones. Primero, se agrupa en 200 cubos y luego ejecuto el algoritmo de detección de tono HPS con esta granularidad. No necesito obtener una frecuencia exacta aquí, solo quiero acercarme. Luego, se agrupa en 12000 cubos, lo que me da una resolución de 1 centavo de 10Hz a 10kHz. Una vez que conozco una frecuencia aproximada del algoritmo de 200 bin HPS, busco en ese rango del caso de 12000 bin un pico para obtener una frecuencia más exacta.

Esto parece funcionar bien para las notas en el medio del teclado. Lo que sucede con las notas bajas es aproximadamente 1.5 segundos de identificación errónea de la nota, ya que generalmente es el segundo o tercer parcial de la nota real y luego una identificación correcta de la nota.

En todas las gráficas espectrales que creé para ver qué está sucediendo, hay más ancho en los picos que esperaría. Este ancho es visualmente algo consistente desde el contenedor de 200 a 12000 contenedores. Hubiera esperado que los picos fueran más estrechos en el caso de 200 contenedores.

Por lo tanto, el procesamiento de la señal es nuevo para mí, por lo que puede haber problemas que no me gustaría preguntar, pero en términos de preguntas específicas, ¿son suficientes los tamaños de muestra para esta tarea? ¿Hann es la elección correcta de ventana? ¿Debo suavizar los datos también antes de FFT? ¿Qué tan sensible es HPS a la cantidad de contenedores? Estaba pensando que si usaba muchos contenedores, entonces la falta de armonía podría no hacer que los parciales se superpongan con sus fundamentos con el enfoque simple del algoritmo HPS de dividir por 2, 3, 4, etc.

DrTodd13
fuente
¿La transformación Q constante sería de alguna utilidad para esta aplicación? wellesley.edu/Physics/brown/pubs/cq1stPaper.pdf
Atul Ingle
Simplemente curioso: ¿qué tipo de dispositivo de hardware utiliza para la entrada de señal, un micrófono normal?
anfibio
Estoy usando un micrófono Samson CO1U.
DrTodd13

Respuestas:

6

Similar a este hilo:

¿Existe un algoritmo para encontrar una frecuencia sin DFT o FFT?

FFT no es una forma eficiente particular de construir un sintonizador. Los métodos mejores (y más baratos) incluyen autocorrelación, bucles bloqueados por fases y bucles bloqueados de retraso, etc.

Un ejemplo es usar el seguimiento de máximos y mínimos locales para afinar aproximadamente la frecuencia fundamental y luego usar un oscilador local y un bucle de fase bloqueada para rastrear esta frecuencia con precisión. Esto puede rastrear un movimiento fundamental durante la sintonización de forma rápida, continua y con gran precisión, incluso si la frecuencia es baja y si el fundamental es débil.

Hilmar
fuente
Bueno, estaba usando FFT en otras partes del programa para mediciones de falta de armonía y cálculos de coincidencia parcial. Entonces, fue más fácil para mí reutilizarlo también para este propósito. No estoy demasiado preocupado por lo barato, pero si los bucles bloqueados por fases son mejores, los comprobaré. Dado que esta no es mi área de especialización, implementar algunas de estas cosas puede parecer inpenetrable.
DrTodd13
2

Una búsqueda de 'software de afinación de piano' o artículos similares producirá una gran cantidad de éxitos, algunos buenos, otros no tan buenos.

Cada tipo de instrumento musical tiene características acústicas / físicas / ambientales únicas que afectan su sonido. Y puede complicarse, como sugerirían miles de libros y trabajos de investigación (por ejemplo: tonalidad, características de ataque / decadencia, falta de armonía, etc.).

La detección de tono es en sí misma un campo muy amplio. Lo siguiente es solo una pequeña fracción de lo que está disponible: resumen del artículo 1 y publicación de intercambio de pila y resumen del artículo 2

En cuanto a sus preguntas específicas: 1) el tamaño de su muestra parece excesivo; dependiendo de la estabilidad de la forma de onda y la SNR, puede obtener una precisión de alta frecuencia utilizando otros métodos con menos ciclos. (algunos métodos están basados ​​en FFT). Y puede estar capturando ataque / decadencia con un tiempo de muestreo largo, 2) cualquier ventana que no sea rectangular ampliará el ancho del haz en el dominio de frecuencia, pero eso no significa que no deba usar uno: Hann parece común con HPS , por lo que he visto, 3) como se señaló en el primer enlace anterior, HPS no funciona muy bien a baja frecuencia, y la falta de armonía te afectará en las cuerdas más bajas. En cuanto a su método general, sin tener que escribir muchas páginas, solo puedo decir que lo haría de manera diferente, dependiendo del rango de frecuencia y los armónicos con los que estaba tratando.

Kevin McGee
fuente
Algunas de las variantes de cepstrum parecen interesantes para probar, así que comenzaré con eso. Quizás debería descartar la parte de las muestras que corresponde al "ataque" / golpe de martillo. ¿Alguien sabe cuánto tarda la nota en alcanzar un estado estable o hay una manera de caracterizar el estado inicial para que pueda filtrarlo?
DrTodd13
La información está disponible, pero puede ser difícil de encontrar. Mire, por ejemplo, este hilo del foro 'piano world' sobre las características de 'ataque': pianoworld.com/forum/ubbthreads.php/topics/1125286/What% 20is
Kevin McGee
2

Otra respuesta sugiere PLL. Creo que debería mantenerse alejado de PLL: la mayoría de la literatura sobre seguimiento de tono se centra en la auto-correlación (busque "YIN Pitch Tracking" - YIN es un algoritmo moderno de seguimiento de tono basado en auto-correlación) y FFT. Creo que PLL es más adecuado para rastrear pequeñas fluctuaciones en la frecuencia, como con la radio.

La auto correlación es un buen lugar para comenzar. Es rápido, eficiente y preciso. Sin embargo, existen trucos para hacer que la FFT sea muy precisa y rápida (la mayoría de las técnicas que usan la FFT solo tienen en cuenta la magnitud, pero también puede usar la información de fase), por lo que si está familiarizado con las FFT también puede usar esa técnica.

Si utiliza cualquiera de estas técnicas, le sugiero que prefiltre con un paso bajo para reducir los armónicos y centrarse en lo fundamental. Con la FFT, puedes, en cambio, o además, usar trucos como mirar el primer máximo local.

Este podría ser un buen punto de partida para el filtrado, etc. También le dará algunos consejos sobre cómo evitar hacer demasiado trabajo, y se vincula al código fuente: http://blog.bjornroche.com/2012/07/frequency-detection-using-fft-aka-pitch.html

Este libro tiene secciones que explican tanto el YIN como el FFT utilizando información de fase: http://www.amazon.com/DAFX-Digital-Udo-ouml-lzer/dp/0470665998

Finalmente, tendrás que entender los detalles de los pianos. No estoy seguro de si el afinador en sí necesita hacer algo especial WRT, por ejemplo, afinación estirada, o si eso le corresponde a la persona que afina el piano, pero al menos necesitará comprender esas cosas. Otro póster sugirió mirar los armónicos desafinados, pero el problema principal es identificar y afinar lo fundamental, por lo que los armónicos que no estén afinados no deberían importar siempre y cuando identifiquen correctamente el fundamental.

Bjorn Roche
fuente
Buena información, gracias! Lo que me interesó fue un artículo llamado "Afinación de instrumentos musicales basada en la entropía". Utiliza una medida de entropía para calcular una afinación para un piano determinado en función de las inarmonicidades específicas del piano. Intenté duplicar primero los resultados del artículo y luego ir desde allí. Una vez que tenga éxito, puedo usar lo que esta publicación está a punto de sintonizar el piano con la afinación calculada. Cuando habla sobre el uso de la fase FFT, ¿es esa una salida que generalmente se descarta que podría usar o algo interno? Estoy usando el paquete FFT de otra persona.
DrTodd13
No estoy familiarizado con esas técnicas (aunque suena interesante). Comenzaría con técnicas estándar antes de pasar a ese dominio. Aunque elegiría una técnica estándar que se parezca más a la técnica avanzada que desea emular.
Bjorn Roche
Las salidas FFT generalmente están en partes reales e imaginarias. Puede traducir esto en magnitud y fase de la manera habitual (real + imaginario y mag y fase son representaciones válidas de números complejos). Cómo usar esto para el seguimiento de tono es sutil: tendrá que leer el libro DAFX para los detalles.
Bjorn Roche
2

Los picos anchos que ve pueden ser el resultado de fenómenos físicos, no un artefacto de procesamiento de señales. En general, los picos estrechos en un resultado de FFT representan una sinusoide no modulada exactamente periódica en la ventana en el dominio del tiempo. Pero las vibraciones de la cuerda del piano no son tan estacionarias. Evolucionan con el tiempo, creando una notable modulación.

Varios efectos: múltiples cuerdas de piano por nota intercambiarán energía a través de la caja de resonancia; la energía de vibración total decaerá con el tiempo; Para empezar, los modos de vibración pueden ser ligeramente inarmónicos; la frecuencia exacta de vibración de cada modo (armónico) puede cambiar con la disminución de la amplitud debido a la rigidez y el diámetro de la cuerda no cero; y cada armónico puede decaer a una velocidad diferente, etc.

Puede que tenga que decidir cuál de estas múltiples modulaciones desea llamar "el tono" (los libros sobre audiología pueden ayudar), y encontrar un método para rastrearlo mejor dentro del "pico amplio" de la FFT.

hotpaw2
fuente
1

Con las notas más bajas de los pianos, especialmente para los verticales, el espectro tiende a extenderse (la distancia entre el fundamental y el primer sobretono es un poco más de una octava, etc.). Esto es lo que le da a los pianos su sonido de percusión, la nota más baja en los montantes más viejos a menudo sonará más como un ruido sordo que una nota, y según tengo entendido, esta es la razón por la cual los montantes tienen su particular sonido de honky tonk percusivo. Debido a esto, los buenos afinadores de piano (las personas, no los algoritmos) afinarán los pianos con los tonos más bajos que los fundamentales para las notas más bajas, el oído humano tiende a enfocarse en la interacción de los tonos más bajos para estas notas. El estiramiento de la serie armónica también podría ser la causa de los picos más amplios de lo esperado en el espectro.

Nathan Day
fuente
Bueno, la falta de armonía no es igual a la variabilidad. La falta de armonía provocaría que el pico esté en un punto diferente, pero no veo por qué lo haría más ancho. ¿Quizás el ancho del pico se deba a la varianza de la señal inherente a lo largo del tiempo y, por lo tanto, acortar el período de muestra reduciría la varianza?
DrTodd13