Detección de señal ultrasónica

9

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í: Autocorrelación de señal

Sin embargo, cuando correlaciono la señal esperada con la señal recibida en la vida real, lo que obtengo normalmente se ve así: Correlación cruzada típica

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.

Señal recibida

Señal esperada # 1

Señal esperada # 2

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).

Jim Clay
fuente
¿Es posible que comparta sus datos de rx1, rx2 y plantilla?
Tarin Ziyaee
@ user4619 Intentaré hacer eso esta noche.
Jim Clay
Muy rápido: recibí sus datos y produje un STFT-PSD con contraste mejorado . Supongo que esos 5 puntos en la parte inferior son sus dos señales, separadas por frecuencia. Parece que sus señales se transmiten bien, pero no creo que su problema sean los ecos o las rutas múltiples. Como puede ver, hay mucho ruido intermitente (banda ancha) entre los pulsos, al menos al principio. Si complejas el cambio de banda, disminuyes la muestra, correlacionas con tu secuencia de ladridos y miras el sobre, ¿qué estás viendo?
Tarin Ziyaee
1
Ok, un par de cosas: I) ¿has considerado usar un chirrido lineal en lugar de formas de onda codificadas como esta? Tiene mucha más flexibilidad con ellos, y hay drásticamente menos partes móviles involucradas. II) ¿Cuáles, si las hay, son sus restricciones de ancho de banda? Por ejemplo, sus plantillas parecen tener aproximadamente 1 KHz de ancho, ¿alguna razón para esto? ¿Puedes ir más alto? Con un chirrido lineal esto es fácil. III) Si bien dudo que haya algún problema con su demodulación, sería útil ponerla en práctica. ¡Eso, y me ahorraría la molestia de escribirlo!
Tarin Ziyaee
1
Con respecto a los comentarios de bit, hay un malentendido: llamemos a cada uno de los 13 estados del código de Barker un 'chip'. Entonces, si transmito un poco, estoy transmitiendo 13 chips. Si transmito 2 bits, estoy transmitiendo 26 chips, etc. Así que mi pregunta fue, ¿cuántos bits está transmitiendo? Supongo que solo está transmitiendo 1 bit, por lo que digo que también puede considerar transmitir mucho más, para aumentar su ganancia de codificación. ¿Tiene sentido?
Tarin Ziyaee

Respuestas:

3

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:

  • Los códigos de Barker solo llegan hasta la longitud . Sin embargo, podemos hacer códigos de secuencia PN de longitud arbitraria para obtener mucha más ganancia de codificación.13
  • El uso de solo bit en su transmisión. Podemos codificar un preámbulo completo de muchos bits para transmitir, ganando más resistencia a la ruta múltiple.1

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 1273161127

PN_31 = [ 1  1 -1 -1  1  1 -1  1 -1 -1  1 -1 -1 -1 -1  1 -1  1 -1  1  1  1 -1  1  1 -1 -1 -1  1  1  1];

PN_61 = [ 1  1  1 -1  1  1 -1  1 -1 -1  1 -1 -1  1  1  1 -1 -1 -1  1 -1  1  1  1  1 -1 -1  1 ...
     -1  1 -1 -1 -1  1  1 -1 -1 -1 -1  1 -1 -1 -1 -1 -1  1  1  1  1  1  1 -1  1 -1  1 -1 ...
      1  1 -1 -1  1  1 -1];

PN_127 = [-1     1     1     1    -1     1    -1    -1     1    -1     1     1    -1    -1    -1     1     1    -1     1     1     1     1    -1     1     1    -1     1    -1 ...
       1     1    -1     1     1    -1    -1     1    -1    -1     1    -1    -1    -1     1     1     1    -1    -1    -1    -1     1    -1     1     1     1     1     1 ...
      -1    -1     1    -1     1    -1     1     1     1    -1    -1     1     1    -1     1    -1    -1    -1     1    -1    -1     1     1     1     1    -1    -1    -1 ...
       1    -1     1    -1    -1    -1    -1     1     1    -1    -1    -1    -1    -1     1    -1    -1    -1    -1    -1    -1     1     1     1     1     1     1     1 ...
      -1     1    -1     1    -1     1    -1    -1     1     1    -1    -1     1     1     1];

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 [ 1271310 log[12713]10

ingrese la descripción de la imagen aquí

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 13316112713


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.).

Tarin Ziyaee
fuente
1
Sí, planeo probar secuencias más largas. No sabía que las autocorrelaciones circulares de las secuencias pn eran tan agradables, interesantes. Desafortunadamente para mi aplicación, lo que importa es la autocorrelación lineal. Con respecto al preámbulo, la secuencia completa es, en cierto modo, un "preámbulo", en el sentido de que lo que hace que un preámbulo sea útil es que es un patrón de datos conocido. Toda mi señal se conoce a priori.
Jim Clay
Decidí excederme un poco en la longitud de la señal usando una orden de 10 lfsr (1023 chips) para probar o descartar que el problema se pueda resolver alargando la señal. Publicaré lo que pasa.
Jim Clay
1
@JimClay Me alegra escuchar eso. Tengo curiosidad por ver cómo son las señales / señales recibidas ahora. Eso es genial sin embargo.
Tarin Ziyaee
1
@endolith Sí, el doppler es un problema. Lo manejo correlacionando varias veces, cambiando la frecuencia de la señal recibida cada vez en una cantidad diferente. Esto es fácil de hacer si está correlacionando en el dominio de frecuencia.
Jim Clay
1
@endolith Como Jim Clay describió su método, básicamente está calculando lo que se conoce como la función de ambigüedad . Es decir, resultados cruzados, con la segunda dimensión correspondiente a la frecuencia base. Esto revelará el pico y, por lo tanto, dado que conocemos la frecuencia original, su grado Doppler.
Tarin Ziyaee