Umgang mit gleichzeitigen Nachrichten in der drahtlosen Kommunikation

Ich habe eine allgemeine Frage zur drahtlosen Kommunikation und welche Techniken verwendet werden können, um zu erkennen, ob zwei Sender die Nachricht genau zur gleichen Zeit senden.

Da dies eine allgemeine Frage ist und Sie wirklich nicht viel über dieses Gebiet wissen und wirklich mehr wissen möchten, nehmen wir an, ich verwende supereinfache Techniken. Lassen Sie uns über die On-Off-Keying-Modulationstechnik sprechen (ich glaube, dass die Trägerfrequenz keine Rolle spielt, aber sagen wir das 433-IMS-Band) und eine Art Präambel verwenden (wie die in der Arduinos 433-Bibliothek, die 25 abwechselnd 1 und 0 sendet). ).

Was würde passieren, wenn zwei Sender gleichzeitig mit dem Senden ihrer Daten beginnen? Ich gehe davon aus, dass es zu einigen konstruktiven/destruktiven Interferenzen kommen wird und die Integrität der Daten gefährdet wäre. Ist die einzige Lösung, die Prüfsumme der Nachricht als Teil der Nachricht zu haben und dann die Integrität zu überprüfen und beschädigte Nachrichten zu löschen?

Wie wird dies in Wi-Fi/Cellular/LoRa/... gehandhabt?

Danke!

Ihre Frage impliziert eine Antwort, die Dutzende von Seiten umfasst und möglicherweise immer noch nicht alle Ziele erreicht. Der Trick ist Zeitmultiplex oder Codemultiplex.
In der Praxis stören sich beide Sender gegenseitig, da das Ergebnis eine Mischung aus beidem wird. Oder alternativ hört der Empfänger am Ende auf den Sender mit der höchsten Signalstärke, wenn dieser "gewinnt". Aber insgesamt kann man nicht auf der gleichen Frequenz senden - was für ein schmales Band wie 433 MHz so etwas wie Wide and Noisy OOK völlig ungeeignet ist. Sie benötigen eine Schmalband-FSK-Technologie, die auf kleineren Kanälen verwendet werden kann, typischerweise bis hinunter zu 25 kHz.
Kannst du gleichzeitig senden und empfangen? Wenn ein Knoten sendet, kann er vielleicht auch auf derselben Frequenz lauschen - wenn er während der Zeit, in der Sie nicht senden (wie während Ihres 0-Bits), etwas "hört", kann er sofort anhalten und den anderen Knoten weitermachen lassen. Entweder macht der andere Knoten dasselbe (er hört den ersten Knoten), oder seine Nachricht wird korrekt empfangen (vorausgesetzt, die beiden Knoten haben dasselbe gesendet, bevor einer von ihnen beschlossen hat, aufzuhören). Dies ist nicht ganz das, wonach Sie fragen, aber es würde den Knoten selbst ermöglichen, dies möglicherweise zu wissen.
Sie würden es dann in einem zufälligen (kurzen) Zeitraum erneut versuchen. Hoffentlich würde die Zufälligkeit es den beiden Knoten ermöglichen, ihre Nachrichten durchzubringen.
Ich denke, die Begriffe, die in der Literatur dafür verwendet werden, sind "Kollisionserkennung" und verwandte "Kollisionsvermeidung".

Antworten (5)

ACK und Retransmission ist eine gängige Lösung.

Der Sender wartet auf ein ACK (Acknowledge) vom Empfänger. Wenn es keine Bestätigung vom Empfänger erhalten kann (möglicherweise für eine begrenzte Zeitdauer), überträgt es die Nachricht erneut. Bei BLE zum Beispiel werden alle verlorenen Pakete (dh die Pakete, die kein ACK vom Empfänger zurückgegeben haben) unendlich wiederholt, bis ein Verbindungsverlust auftritt.

Natürlich werden die Sender der verlorenen Pakete nicht ewig gleichzeitig senden. Einer von ihnen wird schließlich während der Neuübertragung vor dem anderen senden.

@AlbertoBarbosa Die andere Hälfte davon ist das Entwerfen eines vernünftigen Backoff-Algorithmus oder einer Zeitteilung oder Ressourcenfreigabe, damit konkurrierende Stationen lange genug aus dem Weg gehen, damit es funktioniert. Das heißt, anstatt eine narrensichere Methode zum Erkennen von Kollisionen zu haben, entwerfen Sie einfach einen robusten Wiederholungsalgorithmus, damit die Nachricht (wahrscheinlich) am Ende durchkommt, und erkennen Fehler (mit einer Methode wie dieser).
Normalerweise möchte man auch eine (pseudo-)zufällige Verzögerung verwenden, die zwischen den Sendern variiert, um sicherzustellen, dass die beiden Sender, deren Nachrichten durcheinander geraten sind, sich für eine erneute Übertragung entscheiden, dies (hoffentlich) nicht wieder genau zur gleichen Zeit tun. Und ja, wie @2e0byo feststellt, wird eine Art adaptiver Backoff-Algorithmus nützlich sein, um sicherzustellen, dass, wenn zu viele Sender vorhanden sind, alle ihre Sendeintervalle elegant erhöhen, anstatt zu versuchen, sich ständig zu übertönen.

Ist die einzige Lösung, die Prüfsumme der Nachricht als Teil der Nachricht zu haben und dann die Integrität zu überprüfen und beschädigte Nachrichten zu löschen?

