detección de cambio de fase entre 2 señales no periódicas

1

Me gustaría encontrar el cambio de fase entre dos señales no periódicas leídas desde un micrófono electret. Entonces, lo que hice hasta ahora es lo siguiente:

  1. lea las señales de los micrófonos usando un microcontrolador arduino uno.
  2. terminó de escribir un código FFT basado en el algoritmo cooley_tukey.
  3. probó el pie con la ayuda de matlab.

Mi plan es:

  1. busque el valor máximo en cada señal y almacene su índice
  2. encuentre la fase correspondiente al índice encontrado en el paso anterior de fft usando: fase = atan (imaginario / real)
  3. asuma la fase 1 y la fase 2 correspondientes a las fases calculadas en el paso (2) para las señales 1 y 2 respectivamente.
  4. diferencia = fase1 - fase2 if (diferencia < 0) → fase1 < fase2 → la señal 1 vino primero y viceversa.

Entonces, ¿este procedimiento es correcto? ¿Voy a obtener el cambio de fase usando esta técnica? Yo haría una localización de sonido usando 4 micrófonos. Gracias por adelantado. Tu ayuda es apreciada.

    
pregunta user3396919

2 respuestas

2

Tienes dos funciones. Uno es \ $ f (t) \ $ y el otro es el turno de tiempo de \ $ f \ $, \ $ g (t) = f (t + \ Delta) \ $. Le gustaría encontrar \ $ \ Delta \ $.

Podemos tomar la transformada de Laplace / Fourier (por ejemplo, a través del 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 busca es $$ \ Delta = \ frac {ln (\ hat {g} (s)) - ln (\ hat {f} (s)) {s}. $$

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

    
respondido por el SomeEE
2

Estás pensando en "cambio de fase" cuando lo que realmente quieres es el retraso. No son lo mismo.

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

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

En cualquier caso, si quieres hacer esto en tiempo real, esta es una cantidad importante de DSP, y tu Arduino podría no estar a la altura de la tarea. ¿O solo lo está utilizando para recopilar los datos en bruto?

    
respondido por el Dave Tweed

Lea otras preguntas en las etiquetas