python - sopare - Análisis de audio de Birdsong: cómo encajan dos clips
audio analysis python (4)
Tengo ~ 100 archivos de audio wav a una frecuencia de muestreo de 48000 de aves de la misma especie con las que me gustaría medir la similitud. Estoy empezando con los archivos wave, pero sé (muy poco) más sobre el trabajo con imágenes, así que asumo que mi análisis estará en las imágenes del espectrograma. Tengo varias muestras de algunas aves de diferentes días.
Aquí hay algunos ejemplos de los datos, junto con (disculpas por los ejes no etiquetados; x es muestra, y es la frecuencia lineal multiplicada por unos 10.000 Hz): Estos cantos de pájaros aparentemente aparecen en "palabras", segmentos distintos de la canción, que es probablemente el nivel en el que debería estar comparando; Ambas diferencias entre palabras similares y la frecuencia y orden de varias palabras.
Quiero tratar de eliminar el ruido de la cigarra: las cigarras emiten un chirrido con una frecuencia bastante constante y tienden a coincidir en la fase, por lo que no debería ser demasiado difícil.
Parece que algún umbral puede ser útil.
Me han dicho que la mayoría de la literatura existente utiliza una clasificación manual basada en las características de la canción, como Pandora Music Genome Project. Quiero ser como Echo Nest ; utilizando la clasificación automática. Actualización: Mucha gente sí estudia esto.
Mi pregunta es: ¿qué herramientas debo usar para este análisis? Necesito:
- Filtrar / eliminar el ruido general y mantener la música.
- Filtra ruidos específicos como los de las cigarras.
- Dividir y clasificar frases, sílabas y / o notas en el canto de los pájaros.
- Crear medidas de diferencia / similitud entre partes; algo que detectará diferencias entre las aves, minimizando las diferencias entre diferentes llamadas de la misma ave
Mi arma de elección es adormecer / asustar, pero ¿podría ser útil aquí algo como openCV?
Edición: actualicé mi terminología y mi nuevo enfoque después de algunas investigaciones y la útil respuesta de Steve.
Aparentemente ya estás realizando STFT o algo similar para construir esas imágenes, así que sugiero que construyas resúmenes útiles de estas estructuras mixtas de tiempo / frecuencia. Recuerdo un sistema creado para un propósito ligeramente diferente que fue capaz de hacer un buen uso de los datos de forma de onda de audio dividiéndolos en un pequeño número (<30) de contenedores por tiempo y amplitud y simplemente contando el número de muestras que cayeron en cada contenedor . Es posible que pueda hacer algo similar, ya sea en el dominio de tiempo / amplitud o en el dominio de tiempo / frecuencia.
Dependiendo de la forma en que desee definir su aplicación, puede necesitar un enfoque supervisado o no supervisado. En el primer caso, necesitará algún proceso de anotación para proporcionar a la fase de entrenamiento un conjunto de asignaciones desde muestras (archivos de audio) a clases (identificaciones de aves o lo que sea su clase). En el caso de un enfoque no supervisado, debe agrupar sus datos para que los sonidos similares se asignen al mismo clúster.
Puede probar mi biblioteca: pyAudioAnalysis que proporciona envoltorios de alto nivel tanto para clasificación de sonido como para agrupamiento de sonido.
Pregunta interesante, pero bastante amplia. Recomiendo mirar algunas publicaciones existentes sobre la identificación automática de canciones de aves. (Sí, hay un montón de gente trabajando en ello).
Este documento (edición: enlace fallido, pero este capítulo de Dufour et al. 2014 podría ser aún más claro) utiliza un método básico de reconocimiento de patrones de dos etapas que recomendaría probar primero: extracción de características (el documento utiliza MFCC), luego Clasificación (el papel utiliza un GMM). Por cada cuadro en la señal de entrada, obtienes un vector de MFCC (entre 10 y 30). Estos vectores MFCC se utilizan para entrenar un GMM (o SVM) junto con las etiquetas correspondientes de las especies de aves. Luego, durante la prueba, envía un vector de consulta MFCC al GMM, y le dirá qué especie cree que es.
Aunque algunos han aplicado técnicas de procesamiento de imágenes a problemas de clasificación de audio / toma de huellas dactilares (por ejemplo, este documento de Google Research ), dudo en recomendar estas técnicas para su problema o similares, debido a las molestas variaciones temporales .
"¿Qué herramientas debo usar para este análisis?" Entre muchos otros:
- Extracción de características: MFCCs, detección de inicio
- clasificación: GMM, SVM
Lo siento por la respuesta incompleta, pero es una pregunta amplia y hay más de este problema que se puede responder aquí brevemente.
Tuve que hacer esto una respuesta, ya que es simplemente demasiado largo para un comentario.
Básicamente estoy trabajando en este campo ahora mismo, así que siento que tengo algo de conocimiento. Obviamente, desde mi punto de vista, recomendaría trabajar con audio en lugar de imágenes. También recomiendo usar MFCC como su extracción de características (que puede considerar como coeficientes que resumen / caracterizan sub-bandas específicas de frecuencia de audio [porque son]).
GMMs son el ir.
Para realizar esta tarea, debe tener algunos (preferiblemente muchos) datos etiquetados / conocidos , de lo contrario no hay base para que el aprendizaje automático tenga lugar.
Un tecnicismo que te puede resultar útil:
"Luego, durante las pruebas, envías un vector de consulta MFCC al GMM, y te dirá qué especie cree que es".
Más exactamente, envía una consulta a cada GMM (que si las está utilizando correctamente, cada una le otorga una puntuación [probabilidad] de ese vector de características en particular emitido por esa distribución de probabilidad). Luego, compara todos los puntajes de probabilidad que recibe de todos los GMM y los clasifica de acuerdo con el puntaje más alto que recibe.
UBMs
En lugar de "filtrar" el ruido, simplemente puede modelar todo el ruido de fondo / distorsión del canal con un UBM (Universal Background Model). Este modelo consiste en un GMM entrenado que usa todos los datos de entrenamiento disponibles para usted (es decir, todos los datos de entrenamiento que utilizó para cada clase). Puede usar esto para obtener una ''relación de probabilidad'' ( Pr [x sería emitido por un modelo específico] / Pr [x sería emitido por el modelo de fondo (UBM)]) para ayudar a eliminar cualquier sesgo que pueda explicarse mediante el modelo de fondo sí mismo.