2009-01-31 9 views
39

no muy diferente a un detector de clap ("palmada en! clap clap palmada apagado! clap clap Clap, clap apagado, la chapaleta! clap clap ") Necesito detectar cuando se cierra una puerta. Esto es en un vehículo, que es más fácil que una habitación o de la casa de la puerta:Dada una secuencia de audio, encontrar cuando una puerta se cierra (cálculo nivel de presión sonora?)

Escuchar: http://ubasics.com/so/van_driver_door_closing.wav

Look:
image of waveform shows steady line, then sudden disruption, settling down to steady line

Es muestreo en 16bits 4khz, y me gustaría evitar un montón de procesamiento o almacenamiento de muestras.

Cuando se mira en Audacity u otra herramienta de forma de onda que es muy distintivo, y casi siempre clips debido al aumento de la presión acústica en el vehículo - incluso cuando las ventanas y otras puertas están abiertas:

Escuchar: http://ubasics.com/so/van_driverdoorclosing_slidingdoorsopen_windowsopen_engineon.wav

Look:
alt text

espero que hay una relativamente simple algoritmo que tomar lecturas a 4 kHz, 8 bits, y realizar un seguimiento del 'estado estacionario'. Cuando el algoritmo detecta un aumento significativo en el nivel de sonido, marcaría el punto.

  • ¿Cuáles son sus pensamientos?
  • ¿Cómo detectarías este evento?
  • ¿Hay ejemplos de códigos de cálculos de nivel de presión sonora que podrían ayudar?
  • ¿Puedo salir con el muestreo menos frecuente

Actualización: Jugando con Octave (open source análisis numérico - similar a Matlab) y ver si la raíz cuadrada media dará (1 kHz o incluso más lento?) yo lo que necesito (lo que resulta en algo muy similar a la SPL)

Update2: Informática de la RMS encuentra la puerta cerrarse fácilmente en el caso sencillo:
alt textalt text
Ahora solo necesito ver los casos difíciles (radio encendida, calefacción/aire en altura, etc.). El CFAR parece realmente interesante: sé que voy a tener que usar un algoritmo adaptativo, y CFAR sin duda encaja.

-Adam

+0

¿Es un acelerómetro una opción? – ccook

+0

Incluyo un acelerómetro de triple eje en el tablero. Por cierto, también incluye un sensor de presión, sensor de luz, detección de interruptor de puerta, GPS y cámara. Si bien estas opciones están disponibles, lo ideal es que el diseño solo requiera el micrófono para la detección del cierre de la puerta. –

+0

simplemente un pensamiento al azar, si casi siempre se sincroniza cuando se cierra, ¿por qué no solo detectar el clip? – aronchick

Respuesta

26

Al observar las capturas de pantalla de los archivos de audio fuente, una manera simple de detectar un cambio en el nivel de sonido sería hacer un numerical integration de las muestras para averiguar la "energía" de la onda en un momento específico.

Un algoritmo aproximada sería:

  1. Divida las muestras en secciones
  2. calcular la energía de cada sección
  3. Tome la relación de las energías entre la ventana anterior y la ventana actual
  4. Si la relación excede algún umbral, determine que hubo un ruido fuerte repentino.

Pseudocódigo

samples = load_audio_samples()  // Array containing audio samples 
WINDOW_SIZE = 1000     // Sample window of 1000 samples (example) 

for (i = 0; i < samples.length; i += WINDOW_SIZE): 
    // Perform a numerical integration of the current window using simple 
    // addition of current sample to a sum. 
    for (j = 0; j < WINDOW_SIZE; j++): 
     energy += samples[i+j] 

    // Take ratio of energies of last window and current window, and see 
    // if there is a big difference in the energies. If so, there is a 
    // sudden loud noise. 
    if (energy/last_energy > THRESHOLD): 
     sudden_sound_detected() 

    last_energy = energy 
    energy = 0; 

debo añadir una advertencia de que no he probado esto.

De esta manera debe ser posible llevar a cabo sin tener todas las muestras grabadas primero. Mientras no es el tampón de cierta longitud (WINDOW_SIZE en el ejemplo), una integración numérica se puede realizar para calcular la energía de la sección de sonido. Sin embargo, esto significa que habrá un retraso en el procesamiento, según la longitud del WINDOW_SIZE. Determinar una buena duración para una sección de sonido es otra preocupación.

Cómo Dividir en secciones

En el primer archivo de audio, se observa que la duración del sonido de la puerta al cerrarse es de 0,25 segundos, por lo que la ventana utilizada para la integración numérica probablemente debería ser como máximo la mitad de eso, o incluso más como un décimo, por lo que la diferencia entre el silencio y el sonido repentino se puede notar, incluso si la ventana se superpone entre la sección de silencio y la sección de ruido.

