Detectar ondas de sonido originales

Acabo de presentar un proyecto mío sobre reconocimiento de sonido mediante redes neuronales. Dije durante la presentación que decidí reconocer solo un sonido (notas musicales provenientes de una guitarra) en cualquier momento, explicando que reconocer múltiples sonidos es muy difícil o imposible.

Aplico FFT en la onda de sonido y la introduzco en una red neuronal. Mi pregunta es, si tuviera que grabar varios sonidos a la vez, ¿no podrían los datos de FFT ser exactamente los mismos para diferentes sonidos?

Quiero decir, si combinas pecado ( X ) y pecado ( X + π ) obtienes una onda que es una línea recta. También obtienes una línea recta para pecado ( 2 X ) y pecado ( 2 X + π / 2 ) . Entonces, dos conjuntos diferentes de ondas dan la misma onda combinada, que tendrá los mismos datos de FFT.

Pero me confundí porque el profesor dijo que siempre puedes descomponer el sonido en sus elementos originales (por ejemplo, tomar un acorde que tenga 6 notas diferentes tocadas individualmente) porque los datos están en el dominio del tiempo. ¿Realmente siempre se puede descomponer una onda de sonido en sus componentes? ¿Qué pasa con el caso anterior? Explicó además que en el "dominio del espacio" puede tener el problema que mencioné anteriormente, pero ¿no en el dominio del tiempo?

PD: No sé si este es el sitio de Stack Exchange correcto para hacer esta pregunta.

Respuestas (1)

La mayoría de los sonidos (incluso el sonido de una "nota única") contienen múltiples frecuencias. Para los sonidos puros, existe la frecuencia fundamental y sus armónicos, pero casi cualquier sonido "real" contiene algunos componentes adicionales, debido a la envolvente del sonido (por ejemplo, el hecho de que una cuerda debe tocarse y luego decae) ​​o debido al muestreo. (su muestra es finita, por lo que habrá algunos efectos debido a este truncamiento de la onda de sonido).

Cuando haga una transformada de Fourier, verá todos los componentes de frecuencia. Es bastante fácil detectar el tono de varias cuerdas tocadas al mismo tiempo en, por ejemplo, un acorde de piano. Ahora, dependiendo de su definición de "reconocer" diferentes sonidos, puede ser difícil detectar dos notas que suenan simultáneamente pero separadas por una octava (de modo que un sonido en esencia cubre los armónicos del otro). El oído es notablemente bueno para detectar la diferencia; por ejemplo, podemos decir que la nota más alta no está exactamente en fase y que la amplitud del segundo armónico (la fundamental de la nota más alta) es más alta de lo que sería si era solo el segundo armónico de la nota más baja.

Por supuesto, si toca dos notas de la misma frecuencia y fase, entonces no podrá distinguirlas (excepto por el hecho de que la amplitud será mayor de lo que espera de una "nota única", tal vez). Pero los sonidos "reales", de los instrumentos musicales, tendrán firmas suficientemente únicas para que puedas "verlos".

Es posible que le interese una respuesta que escribí hace un tiempo en la que usé una aplicación simple de iPhone para analizar el espectro del sonido de una moneda al caer ; esto muestra que hay múltiples armónicos para diferentes sonidos, y que lo más probable es que puedas ver (observando el espectro combinado) la suma de estos dos sonidos y diferenciarlos. De hecho, sería una aplicación divertida de su trabajo para detectar "¿cuánto dinero se me cayó?".

Lo que me confundió está relacionado con esto: It is quite easy to detect the pitch of multiple strings struck at the same time in, say, a piano chord. Sabía que podía detectar acordes completos y luego, en función del conocimiento musical, tocar las notas individuales. El profesor dijo que hay software que reconoce las notas individuales que se tocaron en un acorde. Tiendo a creer que ese software solo reconoce el acorde y luego, usando un diccionario, recupera las notas que forman ese acorde. Apuesto a que si tocas un acorde que no se usa en la música, no reconocerá las notas.
Tu profesor tiene razón; no necesita un diccionario para extraer el acorde de la FFT. Es posible que desee ver esta respuesta y los enlaces que contiene. (El intercambio de pila dsp también tiene una serie de aciertos en el "reconocimiento de acordes"...)
@Cristy, pruébalo con el sistema que desarrollaste para tu proyecto. Toque una sola nota y observe el resultado de la FFT. Luego toca un acorde y mira la FFT. Lo que debería ver es que la FFT hace que las notas individuales del acorde sean muy claras.
"Tiendo a creer que ese software solo reconoce el acorde y luego, usando un diccionario, recupera las notas que forman ese acorde". Eso no tiene sentido para mí. Hay literalmente cien (y probablemente más que eso) diferentes "conjuntos de notas" que son el mismo "acorde" (digamos Do mayor) en un piano. ¿Cómo lidiaría con eso su "diccionario"?
Una de las cosas que podría intentar es esta: toque un arpegio en la guitarra y detecte (en el dominio del tiempo) el momento en que se toca cada nota; luego tome una FFT "justo antes" y "justo después" y observe la diferencia, que será causada por la nueva nota que se acaba de agregar. Eso mejoraría poderosamente su algoritmo en un primer paso hacia el reconocimiento completo de acordes. También mire los filtros de peine que eliminan una nota y sus armónicos, como un primer paso para facilitar esta tarea.
Estoy usando una red neuronal, por lo que en realidad no quiero todos esos filtros, solo tengo un filtro de paso de banda básico para la reducción de ruido (quiero que la red se encargue del "procesamiento"). Todavía no lo he probado con varias notas a la vez, me resultó difícil registrar los datos de entrenamiento. Me preguntaba, si es tan fácil detectar notas individuales, ¿por qué casi no hay software que lo haga (correctamente)? Incluso RockSmith, con su cable RealTone, tiene problemas a veces o considera que tocó correctamente una nota que en realidad no tocó.
Consulte también stackoverflow.com/q/4337487/1967396 . Creo que usar una red neuronal sin al menos tratar de inyectar "algo" de pensamiento analítico primero está haciendo que el problema sea más difícil de lo que debería ser. Ya está tomando una FFT, que es un primer paso de análisis, por lo que está inyectando algo de conocimiento sobre la física. ¿Por qué no agregar un poco más de inteligencia antes de dejar que su IA suelte...