Manejo de mensajes simultáneos en comunicación inalámbrica

Tengo una pregunta genérica con respecto a la comunicación inalámbrica y qué técnicas se pueden usar para detectar si dos transmisores envían el mensaje exactamente al mismo tiempo.

Dado que esta es una pregunta genérica y realmente no sé mucho sobre este campo y realmente me gustaría saber más, supongamos que estoy usando técnicas súper simples. Hablemos de la técnica de modulación de activación y desactivación (creo que la frecuencia de la portadora no importa, pero digamos la banda 433 IMS) y el uso de algún tipo de preámbulo (como el de Arduinos 433 lib que envía 25 1s y 0s alternados ).

¿Qué pasaría si dos transmisores comienzan a enviar sus datos al mismo tiempo? Supongo que habrá alguna interferencia constructiva/destructiva involucrada y la integridad de los datos se verá comprometida. ¿La única solución es tener la suma de verificación del mensaje como parte del mensaje y luego verificar la integridad y descartar los mensajes corruptos?

¿Cómo se maneja esto en Wi-Fi/Cellular/LoRa/... ?

¡Gracias!

Su pregunta implica una respuesta que cubre docenas de páginas y aún puede no alcanzar todos los objetivos. El truco es la multiplexación por división de tiempo o la multiplexación por división de código.
En la práctica, los transmisores se bloquearán entre sí y el resultado será una mezcla de los dos. O, alternativamente, el receptor termina escuchando al transmisor con la mayor intensidad de señal, si ese "gana". Pero, en general, no puede enviar a la misma frecuencia, lo que es completamente inadecuado para una banda estrecha como 433MHz. Necesita una tecnología FSK de banda estrecha que pueda usarse en canales más pequeños, normalmente hasta 25 kHz.
¿Se puede transmitir y recibir al mismo tiempo? Quizás cuando un nodo transmite, también puede escuchar en la misma frecuencia: si "escucha" algo durante el tiempo que no está transmitiendo (como durante su bit 0), puede detenerse inmediatamente y dejar que el otro nodo continúe. O el otro nodo hará lo mismo (escuchará al primer nodo), o su mensaje se recibirá correctamente (asumiendo que los dos nodos estaban transmitiendo lo mismo antes de que uno de ellos decidiera detenerse). Esto no es exactamente lo que está pidiendo, pero permitiría que los nodos mismos lo supieran.
Luego volverían a intentar algún período aleatorio (corto) nuevamente. Con suerte, la aleatoriedad permitiría que los dos nodos transmitieran sus mensajes.
Creo que los términos utilizados en la literatura para esto son "detección de colisiones" y "evitación de colisiones" relacionadas.

Respuestas (5)

ACK y Retransmisión es una solución común.

El remitente espera un ACK (reconocimiento) del receptor. Si no puede obtener ningún ACK del receptor (tal vez por un tiempo limitado), transmite el mensaje nuevamente. En BLE, por ejemplo, todos los paquetes perdidos (es decir, los paquetes que no devolvieron ningún ACK del receptor) se volverán a intentar infinitamente hasta que se pierda el enlace.

Por supuesto, los transmisores de los paquetes perdidos no estarán enviando simultáneamente para siempre. Uno de ellos eventualmente se enviará antes que el otro durante la retransmisión.

@AlbertoBarbosa La otra mitad de esto es diseñar algún algoritmo de retroceso sensato o división de tiempo o compartir recursos para que las estaciones de la competencia se aparten el tiempo suficiente para que funcione. Es decir, en lugar de tener un método infalible para detectar colisiones, simplemente diseñe un algoritmo de prueba robusto para que el mensaje (probablemente) llegue al final y detecte la falla (con un método como este).
Por lo general, uno también querría usar un retraso (pseudo) aleatorio que varía entre los transmisores, para asegurarse de que cuando los dos transmisores cuyos mensajes se mezclaron decidan retransmitir, (con suerte) no lo harán exactamente al mismo tiempo otra vez. Y sí, como señala @2e0byo, algún tipo de algoritmo de retroceso adaptativo será útil para garantizar que, si hay demasiados transmisores presentes, todos aumentarán con gracia sus intervalos de transmisión en lugar de tratar de gritarse constantemente unos a otros.

¿La única solución es tener la suma de verificación del mensaje como parte del mensaje y luego verificar la integridad y descartar los mensajes corruptos?

Es bastante estándar que se emplee alguna forma de método robusto de verificación de errores con la transmisión de datos por radio. Tampoco tiene nada que ver con dos transmisores simultáneos; un solo transmisor/receptor y cualquier forma de interferencia dentro de la banda causará una posible corrupción de sus datos, por lo que la verificación de errores no solo es agradable, es fundamental.

