He creado un sistema TDOA bastante simple que utiliza señales ultrasónicas emitidas por dos altavoces para geolocalizar (en relación con los altavoces) los teléfonos móviles. Las dos señales están separadas por frecuencia.
El sistema tiene las siguientes restricciones:
- Las señales deben ser inaudibles. Para ello, nos atenemos a frecuencias superiores a 17 kHz. Algunas personas aún pueden escuchar eso, pero la mayoría no puede.
- La frecuencia de muestreo es 44.1 kHz.
- La música generalmente se reproducirá, por lo que hay mucha interferencia en las frecuencias más bajas.
- No tenemos control sobre qué tan bien funcionan los altavoces y los micrófonos en las frecuencias superiores, por lo que hemos mantenido nuestro límite superior en alrededor de 20 kHz.
La señal particular que estoy usando son códigos Barker de 13 bits modulados por BPSK debido a sus buenas propiedades de autocorrelación. La autocorrelación se ve así:
Sin embargo, cuando correlaciono la señal esperada con la señal recibida en la vida real, lo que obtengo normalmente se ve así:
El azul es la correlación cruzada con la señal del altavoz 1, y el rojo es la correlación cruzada con la señal del altavoz 2. Parece que los ecos son significativos y, desafortunadamente, a menudo más fuertes que la señal de ruta directa debido a la ganancia direccional del micrófono.
Intenté simplemente detectar la primera aparición de la señal, ya que es probable que sea la ruta directa. Este enfoque es muy sensible al umbral que uso para decidir cuándo está presente la señal y, por lo tanto, no es robusto en absoluto.
Me gustaría un enfoque sólido para determinar el tiempo de llegada "verdadero" de la señal, es decir, el tiempo de llegada de la señal de ruta directa. ¿Quizás alguna forma de estimación y desconvolución de canales? Si es así, ¿cómo funcionaría eso?
Datos / Código: Quiero dejar en claro que no espero que nadie analice los datos o inspeccione mi código. Los he puesto a disposición en caso de que quiera hacerlo. Estoy principalmente interesado en ideas.
Puse la señal recibida sin procesar y las señales esperadas moduladas disponibles para descargar. Todos se muestrean a 44,1 kHz. Correlacionar la señal recibida con las señales esperadas producirá algo similar pero no idéntico a la imagen de arriba porque muevo las señales recibidas a la banda base y diezmo antes de correlacionarlas con las señales esperadas.
Scripts de Matlab Los scripts de Matlab tienen tanto el script de generación de señal (genLocationSig.m) como mi script de recepción / procesamiento (calcTimingOffset.m).