2009-01-07 16 views
6

Estoy tratando de encontrar un algoritmo para detectar cuando el usuario sopla en el micrófono (como Ninentdo DS o iPhone) en un dispositivo WM6 con C#.¿Cómo controlar el micrófono para detectar ruido?

pensaba para utilizar de forma de onda para leer desde el micrófono en tiempo real en un buffer pequeño, pero estoy un poco perdido sobre cómo reconocer el sonido soplando, supongo que suena como ruido blanco. Alguien tiene una idea sobre cómo hacerlo?

Cualquier ayuda será muy apreciada.

+0

"sonido de ruido" ... parece una combinación incómoda. – mmcdole

+0

¿Te importa que el sonido sea de soplido y no solo algo ruidoso? El problema se vuelve mucho más fácil si realmente no te importa cuál es el sonido. –

Respuesta

4

Si tuviese que resolver el problema, soplaría en el micrófono y record that. Luego ejecute an FFT en los datos de onda para obtener una frecuencia dominante (o unos pocos). Haría eso por varios "golpes" para ver si producen resultados similares. Si lo hacen (y estoy bastante seguro de que lo harán) entonces usaría un algoritmo para buscar esa misma frecuencia.

No es una tarea trivial, pero dado que se lleva a cabo una gran parte del trabajo de grabación y matemática, probablemente pueda hacer que funcione sin demasiado dolor.

+0

No tenía idea de que OpenNetCF tuviera una función FFT. Muy genial. – MusiGenesis

+0

De hecho, tenemos 2 implementaciones diferentes que hice hace años (probablemente vino en la versión 1.2 más o menos). – ctacke

+0

Creo que el "ruido" (al menos el ruido blanco, que es lo que debe producir el soplar en un micrófono) por definición es una mezcla de todas las frecuencias; una frecuencia dominante implicaría un tono, que haría que el sonido "no sea ruidoso" –

1

Esto no es exactamente lo mismo, pero aquí es mi respuesta a una pregunta acerca de notas con inicio:

Note onset detection

La respuesta describe un enfoque que se basa en la fuerza de señal de elevarse por encima de un determinado umbral . Este enfoque funcionaría para detectar un ruido de soplo, aunque también respondería a cualquier ruido, por lo que hablar, etc. también lo activaría.

Puede usar FFT, pero creo que esto sería demasiado lento para usarlo en tiempo real, especialmente en un dispositivo con Windows Mobile (aunque podría ser lo suficientemente rápido). Sin embargo, es poco probable que un ruido de soplo tenga una frecuencia dominante, a menos que el soplador silbe una nota en particular. Si la FFT es lo suficientemente rápida, es posible que realmente desee buscar ruidos que no tengan una frecuencia dominante (suponiendo que cualquier cosa con una frecuencia o frecuencias dominantes sea el habla o un instrumento de algún tipo) y que estén muy ponderados. hacia el extremo superior del rango audible (por encima de 10,000hz o menos).

+0

Tomaré su palabra sobre frecuencias dominantes. Mi trabajo de FFT ha sido todo para el análisis sísmico. Lo que sé es que las formas de onda aparentemente "ruidosas" a menudo muestran un par de picos dominantes debido a las frecuencias naturales. Supuse (probablemente erróneamente) que ves algo similar en el ruido blanco. – ctacke

+0

Creo que el ruido blanco per se muestra la misma intensidad en todas las frecuencias (aunque podría ser un ruido rosa, es tarde y estoy demasiado cansado para googlear). Sin embargo, no creo que un golpe en realidad sea ruido blanco. – MusiGenesis

3

Un golpe en un micrófono no necesariamente mostrará frecuencias dominantes en el rango alto (10,00hz +). Soplar en un micrófono de PC probablemente provocará una distorsión y una estaturación de la señal, que también tiene muchas frecuencias de bajo rango. La señal resultante será simplemente una gran explosión de saturación.

Tuve que hacer un proyecto similar hace años, y lo que hice fue simplemente buscar picos de volumen muy por encima de los niveles de habla normales. Funcionó bien.

+0

La cosa de 10,000 hz fue una suposición total - nunca he visto una grabación de un golpe. Tu mención de distorsión solo me dio una idea para otra respuesta. – MusiGenesis

3

La respuesta de sthg menciona la distorsión como un posible resultado de soplar en un micrófono. Acabo de hacer una prueba rápida, y mi grabación de soplado (en un micrófono barato) muestra una gran cantidad de muestras en los valores mínimo y máximo (por ejemplo, 32767 y -32768 en un archivo WAV de 16 bits por muestra), que parece que se ha aplicado una parte superior plana a cada uno de los picos. Una manera muy simple de detectar el sonido de soplo podría ser simplemente contar todas las muestras que están en los valores mínimo/máximo, y si representan más del 5% del total (o algún otro umbral) suponga que se está produciendo un soplo.

+0

Simple, efectivo, rápido ... Creo que esta es la forma en que iría (aunque no es tan divertido como una FFT rodante). – ctacke

+0

Gracias. Esperaba que alguien entendiera el humor en la frase "supongamos que está ocurriendo un soplo". :) – MusiGenesis

1

No he visto el espectro de esto, pero creo que debería ver un espectro de ruido de banda limitada con la mayoría de la energía por debajo de unos pocos cientos de Hz. Esto significa que no necesita una FFT de ancho de banda de audio completo, y 16K puntos es exagerado. Incluso en una FFT de 256 puntos en un ancho de banda pequeño, usted debería ser capaz de distinguir el ruido del soplo en el micrófono, aparte del habla.

Cuestiones relacionadas