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).
fuente
Respuestas:
Estos no son los códigos que estás buscando ...
Como mencioné en los comentarios, hay muchas maneras de hacer TDOA robusto. (Correlación cruzada con Chirps lineales, Chirps exponenciales y métodos de tipo CDMA). Ya ha creado un sistema TDOA utilizando códigos (y esa es una buena opción sobre chirps lineales si necesita robustez para Doppler), sin embargo, se está limitando artificialmente de dos maneras:
Use una secuencia PN:
Por lo tanto, de manera muy simple, cambie los códigos que usa para modular su operador: Use PN-Sequences en su lugar. Los códigos generados por PN pueden tener una longitud (casi) arbitraria y pueden generarse a través de LFSR . (También se conocen con el nombre de "blanqueadores" en algunos textos). Aquí hay tres secuencias PN de longitud , y respectivamente.61 12731 61 127
Las autocorrelaciones circulares y lineales de las secuencias se muestran a continuación. Claramente producirán espectros blancos, pero más que eso, ya no estamos limitados a longitudes de chip. De hecho, el último código, PN_127, produce una ganancia de codificación de dB de ganancia sobre la secuencia del ladrador, garantizando al mismo tiempo los espectros blancos.10 l o g [ 12713 10 log[12713]≈10
Transmitir un preámbulo:
En su aplicación particular, mencionó que solo estaba transmitiendo un bit. Debe intentar evitar esto si puede evitarlo, y transmitir tantos bits como su aplicación lo permita, para obtener una mayor ganancia de codificación.
Esto es lo que comúnmente se hace en los protocolos de comunicación para alinearse con el comienzo de un paquete. Se transmite un preámbulo (conocido), compuesto de muchos bits. Cada bit está compuesto de muchas fichas. (En nuestro ejemplo, , o chips con cualquiera de los códigos PN anteriores). Por último, la secuencia de bits en sí misma puede estar compuesta de otra secuencia PN, o si lo desea, puede transmitir bits componiendo un patrón de barker, con cada bit compuesto por cualquiera de las secuencias PN anteriores.61 127 1331 61 127 13
Pruebe una o ambas de esas soluciones y presente sus resultados. Espero que haya mejoras tangibles en las que luego podamos iterar. (Forma de pulso, secuencias PN diferentes / más largas, etc.).
fuente