Por ejemplo, si la ventana de integración era de 0,5 segundos, y la primera ventana cubría los 0,25 segundos de silencio y 0,25 segundos de cierre de la puerta, y la segunda ventana cubría 0,25 segundos de cierre de la puerta y 0,25 segundos de silencio, puede parecer que las dos secciones de sonido tienen el mismo nivel de ruido, por lo tanto, no activan la detección de sonido. Me imagino que tener una ventana corta aliviaría un poco este problema.

Sin embargo, tener una ventana demasiado corta significa que el aumento del sonido puede no encajar completamente en una ventana, y puede darse cuenta de que hay poca diferencia de energía entre las secciones adyacentes, lo que puede causar el sonido ser extrañado

Creo que tanto el WINDOW_SIZE como el THRESHOLD van a tener que determinarse empíricamente para detectar el sonido que se va a detectar.

Con el fin de determinar cuántas muestras necesitará guardar este algoritmo en la memoria, digamos que WINDOW_SIZE es 1/10 del sonido del cierre de la puerta, que es aproximadamente 0.025 segundos. A una velocidad de muestreo de 4 kHz, eso es 100 muestras. Eso parece no ser un requisito de memoria demasiado grande. Usando muestras de 16 bits que son 200 bytes.

ventajas/desventajas

La ventaja de este método es que el procesamiento puede realizarse con aritmética simple número entero si la fuente de audio se alimenta en como enteros. La captura es, como ya se mencionó, que el procesamiento en tiempo real tendrá un retraso, dependiendo del tamaño de la sección que esté integrada.

Hay un par de problemas que se me ocurre a este enfoque:

  1. Si el ruido de fondo es demasiado alto, la diferencia de energía entre el ruido de fondo y el cierre de la puerta no va a ser fácil de distinguir y es posible que no pueda detectar el cierre de la puerta.
  2. Se puede considerar cualquier ruido brusco, como un aplauso, ya que la puerta se está cerrando.

Tal vez, la combinación de las sugerencias en las otras respuestas, como se trata de analizar el registro de frecuencia de la puerta que se cierra mediante el análisis de Fourier, lo que requeriría un mayor procesamiento, pero haría menos propenso a errores.

Probablemente va a tomar un poco de experimentación antes de encontrar una manera de resolver este problema.

+0

Me gusta mucho este enfoque, así que lo implementaré y reportaré mis resultados aquí. En lugar de tener un umbral fijo, voy a hacer un seguimiento de la energía promedio, y tengo un factor ajustable (es decir, la ventana debe ser 1.5+ veces el promedio para disparar). –

1

Tal vez debería intentar detectar subida instantánea significativa de la presión de aire que debe marcar una puerta estrecha. Puede emparejarlo con esta forma de onda y análisis de nivel de sonido, y todos estos podrían darle un mejor resultado.

3

Me imagino que la frecuencia y la amplitud también variarían significativamente de un vehículo a otro. La mejor forma de determinar eso sería tomar una muestra en un Civic versus un SUV grande. Quizás podría hacer que el usuario cierre la puerta en un modo de "aprendizaje" para obtener la firma de amplitud y frecuencia. Entonces podrías usar eso para comparar cuándo está en modo de uso.

También podría considerar el uso Fourier analysis para eliminar los ruidos de fondo que no están asociados con la puerta estrecha.

8

Debería tocar los interruptores de cierre de la puerta en el automóvil. Intentar hacer esto con análisis de sonido es sobreinnovación.

Hay una gran cantidad de sugerencias sobre diferentes procesamiento de señales se acerca a, pero en realidad, en el momento de aprender acerca de la teoría de detección , construir una placa de procesamiento de señal integrado, aprender la arquitectura de procesamiento para el chip que eligió, intentar un algoritmo, depurarlo, y luego sintonizarlo para el automóvil en el que desea usarlo (y luego volver a sintonizarlo y volver a depurarlo para cada otro automóvil), le deseará solo stickey pegado con cinta una lengüeta cambiar dentro del auto y poner un imán en la puerta.

No es que no es un problema interesante para resolver los expertos DSP, sino de la forma en que está haciendo esta pregunta, está claro que el procesamiento de sonido no es la ruta que desea tomar. Sería una pesadilla para que funcione bien.

Además, la clapeta es solo un filtro de paso alto alimentado a un detector de umbral. (más un temporizador para asegurarse de que 2 aplausos lo suficientemente rápido juntos)

+1