Hablemos de la técnica de modulación de activación y desactivación (creo que la frecuencia de la portadora no importa, pero digamos la banda 433 IMS) y el uso de algún tipo de preámbulo (como el de Arduinos 433 lib que envía 25 1s y 0s alternados ).

Además de la verificación de errores, debe verificar los bits de dirección contenidos en el mensaje, la longitud del mensaje y la integridad del preámbulo del mensaje si desea que su sistema sea lo más sólido posible.

A excepción de CDMA y algunos otros esquemas de modulación muy complejos que se usan en los teléfonos inteligentes, si dos transmisores transmiten un mensaje m a la misma frecuencia al mismo tiempo, el receptor es completamente incapaz de reconstruir el mensaje original m , a menos que un transmisor esté lejos y el otro está cerca del receptor.

Puedes hacer protocolos más o menos complicados para manejar esta situación. Cada uno tiene un conjunto diferente de ventajas y problemas. Independientemente, todas las transmisiones tienen que hacer checksums de contenedores o similares. Protocolos es la forma en que los informáticos tendemos a llamar las "reglas" para los sistemas que interactúan.

Para mí, se dividen en dos categorías distintas: con un maestro o sin él.

En un sistema con un maestro, la estación maestra puede sondear cada estación esclava para obtener información. Los esclavos envían solo cuando son encuestados. Además, el maestro verificará en algún intervalo si han llegado nuevas estaciones.

Sin un maestro, el protocolo se vuelve más complicado. Cada unidad tiene que tener un poco, o mucho, más de funcionalidad.

Una de las mejores soluciones es kallade SOTDMA y se utiliza en la comunicación AIS de datos de barcos. En esta configuración no hay maestro, todas las unidades se comportan igual. Para la división exacta del tiempo, se utiliza un reloj GPS para sincronizar las franjas horarias (de todos modos, los barcos tienen un GPS, ya que el mensaje contiene la posición y el rumbo/velocidad). Cada unidad escucha durante un rato para saber qué intervalos de tiempo, si los hay, están actualmente en uso y selecciona al azar uno de los libres. Consulte una breve descripción: http://www.allaboutais.com/index.php/en/technical-info/transmission-types/105-ais-technicals/technical-lfundamentals/93-sotdma

El acceso múltiple por división de tiempo, TDMA abreviado, se usa de diferentes maneras cuando se usa una sola frecuencia (como el ejemplo SOTDMA anterior). Un esquema que se conoce como STDMA (acceso múltiple por división de tiempo autoorganizado, parcialmente patentado) consiste en escuchar un silencio, luego enviar el mensaje y esperar una señal ACK del receptor. Si no recibe una señal de reconocimiento en poco tiempo, vuelva a enviar el mensaje. Para que dos estaciones no se "sincronicen", haga que el intervalo de espera entre retransmisiones sea controlado por alguna función aleatoria. Al recibir un mensaje, el receptor calcula la suma de verificación mientras lo recibe y, si es correcto, envía un acuse de recibo directamente. Puede hacer varias variaciones de esto, pero básicamente todas las unidades deben seguir el mismo protocolo para que funcione.

Como nota al margen...

Esta es una técnica que actualmente se utiliza en los sistemas de búsqueda para mejorar la cobertura y la intensidad de la señal en el receptor. Se llama transmisión simultánea de múltiples estaciones, o más coloquialmente, transmisión simultánea.

En un sistema de radiolocalización simultánea multiestación, cada estación base transmite la misma señal de RF (FSK) simultáneamente a la misma frecuencia. Los transmisores están sincronizados para garantizar la temporización de bits adecuada (por ejemplo, utilizando información de temporización de GPS). Un receptor de buscapersonas en el área superpuesta recibirá varias señales de RF transmitidas desde diferentes estaciones base.

Un receptor cercano a un transmisor, no tendrá problema en recibir los mensajes de buscapersonas del transmisor más cercano. Un receptor en algún lugar entre dos (o más) transmisores recibirá la señal combinada de los transmisores. Debido a que la distancia a cada transmisor es aproximadamente la misma, la señal combinada será más fuerte y tendrá la sincronización de bits correcta.

Las tasas de baudios de paginación son bastante bajas (512, 1200 o 2400 baudios), por lo que la sincronización de bits no es muy crítica. Los datos de paginación (Pocsag) utilizan la codificación BCH para la integridad del mensaje.