Estoy tratando de usar ANN para la detección de tono de notas musicales. La red es una simple MLP de dos capas, cuyas entradas son básicamente una DFT (promediada y distribuida logarítmicamente), y 12 salidas corresponden a las 12 notas de una octava en particular.Detección de tono usando redes neuronales
La red está formada con varias muestras de esas 12 notas tocadas por algún instrumento (una nota a la vez), y algunas muestras de "silencio".
Los resultados son realmente buenos. La red es capaz de detectar esas notas tocadas con precisión por diferentes instrumentos, es relativamente amiguito al ruido, e incluso no se pierde completamente cuando se reproduce una canción.
El objetivo, sin embargo, es poder detectar sonido polifónico. De modo que cuando dos o más notas se tocan juntas, las dos neuronas correspondientes dispararán. Lo sorprendente es que la red ya lo hace en cierta medida (entrenándose solo con muestras monofónicas), aunque de manera menos consistente y menos precisa que las notas monofónicas. Mi pregunta es ¿cómo puedo mejorar su capacidad para reconocer el sonido polifónico?
El problema es que realmente no entiendo por qué realmente funciona. Las diferentes notas (o sus DFT) son básicamente diferentes puntos en el espacio para el que se entrena la red. Entonces veo por qué reconoce sonidos similares (puntos cercanos), pero no cómo "concluye" el resultado para una combinación de notas (que forman un punto distante de cada uno de los ejemplos de entrenamiento). De la misma forma que una red Y que está entrenada sobre (0,0) (0,1) (1,0) = (0), no se espera que "concluya" que (1,1) = (1).
La fuerza bruta se aplica a esto para entrenar la red con tantas muestras polifónicas como sea posible. Sin embargo, dado que la red parece captar de alguna manera vagamente la idea de las muestras monofónicas, probablemente haya algo más divertido aquí.
¿Alguna sugerencia? (perdón por la duración, por cierto :).
Sólo tomando la frecuencia máxima es muy poco fiable – finnw