Principio
Le propongo que use 2 micrófonos en lugar de uno. La idea es adquirir la señal en 2 ubicaciones diferentes, al mismo tiempo (en comparación con el período de la señal), y multiplicarlas para extraer la longitud de onda.
Adquirirás1señalporubicación.Lasegundaseñalseretrasaráunaciertacantidaddetiempo.Lollamamosdelta\$\delta\$.Digamosqueenelmicrófononúmero1,tenemosunaondasinusoidalpura\$mic1(t)=\sin(\omegat+\phi)\$ yenelmicrófononúmero2tenemos\$mic2(t)=\sin(\omegat+\phi-\delta)\$
Deltasolodependedelalongituddeondaporquefijamosladistanciaentrelos2micrófonos.Entonces,siobtenemosdelta,obtendremoslavelocidad.
Vea,porejemplo,silosmicrófonosdeladistancia2sonexactamenteigualesalamitaddelalongituddeunaonda,entoncestendríatalesseñales:
Nota: Considero que la amplitud es la misma entre los 2 micrófonos.
Ahora, considera usar esta fórmula
\ $ \ sin (a) \ sin (b) = 1/2 (\ cos (a-b) - \ cos (a + b)) \ $
- Haz esta multiplicación en el firmware
\ $ mic1 (t) * mic2 (t) = 1/2 (\ cos (\ delta) - \ cos (2 (\ omega t + \ phi) - \ delta)) \ $
-
Mediante el filtro de paso bajo (o promediado) \ $ mic1 (t) * mic2 (t) \ $ solo obtendría la parte constante, que es
\ $ 1/2 \ cos (\ delta) \ $
-
Luego, calcular delta
\ $ \ delta = \ arccos (2 * paso bajo (mic1 (t) * mic2 (t)) \ $
-
Finalmente, conviértalo a radianes a metros
\ $ \ lambda = \ delta / 2 \ pi * d \ $
Vea esta imagen, donde tomo un delta de 1 rad, y un filtro de paso bajo de segundo orden de Butterworth.
Requisitos
- Deben configurarse para estar en línea con la fuente de sonido
- La distancia d entre ellos debe medirse con precisión, será su referencia en el dominio del espacio.
- La distancia d entre ellos debe ser menor que 1/2 longitud de onda. Para su información, para una señal de 1 kHz sería ~ 17 cm máx.
Realización
- Conecte la salida del micrófono a las entradas analógicas en la placa del arduino.
- Si pudiera pagarlo, agregue un filtro de paso de banda entre los micrófonos y los arduinos. La frecuencia de corte está alrededor de la frecuencia de onda de origen.
- Use la función AnalogRead () del Arduino para mic1 y la siguiente instrucción llama a la de mic2. Debido a que la lectura requiere 100 usec, es importante tenerlo en cuenta y usar una frecuencia lo suficientemente lenta (como 100 Hz) para minimizar el impacto de esta latencia.