1 votos

Detección de desplazamiento de fase entre 2 señales no periódicas

Me gustaría encontrar el desfase entre dos señales no periódicas leídas de un micrófono de electreto. Así que lo que hice hasta ahora es lo siguiente:

  1. leer las señales de los micrófonos usando un microcontrolador arduino uno.
  2. terminar de escribir un código de fft basado en el algoritmo de cooley_tukey.
  3. probar el fft con la ayuda de matlab.

Mi plan es:

  1. buscar el valor máximo en cada señal y almacenar su índice.
  2. encontrar la fase correspondiente al índice encontrado en el paso anterior del fft usando: fase = atan(imaginario/real)
  3. asumir fase1 y fase2 correspondiente a las fases calculadas en el paso (2) para las señales 1 y 2 respectivamente.
  4. diferencia = fase1 - fase2 si (diferencia < 0) → fase1 < fase2 → la señal 1 llegó primero y viceversa.

Entonces, ¿este procedimiento es correcto? ¿Voy a obtener el desfase utilizando esta técnica? Me gustaría realizar una localización de sonido usando 4 micrófonos. Gracias de antemano. Su ayuda es apreciada.

2voto

GSerg Puntos 33571

Estás pensando en "desfase de fase" cuando lo que realmente quieres es el retardo de tiempo. No son lo mismo.

La FFT te dará los ángulos de fase de los diversos componentes sinusoidales que componen tu señal, pero estos no se traducen fácilmente en un valor de retardo de tiempo.

Lo que realmente quieres es realizar la correlación cruzada de las señales en el dominio del tiempo. La ubicación del pico en el resultado es el retardo de tiempo. Existe una forma de implementar la correlación cruzada utilizando la FFT, pero no estoy familiarizado con los detalles. (Ver respuesta de MathEE.)

En cualquier caso, si deseas hacer esto en tiempo real, se trata de una cantidad seria de DSP, y es posible que tu Arduino no esté a la altura de la tarea. ¿O lo estás utilizando solo para recopilar los datos en bruto?

2voto

SomeEE Puntos 923

Tienes dos funciones. Una es \$f(t)\$ y la otra es el desplazamiento temporal de \$f\$, \$g(t) = f(t+\Delta)\$. Te gustaría encontrar \$\Delta\$.

Podemos realizar la transformada de Laplace/Fourier (por ejemplo, mediante el algoritmo FFT de Cooley-Tukey) y denotar las señales transformadas por \$\hat{f}(s)\$ y \$\hat{g}(s)\$.

Ahora \$\hat{g}(s) = e^{\Delta s} \hat{f}(s)\$ por lo que la cantidad que buscas es $$\Delta = \frac{ln(\hat{g}(s))-ln(\hat{f}(s))}{s}.$$

En otras palabras, el logaritmo natural del cociente \$\frac{\hat{g}}{\hat{f}}\$ será lineal en \$s\$ y la pendiente de esta línea será \$\Delta\$.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X