Implementierung

Blockschaltbilder

Sender

Das Video wird vorweg mittels FFmpeg konvertiert und anschließend an einen lokalen UDP Socket gestreamt. Von dort weg wird der Stream in kleinere Datenpakete zerlegt und mit einem Synchronisationswort sowie Längenangabe versehen. Schlussendlich werden die einzelnen Pakete mit GMSK moduliert und über das SDR-Board versendet.

Empfänger

Die Symbole werden von dem zweiten SDR-Board empfangen und an den PC weitergeleitet. Dort laufen diese dann durch einen Tiefpassfilter um etwaiges Rauschen herauszufiltern und werden anschließend demoduliert. Nach der Demodulation werden die einzelnen Symbole wieder zu Paketen zusammengefasst um abschließend wieder an einen UDP Socket gestreamt und über FFmpeg wiedergegeben zu werden.

Paketaufbau

Vorweg befindet sich der Access Code, auch Synchronisationswort genannt, welcher für die Einsynchronisierung des Empfängers verwendet wird. Nachstehend befindet sich die Längenangabe in doppelter Ausführung, um etwas Redundanz hinzuzufügen. Zum Schluss befinden sich die Nutzdaten.

Flowgraphs

Sender

Das Video wird mittels FFmpeg über einen UDP Socket an GNU Radio gesendet und dort dann zu einem Tagged Stream konvertiert. Tagged Stream ist ein GNURadio-eigener Typ um Datenströme leichter zu verarbeiten, indem Tags für den Beginn, das Ende und die Länge hinzugefügt werden.
Als Nächstes wird vom Protocol Formatter der Header generiert. Der Header besteht aus 8 Byte für den Access Code und 2 mal 2 Byte für die Länge der Payload.
Der Tagged Stream Multiplexer fügt dann den Header vor den Daten ein und zusätzlich noch 2 Dummy-Bytes am Ende. Die beiden Bytes am Ende werden benötigt, da es in den USRP-Treibern einen Fehler gibt der dazu führt, dass die letzten beiden Bytes bei jeder Übertragung falsch sind. Die beiden Dummy-Bytes werden am Empfänger automatisch verworfen.
Der Length Tag wird jetzt mit dem Faktor 16 multipliziert und enthält somit nicht mehr die Länge in Bytes, sondern die Anzahl der Samples welche auf das SDR-Board gesendet werden. Dieser Faktor ergibt sich daraus, dass der GMSK-Modulator 2 Samples pro Bit erzeugt. Der GMSK-Block moduliert nun das Signal mit einer differenziellen GMSK.
Das modulierte Signal geht nun weiter in die USRP-Sink, welche die Daten an das SDR-Board überträgt. Durch die Angabe des Length Tags werden die Puffer automatisch so eingestellt, dass immer genau 1 Paket pro Burst gesendet wird.

Empfänger

Unsere Daten wurden erfolgreich empfangen und das Board sendet diese über die USRP-Source in die GNU Radio Anwendung. Die empfangenen Rohdaten werden an den GMSK-Block weitergeleitet, welcher diese filtert und demoduliert. Dann wird versucht den Accesscode in den Daten zu finden. Sobald dieser gefunden wird, wird automatisch die dahinterliegende Payload extrahiert. Die Daten werden allerdings als unpacked Bits ausgegeben. Das heißt, dass in jedem Byte nur 1 Bit relevant ist. Deshalb werden immer 8 aufeinander folgende Bytes mit einem Bit Repacker zu einem Byte zusammengefasst. Die nun fertig decodierten Daten werden dann wieder über einen UDP-Socket an die FFmpeg-Schnittstelle gesendet. Das empfangene Video kann nun angezeigt werden.

Ausblick

Um höhere Übertragungsraten zu erreichen, wäre die Implementierung eines performanteren Modulationsverfahren wie z. B. QPSK möglich. Hierbei wird die Anzahl der übertragenen Bits pro gesendetes Symbol wesentlich erhöht.
Ein weitere Verbesserungsmöglichkeit wäre die Implementierung einer FEC – gesprochen Forward Error Correction. Dabei werden Redundanzen in den gesendeten Daten miteingebunden, um mögliche auftretende Fehler nach dem Empfangen korrigieren zu können.

January 27, 2020