Es ist ziemlich üblich, dass bei der Funkdatenübertragung eine Form robuster Fehlerprüfmethode verwendet wird. Es hat auch nichts mit zwei gleichzeitigen Sendern zu tun; Ein einzelner Sender/Empfänger und jede Form von Inband-Störungen führen zu einer möglichen Beschädigung Ihrer Daten, daher ist die Fehlerprüfung nicht nur nett, sondern von grundlegender Bedeutung.

Lassen Sie uns über die On-Off-Keying-Modulationstechnik sprechen (ich glaube, dass die Trägerfrequenz keine Rolle spielt, aber sagen wir das 433-IMS-Band) und eine Art Präambel verwenden (wie die in der Arduinos 433-Bibliothek, die 25 abwechselnd 1 und 0 sendet). ).

Zusätzlich zur Fehlerprüfung sollten Sie die in der Nachricht enthaltenen Adressbits, die Nachrichtenlänge und die Integrität der Nachrichtenpräambel überprüfen, wenn Sie möchten, dass Ihr System so robust wie möglich ist.

Abgesehen von CDMA und einigen anderen sehr komplexen Modulationsschemata, die in Smartphones verwendet werden, ist der Empfänger, wenn zwei Sender gleichzeitig eine Nachricht m auf derselben Frequenz senden, vollständig nicht in der Lage, die ursprüngliche Nachricht m zu rekonstruieren , es sei denn, ein Sender ist weit entfernt und der andere befindet sich in der Nähe des Empfängers.

Sie können mehr oder weniger komplizierte Protokolle für den Umgang mit dieser Situation erstellen. Jeder hat eine andere Reihe von Vorteilen und Problemen. Unabhängig davon müssen alle Übertragungen Prüfsummen oder ähnliches enthalten. Protokolle sind die Art, wie wir Computermenschen die "Regeln" für interagierende Systeme nennen.

Für mich fallen sie in zwei verschiedene Kategorien: mit einem Meister oder nicht.

In einem System mit einem Master kann die Masterstation jede Slavestation nach Informationen abfragen. Die Slaves senden nur auf Abruf. Zusätzlich prüft der Master in gewissen Abständen, ob neue Stationen eingetroffen sind.

Ohne Master wird das Protokoll komplizierter. Jede Einheit muss ein bisschen oder viel mehr Funktionalität haben.

Eine der besseren Lösungen ist kallade SOTDMA und wird in der AIS-Kommunikation von Schiffsdaten verwendet. In diesem Setup gibt es keinen Master, alle Einheiten verhalten sich gleich. Zur genauen Zeiteinteilung wird eine GPS-Uhr verwendet, um die Zeitfenster zu synchronisieren (die Schiffe haben sowieso ein GPS, da die Nachricht Position und Kurs/Geschwindigkeit enthält). Jede Einheit hört für eine Weile zu, um zu hören, welche Zeitschlitze, wenn überhaupt, gerade verwendet werden, und wählt zufällig einen der freien aus. Siehe für eine kurze Beschreibung: http://www.allaboutais.com/index.php/en/technical-info/transmission-types/105-ais-technicals/technical-lfundamentals/93-sotdma

Time Division Multiple Access, kurz TDMA, wird bei Verwendung einer einzelnen Frequenz (als Beispiel SOTDMA oben) auf unterschiedliche Weise verwendet. Ein Schema, das als STDMA (selbstorganisierender Zeitmultiplexzugriff, teilweise patentiert) bekannt ist, besteht darin, dass Sie auf eine Stille warten und dann die Nachricht senden und auf ein ACK-Signal vom Empfänger warten. Wenn Sie nach kurzer Zeit kein Bestätigungssignal erhalten, senden Sie die Nachricht erneut. Damit sich zwei Stationen nicht "synchronisieren", machen Sie das Warteintervall zwischen Neuübertragungen durch eine Zufallsfunktion gesteuert. Beim Empfang einer Nachricht berechnet der Empfänger beim Empfang die Prüfsumme und sendet bei Korrektheit direkt eine Bestätigung. Sie können verschiedene Variationen davon machen, aber im Grunde müssen alle Einheiten dem gleichen Protokoll folgen, damit es funktioniert.

Als Anmerkung...

Dies ist eine Technik, die tatsächlich in Paging-Systemen verwendet wird, um die Abdeckung und die Signalstärke im Empfänger zu verbessern. Dies wird Multi-Station-Simulcast oder umgangssprachlich Simulcasting genannt.

In einem Simulcast-Funkrufsystem mit mehreren Stationen sendet jede Basisstation dasselbe HF-Signal (FSK) gleichzeitig auf derselben Frequenz. Die Sender werden synchronisiert, um ein korrektes Bit-Timing sicherzustellen (zum Beispiel unter Verwendung von GPS-Timing-Informationen). Ein Paging-Empfänger im überlappenden Bereich empfängt mehrere HF-Signale, die von verschiedenen Basisstationen gesendet werden.

Ein Empfänger in der Nähe eines Senders wird kein Problem haben, die Paging-Nachrichten von dem nächstgelegenen Sender zu empfangen. Ein Empfänger irgendwo zwischen zwei (oder mehr) Sendern empfängt das kombinierte Signal der Sender. Da die Entfernung zu jedem Sender ungefähr gleich ist, ist das kombinierte Signal stärker und hat das richtige Bit-Timing.

Die Paging-Baudraten sind ziemlich niedrig (512, 1200 oder 2400 Baud), sodass das Bit-Timing nicht sehr kritisch ist. Paging-Daten (Pocsag) verwenden die BCH-Codierung für die Nachrichtenintegrität.