¿Qué algoritmos son buenos candidatos para el reconocimiento de sonido? Estoy principalmente interesado en reconocer sonidos en un entorno doméstico, por ejemplo, un temporizador de microondas que suena, un teléfono que suena, un timbre, etc.

Mi sugerencia…

Parte A: Generando la huella digital de audio del byte de sonido de entrada

1. Decodificación y normalización
Tome su archivo de sonido y conviértalo a formato PCM. Desea independencia de formato, velocidad de bits y pérdida en su algoritmo para obtener la máxima eficacia, ya que probablemente usará dispositivos sensores con diferentes niveles de calidad. También estandarice en un período de tiempo, digamos 15 segundos, y recorte el audio como tal.

2. Extracción de frecuencia utilizando FFT. Ahora tendrá datos de amplitud a lo largo del tiempo para varias frecuencias. Las matrices grandes son el resultado.

3. Identificar una forma de extraer señales salientes. Puede ser creativo con DSP y estadísticas avanzadas aquí (coeficientes de Fourier, MFCC, planitud espectral, nitidez, trayectorias de pico, PCA).

4. Mayor reducción de datos y generación de huellas digitales. Hay varias técnicas de álgebra lineal disponibles para descomponer matrices grandes (SVD, LU y descomposiciones QR) de modo que se obtiene una reducción de la dimensionalidad sin demasiada pérdida de información.

5. Identifique una forma de mapear la información reducida, probablemente un conjunto de vectores, en una huella digital.

Parte B: Generando un marco para la correspondencia eficiente de huellas digitales

6. Construya un modelo de espacio vectorial de huellas digitales de todos los sonidos conocidos. Eso puede llevar un tiempo. Consejo: use una granja de cómputo como Amazon EC2 para construir esto más rápido.

7. Utilice algoritmos de recuperación de información estándar para hacer coincidir el sonido de entrada con el modelo de espacio vectorial.

Parece que un enfoque de 2 o 3 partes debería ser suficiente.

Primero caracterizaría cada sonido por la envolvente de onda de su amplitud (su volumen): su ataque, decadencia, sostenimiento y liberación. Muchos sonidos se pueden reconocer por su combinación de estos cuatro atributos solos.

Luego agregaría un poco de análisis de forma de onda para caracterizar el timbre de cada sonido. Los timbres y los tonos melódicos generalmente reflejarán ondas simples de pecado, mientras que los zumbidos y los sonidos de raspado serán más complejos.

Eso deja sonidos que varían con el tiempo, como tocar una puerta o hablar. Los modelos jerárquicos ocultos de Markov han demostrado ser muy efectivos para reconocerlos.

Algunos de los desarrolladores que trabajan (ed) en Shazam publicaron un artículo que describe su metodología: http://www.ee.columbia.edu/~dpwe

More Interesting

¿Qué debo usar para reducir los atributos en mi conjunto de datos, PCA o algoritmos de selección de características?

¿Qué es mejor para la programación competitiva, la introducción del MIT a los algoritmos o los tutoriales de TopCoder?

¿Cuáles son las diferencias entre DFS y BFS?

¿Cómo se puede resolver el coeficiente binomial usando programación dinámica y tabla hash?

Se da una matriz (n). La matriz puede atravesarse por saltos de tamaño <= k. Si en el índice i, un salto puede aterrizar en cualquier lugar desde i + 1 hasta i + k index.

¿Qué tan difícil es implementar un sitio web de reserva de boletos con un volumen máximo de 1 millón de boletos por hora durante ciertas horas del día?

¿Por qué el algoritmo de refuerzo es robusto para sobreajustar?

¿Cómo hacemos análisis de búsqueda binaria (matriz)?

Si uno se está preparando para una entrevista en Google (y tiene 6 meses en la mano), ¿qué libro lo beneficiará más y por qué? ¿'Introducción a los algoritmos' (CLRS) o 'Algoritmos desbloqueados'?

¿Cómo determina el algoritmo de alimentación de Quora el contenido a mostrar?

¿Cuál es el algoritmo generador de números aleatorios más avanzado disponible ahora?

¿Cuánto cálculo se requiere para comprender algoritmos y redes de computadoras?

¿Cuál es una explicación simple de por qué BFS bidireccional se ejecuta en [math] \ Theta (\ sqrt {n}) [/ math]?

Soy bueno en algoritmos y estructuras de datos, ¿cuál debería ser mi estrategia para comenzar una carrera independiente en este dominio?

¿Cómo unir y dividir funciona en un Treap al agregar o eliminar un elemento?