Simulation
In diesem Projekt wurde mit den Anwendungen MATLAB/Simulink und GNU Radio gearbeitet.
Matlab Modell der OFDM-Übertragungsstrecke
Zum Durchführen von Tests wurde ein Matlab Modell der Übertragungsstrecke basierend auf einem Beispiel von MathWorks implementiert (https://de.mathworks.com/help/comm/ug/ofdm-synchronization.html).
OFDM Transmitter
Im Folgenden ist ein Blockdiagramm des implementierten OFDM-Übertragungssystems dargestellt. Die zu übertragenden Daten stammen aus der binären Nachrichtenquelle q. Diese werden nach der Seriell-Parallel Wandlung über die dargestellten Mapper auf Elemente im Symbolalphabet A abgebildet. In dieser Anwendung wird die Modulationsform QPSK verwendet. Es werden also je zwei Bit auf eines der vier Elemente im Konstellationsdiagramm abgebildet, wodurch die Symbole Ai[k] resultieren. Die Modulation auf die einzelnen Subträger erfolgt mittels der inversen diskreten Fourier Transformation (IDFT).
Kanal
Beim Kanal werden die Einflüsse additiven weißen gaußverteilten Rauschens (AWGN) und eines Phasen- und Frequenzoffsets (PFO) modelliert. Des Weiteren wird eine Verzögerung um D Abtastperioden durchgeführt.
OFDM Receiver
Die Synchronisation im OFDM-Receiver wird über eine Kreuzkorrelation mit einer Synchronisationspräambel durchgeführt. Die Trennung der Subträger erfolgt im Empfänger unter Verwendung der diskreten Fourier Transformation (DFT). Aufgrund der Verwendung eines Cyclic Prefix (CP) und der Eigenschaft der DFT, dass die zyklische Faltung zweier Folgen im DFT Bereich das Produkt der DFTs der beiden Folgen ist, kann die Entzerrung durch die punktweise Division mit den Abtastwerten des Kanalfrequenzgangs implementiert werden. Die Abtastwerte des Kanalfrequenzgangs werden mittels Pilot-Symbolen geschätzt.
QPSK Konstellationsdiagramm
Im Folgenden sind die empfangenen Symbole in der komplexen Zahlenebene dargestellt, wobei in der linken Abbildung die Symbole vor dem Equalizer und in der rechten Abbildung die Symbole nach dem Equalizer abgebildet sind. Es ist erkennbar, dass der Kanaleinfluss sehr gut kompensiert wurde.
Im Folgenden sind die empfangenen Bilder nach der Übertragung mit den Vergleichsstörabständen von 17 dB und 14 dB dargestellt.
Wie auf der Seite Distanzschätzung erklärt, benötigen wir eine genau Zeitmessung. Mit Matlab ist die Zeitmessung mit den Befehlen Tic und Toc gegeben. Diese gibt aber nur eine Genauigkeit von 10-5 s was multipliziert mit der Ausbreitungsgeschwindigkeit eine Ungenauigkeit von mindestens 3 m ergibt. Daher wurde von der gesamten Umsetzung in Matlab gewechselt auf eine Kombinationslösung von Matlab mit GNU Radio und RFNoC.
GNU Radio und RFNoC
Die Kombination von GNU Radio und RFNoC ermöglicht es direkt auf das FPGA der SDRs eigene IP-Cores zu starten. Das Ziel dabei war ein IP-Core zu generieren mit dem die Zeitmessung der RTD-Übertragung durchführbar ist.
- RFNoC ermöglicht es DSP-Operationen direkt auf dem FPGA eines USRP SDRs, ohne ein komplettes Design für diesen zu entwerfen.
- Auf dem FPGA können Daten über einen AXI-Bus zu den RFNoC-Blöcken gesendet werden. Der Datenfluss kann über GNURadio gesteuert werden.
- Das Standard FPGA-Image für das USRP enthält nur wenige Blöcke.
- Um das FPGA um eigene/andere Blöcke zu erweitern, muss ein neues FPGA-Image synthetisiert werden. RFNoC bietet Werkzeuge an, die diesen Schritt erleichtern.
- In einem selbst erstellten FPGA-Image können vorhandene Blöcke statisch aneinandergereiht oder direkt an den Bus angeschlossen werden.
- Für das Erstellen eines eigenen Blocks müssen die benötigten Dateien mit dem
rfnocmodtool
generiert werden. Die Schnittstelle wird dabei in YAML-Dateien und das Verhalten in den Verilog-Dateien beschrieben.
Quelle: https://kb.ettus.com/File:gr_rfnoc_ex1.png
Exkurs mit dem HackRF One
Um eine kostengünstigere Möglichkeit zur Durchführung von Laufzeitschätzungen zu haben, soll auch der HackRF One verwendet werden. Da bereits ein Matlab Golden Model für die Übertragung und Synchronisation erstellt wurde, wird auf Matlab und Simulink aufgebaut. Als Codebasis für die Verwendung des HackRF One in Simulink wurde das GitHub-Repository unter folgendem Link verwendet: https://github.com/kit-cel/simulink-hackrf.
Dieses Repository hat einige Probleme, die behoben wurden:
- Es war nicht möglich, mehrere HackRF-Geräte (z.B. Transmit und Receive) mit nur einem PC zu verwenden.
- Es gab keine Möglichkeit, auf den HackRF One über eine ID zuzugreifen.
- Die Simulation stürzte ab, wenn sie beendet wurde.
- Es gab keine Möglichkeit, komplexe double Werte zu übertragen.
Nach Beheben der genannten Probleme konnte dieses Matlab-Modell in Betrieb genommen werden.