2010-11-19 15 views
9

Actualmente estoy trabajando en mi proyecto de cuarto año (informática) que implica la transcripción automática de música -> partituras. Lo estoy haciendo en Matlab en este momento, pero tendrá que convertirse a Java en algún momento.MATLAB - Falta fundamental de una FFT

Mi problema: Tengo mi programa devolviendo las notas correctas para tonos sinusoidales puros, ahora he encontrado un problema cuando se trata de la recuperación de la frecuencia fundamental de una nota tocada por un instrumento natural. Con ciertas notas, el pico que representa la parte fundamental de la nota parece faltar por completo. Por ejemplo, cuando toco una nota G3 de garageband, se muestra como G4, ya que solo los armónicos 1º, 3º, 5º y 7º están apareciendo en mi trama. Traté de agregar la imagen, pero como esta es mi primera publicación, no me lo permitió. Cualquier indicador en la dirección correcta sería muy apreciado.

+0

Bummer acerca de la imagen. Ayudaría mucho ver lo que estás viendo. – xscott

+0

El primer armónico * es * el fundamental. ¿Estás seguro de que eso es lo que quieres decir? –

+1

Sí, estoy seguro de que no me está dando lo fundamental, el primer pico que me está dando es a 392Hz, donde como le estoy dando un G3 que está a 196Hz. También creé un sitio para mi proyecto, hice una publicación de blog aquí que tiene la imagen del título configurada para ser mi trama, con suerte esto ayudará: http://csserver.ucd.ie/~djones/Project_Site/Blog/Entries/ 2010/11/19_Problem_Confirmation__Missing_Fundamental.html – Joneser

Respuesta

16

Esto no es inusual. Es muy común que falten los fundamentales, o casi, las voces masculinas, los instrumentos de cuerda grandes y muchas otras fuentes de sonido.

Eso hace que el uso de un pico de FFT solo sea extremadamente pobre para determinar notas musicales de instrumentos musicales reales, a diferencia de los generadores de función de onda sinusoidal. Eso es porque el tono es diferente de la frecuencia espectral máxima. El tono es un fenómeno de percepción psicoacústica. Entonces eso es lo que necesita leer. Hay toneladas de trabajos de investigación sobre el tema.

Por lo tanto, debe observar un conjunto de algoritmos completamente diferente. Probar cepstrums (análisis cepstral), espectros de productos de armónicos, autocorrelación y similar (AMDF, ASDF, etc. GAL), RAPT (algoritmo robusto para Pitch Tracking), YAAPT, etc.

AÑADIDO: Escribí una más detallada explanation of pitched sounds with missing fundamentals in a blog post .

+2

Gracias por eso, ¿qué tan fácil son algunos de estos algoritmos para implementar? Ya llevo 2 meses en mi proyecto, así que esto es un duro golpe para mi progreso si tengo que cambiar eso. – Joneser

+1

¡Excelente respuesta!La elección del algoritmo correcto dependerá de una cosa más, ¿pretendes transcribir la música monofónica? ¿O también quieres escribir música polifónica? – Nemeth

0

¿Ha intentado ejecutarlo a través de un espectrograma (función espectrograma en MATLAB) para identificar lo que está sucediendo?

No sé qué algoritmos usa, sin esa información, no podemos decir qué está yendo mal. Lo que me alarma es que su segundo tercer armónico (segundo pico en la trama) es mucho más grande que su segundo armónico (primer pico en la trama).

¿Estás seguro de que tienes todo el muestreo correcto: es decir, tu DFT solo tiene frecuencias hasta la mitad de la frecuencia de muestreo (tanto el rango de frecuencia positivo como el negativo)? Además, ¿cómo se suprime una parte transitoria de la señal?

+1

"¿Está seguro de que tiene todo el muestreo correcto: es decir, su DFT solo tiene frecuencias hasta la mitad de la frecuencia de muestreo (tanto el rango de frecuencia positivo como el negativo)?" Cuando trazo los bins de frecuencia frente a la potencia, tengo un número de picos al principio del rango, pero también tengo algunos picos al final del rango, solo estaba teniendo en cuenta el primer conjunto de picos, ¿Estás diciendo que hay algo que necesito para los picos en ambos extremos para obtener el valor preciso para f0? Si alguien me puede votar para que tenga 10 representantes, entonces puedo publicar fotos – Joneser

0

El hecho de que vea picos en 2f, 4f, 6f y 8f implica que sus datos de entrada son en realidad una octava superior a lo que cree que es, o que está malinterpretando la escala de frecuencia de sus resultados. Si solo estuvieras perdiendo la frecuencia fundamental, verías 3f, 5f y 7f también.

Sugerencias:

  • Terreno sus datos de entrada antes de que FT. Debería poder observar la frecuencia del término dominante.
  • Escucha la nota producida por garageband. ¿Está por encima o por debajo del C medio?
  • Compruebe que comprende de dónde provienen los valores en la escala de frecuencia de su trazado.
0

No es raro que la frecuencia fundamental de una nota de instrumento musical se atenúe en relación con los armónicos (también conocidos como armónicos) y en algunos casos la magnitud de frecuencia fundamental puede ser muy inferior a la magnitud de sobretonos.

Eche un vistazo a esta trama de frecuencia/magnitud de un fagot real (no un fagot sintetizado) tocando una nota G3. Observe el fundamental atenuado (196.39 Hz) relativo al primer armónico. Pero también observe que todos los armónicos múltiples enteros son visibles hasta el décimo armónico. En realidad, muchos más armónicos están presentes, pero no son visibles en este diagrama de magnitud lineal.

BassoonG3frequencyMagnitude

En su caso, el hecho adicional de que su espectro musical de G3 nota está mostrando sólo los 1º, 3º, 5º y 7º armónico sugiere que algo está mal. El sonido de la prueba parece estar sintetizado, por lo que el problema podría ser la forma en que se sintetizó el sonido.

Los espectros de los instrumentos musicales reales generalmente muestran la frecuencia fundamental y muchos armónicos múltiples enteros como 1, 2, 3, etc., como se vio anteriormente. Y los armónicos suelen extenderse muy por encima de 6KHz para la mayoría de las notas tocadas en la mayoría de los instrumentos.

Echa un vistazo a esta gráfica de frecuencia/decibel_magnitude de un fagot real (no un fagot sintetizado) que toca una nota G3. Observe que hay un total de 37 armónicos enteros múltiples, hasta que desaparece en el piso de ruido cerca de -104 dB.

BassoonG3frequencyDecibelMagnitude

Se puede escuchar esta muestra fagot y ver su espectro aquí: Bassoon musical instrument spectrum

también leen este post detallada sobre analytical approaches to autonomous musical transcription