Einführung in GNURadio Companion:

GNURadio Companion ist eine grafische Benutzeroberfläche für GNURadio, die ebenso in der Programmiersprache Python geschrieben wurde. GNURadio Companion ist eine Werkzeugsammlung, mit der es möglich ist, in Software Telekommunikationssysteme zu entwickeln, ohne dass zwangsweise auch Hardware dazu notwendig ist. Innerhalb des GUI können einfache Blöcke durch Auswählen eingefügt, angepasst und teilweise auch verbunden werden, sodass sich letzendlich ein vollständiges "Blockschaltbild" ergibt. Da eine Einführung nicht nur theoretisch sein sollte, beschreibe ich hier ein einfaches Beispiel mit einer Schriit für Schritt Anleitung, das ein Signal erzeugt und grafisch anzeigt. Dabei sollte man immer im Hinterkopf behalten, dass GNUR Companion nur ein grafisches Interface zu GNURadio darstellt und letztendlich immer Python-Scripts erstellt und ausgeführt werden.

Gleich nach dem Start sieht man folgendes Fenster:

GNURadio Companion.pngDieses ist in fünf Teile eingeteilt: LibraryToolbarTerminalWorkspace und Varianl3n.

Erstellt man ein neues GNURadio Companion Projekt, so werden oben links im Workspace immer zwei Blöcke standardmäßig erzeugt: Der Options-Block und die Variable samp_rate.  Die Variable samp_rate gibt die globale Sample-Rate in Samples pro Sekunde an, alle nachträglich hinzugefügten Blöcke verwenden diesen Wert als Voreinstellung. Durch einen Rechtsklick und Auswahl von Optionen im Popup-Menü oder durch Doppelklick kann der Wert dieser Variable angepasst werden. Gleich verfährt man mit dem Options-Block. Hier lassen sich die ID, Projekt-Titel, Author, Beschreibung, Leinwandgröße des Workspace,  und zu verwendete GUI anpassen (QT oder WX). Im Gesamten Workspace kann entweder mit der QT oder mit der WX GUI gearbeitet werden, Elemente der GUIs lassen sich aber nicht mischen. So verwenden manche Blöcke entweder die eine oder die andere GUI .

400px-Properties_options.png

Verändert man beispielsweise Teile der ID, wird das Feld blau, was anzeigt, dass es verändert, aber noch nicht gespeichert wurde. In diesem Block gibt es verschiedene  Karteireiter, einer davon Documentation. Liest man sich die Dokumentation durch, so sieht man, dass das Feld ID gleichzeitig auch den Namen für das erzeugte Python Programm vorgibt. Man sollte nun also einen Namen, eine Beschreibung und den Autor eingeben, und die GT Gui auswählen. Ab der Version 1.8 ist das Ändern der ID Pflicht.

400px-Properties_errors.png

Felder, in denen beim Ausfüllen ein Fehler auftritt, werden in den Optionen des Blocks unten angezeigt.

Anschließend Speichern nicht vergessen!

Blöcke  findet man rechts in der Library. Dort werden schematisch geordnet alle in GNURadio installierten Blöcke angezeigt und können mittels Doppelklick oder per Drag and Drop in den Workspace gezogen werden. Kann ein Block dort auf Anhieb nicht gefunden werden, so kann man auch die Suchfunktion der oberen Menüleiste verwenden, auch durch die Tastenkombination CTRL+F kommt man in die Suchfunktion:

Search.png

 

Zuerst in der Library QT GUI Time Sink auswählen und mit Doppelklick oder per Drag und Drop auf den Workspace ziehen. Ebenso verfahren wir mit Throttle und Time Sink Block. 600px-Tutorial_two_1.png

Blockeigenschaften anpassen: Durch Doppelklick auf den neuen Block öffnen sich dessen Eigenschaften und Parameter:

Bei der Signal Source solte man als Output Type Complex Float32, als Waveform Cosine, bei Frequency 1000 Hz und bei der Amplitude 1 eingeben, falls nicht bereits so ausgefült. Damit hat man eine Signalquelle, die ein komplexes, cosinusförmiges Signal mit der Amplitude 1 und der Frequenz von 1000 Hz liefert.  Die Signalquelle liefert in diesem Fall ein komplexes Signal, was durch die blaue Farbe des Ausganges angezeigt wird. Nur wenn die miteinander verbundenen Ein- und Ausgänge Signale der gleichen Datentypen liefern, tritt später kein Fehler auf und das Programm kann gestartet werden.

600px-Size_mismatch.pngSonst erscheint der Verbindungspfeil in rot. Anschließend verbindet man die Signalquelle mit dem Throttleblock. Dieser wird benötigt, da sonst die Signalquelle und die Time Sink fast 100% der Prozessorresourcen verbrauchen und das Programm beim Ausführen nicht mehr richtig reagieren würde. Der Ausgang des Throttle-Blocks wird nun mit der Time Sink verbunden. Alle anderen Werte sollten bereits richtig eingestellt sein: Die  Variable samp-rate gibt bei allen Blocks die Samplingrate vor, eine Veränderung der Konstante verändert somit die Werte in allen Blöcken.

 

600px-Commandspace.png

Diese zwei Buttons speichern bzw. speichern und führen das Programm aus. Sind keine Fehler aufgetreten, so wird folgendes Bild ausgegeben:

600px-Complex_sine.png

Die Ausgabe ist übrigens nicht fehlerhaft, bei einem komplexen Signal werden immer Real- und Imaginärteil ausgegeben, die zueinander in Ihrer Phase um 90° verschoben sind. Mit den zwei Buttons oben rechts kann man diese einzeln ein- oder ausschalten.

Die Ausführung des Programms lässt sich durch Klicken auf die Stoptaste anhalten.

Ändert man die Ein/Ausgabe der Blöcke von komplex_float nach float, werden alle orange dargestellt, die Anzeige verändert sich entsprechend, indem nur mehr reale Werte ausgegeben werden:

600px-Tutorial_two_2.png

Somit haben wir unser ersten Projekt erfolgreich abgeschlossen!