En muchas situaciones, esta es la respuesta correcta. Si se puede hacer sin cablear los interruptores, entonces podemos evitar problemas de instalación, aumento de costos, problemas de responsabilidad y, dado que este dispositivo debe ser reutilizado (no instalado de manera permanente), el cableado no es óptimo. Es una opción, sin embargo. –

+1

En algunos casos, tal como el cableado eléctrico de puertas correderas o puertas con portón trasero podría ser necesario ya que el sonido del cierre no es tan enérgico, por lo que se requiere más procesamiento o ajuste personalizado (y por lo tanto configuración). Otro pensamiento fue colocar un sensor de luz cerca de una luz de cortesía, fácil de instalar y también funciona. –

+0

Tiendo a estar de acuerdo, pero eso no me impidió sugerir la forma de hacerlo algorítmicamente ... :) +1 –

5

Comenzaría mirando el espectro. Hice esto en los dos archivos de audio que diste, y parece que hay alguna similitud que podrías usar. Por ejemplo, la principal diferencia entre los dos parece ser alrededor de 40-50Hz. Mi .02.

ACTUALIZACIÓN

tuve otra idea después de la publicación de esta. Si puede, agregue un acelerómetro en el dispositivo. Luego, correlaciona las señales vibratorias y acústicas. Esto debería ayudar con la detección cruzada de la puerta del vehículo. Estoy pensando que debería estar bien correlacionado ya que el sonido es impulsado por vibración, por ejemplo, el estéreo no lo está. He tenido un dispositivo que fue capaz de detectar las rpm de mi motor con una montura de parabrisas (ventosa), por lo que la sensibilidad podría estar allí. (¡No prometo que esto funciona!)

alt text http://www.charlesrcook.com/spectral.jpg

%% Test Script (Matlab) 
clear 
hold all %keep plots open 
dt=.001 

%% Van driver door 
data = wavread('van_driver_door_closing.wav'); 

%Frequency analysis 
NFFT = 2^nextpow2(length(data)); 
Y = fft(data(:,2), NFFT)/length(data); 
freq = (1/dt)/2*linspace(0,1,NFFT/2); 
spectral = [freq' 2*abs(Y(1:NFFT/2))]; 

plot(spectral(:,1),spectral(:,2)) 

%% Repeat for van sliding door 
data = wavread('van_driverdoorclosing.wav'); 

%Frequency analysis 
NFFT = 2^nextpow2(length(data)); 
Y = fft(data(:,2), NFFT)/length(data); 
freq = (1/dt)/2*linspace(0,1,NFFT/2); 
spectral = [freq' 2*abs(Y(1:NFFT/2))]; 

plot(spectral(:,1),spectral(:,2)) 
6

Hay una gran cantidad de literatura relevante sobre este problema en el mundo de radar (se llama la teoría de detección).

Puede echar un vistazo a la detección de "promediación celular CFAR" (constante de falsa alarma). Wikipedia tiene un poco here. Tu idea es muy similar a esto, ¡y debería funcionar! :)

¡Buena suerte!

+0

sonidos de +1 (heh) como una buena aplicación – ccook

4

El proceso para encontrar un pico distinto en las señales de audio se llama transient detection. Las aplicaciones como Sony's Acid y Ableton Live usan la detección de transitorios para encontrar los ritmos en la música para hacer la coincidencia de tiempos.

El pico distintivo que se ve en la forma de onda anterior se denomina transitorio, y hay varios algoritmos buenos para detectarlo. El documento Transient detection and classification in energy matters describe 3 métodos para hacer esto.

0

En el tema del muestreo menos frecuente, la frecuencia de sonido más alta que se puede capturar es la mitad de la frecuencia de muestreo. Por lo tanto, si el sonido de la puerta del automóvil era más fuerte a 1000 Hz (por ejemplo), una frecuencia de muestreo inferior a 2000 Hz perdería ese sonido por completo

+0

También llamada tasa Nyquist - la velocidad a la que se debe realizar el muestreo para evitar el aliasing en un continuo dado a discreto conversión http://en.wikipedia.org/wiki/Nyquist_rate. –

0

Una puerta de ruido muy simple probablemente funcionaría bien en su situación. Simplemente espere la primera muestra cuya amplitud esté por encima de un valor umbral especificado (para evitar el disparo con ruido de fondo). Solo necesita hacerse más complicado que esto si necesita distinguir entre diferentes tipos de ruido (por ejemplo, el cierre de una puerta frente a una palmada).

+0

Sí, he mostrado los casos más simples aquí. La realidad es mucho más dura: con la radio y la calefacción/aire acondicionado en alto, obtengo resultados razonables, pero también recibo algunos falsos positivos con solo detección de pico RMS. –

Cuestiones relacionadas