25.04.2018

Ein einfacher Radioempfänger mit dem GNU Radio Companion

Bewertung:  / 25
SchwachSuper 

Einleitung

Der GNU Radio Companion ist eine grafische Oberfläche, mit der die vielen einzelnen Blöcke, aus denen ein Empfänger besteht, übersichtlich angeordnet, mit Parametern befüllt und miteinander zu einem Signalstrang oder -baum verbunden werden. Bei der Ausführung des fertigen Projekts kann eine grafische Oberfläche mit Bedienelementen des Empfängers mit erstellt werden - muss aber nicht. Das erste, einfache Beispiel liefert nur den reinen Radioempfang ohne grafische Oberfläche.

 

Einfacher Radioempfänger ohne grafische Oberfläche

Der GNU Radio Companion (kurz GRC genannt) muss gestartet sein und die Source-Blöcke für den DVB-T-Stick müssen eingerichtet sein (siehe Installationsanleitung Abschnitt "Installation über die Paketverwaltung"). Beliebter Fehler ist dabei oft, daß man GNU Radio vor der Hardware installiert - das ist nicht gut.

Der GRC öffnet sich mit einem neuen, leeren Projekt. Oben links sind zwei Blöcke bereits definiert - der "top_block" mit allgemeinen Einstellungen und eine Variable mit Namen "samp_rate" und dem Wert "32k" (=32000). Wir wollen ein Projekt ohne grafische Oberfläche erstellen - also klickt man doppelt auf den "top_block" und ändert den Eintrag "WX GUI" bei den Generate Options in "NO GUI" (=No Graphic User Interface) und bestätigt mit OK.

Nun sucht man links oben nach "RTL", markiert "RTL-SDR Source" und zieht es nach links in das Arbeitsblatt. Das ist nun unser DVB-T-Stick, unsere Signalquelle (=Source). Jede Quelle braucht aber auch ein Ziel für das Tonsignal - das wird beim GRC immer als "Sink" (=Senke, Abfluss, Spülbecken) bezeichnet. Wir wollen den Ton aus den Lautsprechern hören, also suchen wir links oben nach dem Block "Audio Sink" und ziehen ihn ebenfalls auf das Arbeitsblatt.

Nun fällt auf, daß die Quelle einen kleinen, blauen Anschluss namens "out" hat und das Ziel einen orangenen Anschluss namens "in" besitzt. Die Farbe definiert die Bauform der Daten, die zwischen den Blöcken transportiert werden. Orange sind Daten vom Typ "Float", also einfache 32-bit-Fliesskommazahlen während komplexe Daten, die aus zwei Float bestehen und daher üblicherweise 64bit lang sind, blau gefärbt sind. Man kann nun durch anklicken zuerst des einen Anschlusses (z.B. das orangene "in") und dann des Zielanschlusses (z.B. das blaue "out") eine Verbindung zwischen beiden herstellen. Allerdings zeigt der rote Kreis mit dem weißen Querstrich oben "Flow Graph Errors" an - man kann nur gleichfarbige Anschlüsse verbinden, also nur gleiche Datentypen für die Verbindung verwenden.

Wir brauchen also zumindest einen Umwandler von Complex nach Float, wir verwenden für dieses Beispiel den Block "WBFM Receiver". Nun haben wir drei zu verbindende Blöcke mit passenden Farben und können sie verbinden. Die Blöcke brauchen nun noch passende Einstellungen, die Blöcke müssen nun nacheinander doppelt angeklickt werden und die nachfolgenden Werte eingetragen werden:

Block "samp_rate"

Bei Value den Wert 2e6 eintragen, entspricht 2 mal 10 hoch 6, also 2 Millionen mal pro Sekunde. Mit dieser Geschwindigkeit soll das Frequenzsignal vom DVB-T-Stick abgetastet und digitalisiert werden.

Block "RTL-SDR Source"

Bei "CH0: Frequency (Hz)" die Frequenz eines starken Radiosenders in Hertz eintragen, z.B. 88e6 oder 88000000 für 88 MHz.

Bei "CH0: Gain Mode" die Verstärkung des Empfangssignal auf "Automatic" setzen

Block "WBFM Receiver"

Bei "Audio Decimation" ist der Teiler einzutragen, um den die Eingangssamples reduziert werden müssen, um die Ausgangs-Sample-Rate zu erreichen. Dazu ist zu wissen, daß der DVB-T-Stick wesentlich schneller Signale digitalisieren kann als die Soundkarte ausgeben kann. Für brauchbaren Klang reichen am Ausgang schon 32000 Samples pro Sekunde, während der DVB-T-Stick mit 32000 Samples nichtmal umgehen kann, er braucht viel mehr - in diesem Beispiel 2000000 pro Sekunde. Würden wir nicht teilen, würden wir massenhaft Daten unnötig transportieren. Also teilen wir 2000000 durch 32000 und erhalten abgerundet 62. Somit tragen wir 62 als Audio Decimation ein.

Bei "Quadrature Rate" trägt man 100000000 geteilt durch die eben gefundene 62, also 1612903 ein (Nachkommastellen weglassen).

Block "Audio Sink"

Bei "Sample rate" trägt man 32000 (=32k) ein.

Zum Schluss sollte die Arbeitsfläche so aussehen:

Bitte alle Einstellungen kontrollieren und mit der Grafik abgleichen. Wenn alles korrekt ist, dann muss man nur noch im GRC oben in der Menüleiste auf das Icon mit den Zahnrädern klicken (=Execute Flow Graph) und es öffnet sich ein kleines Terminalfenster mit direkt folgender Soundkartenausgabe des empfangenen Radiosignals. Mit Enter im Terminalfenster kann die Ausgabe gestoppt werden.

Hinweis: Wenn im Terminalfenster mehrere Kombinationen aus "aU" erscheinen (1-3 sind direkt zu Beginn normal, mehr sollten dann aber nicht kommen), dann ist das ein Hinweis auf ein "Audio Underrun", die Soundkarte bekommt nicht schnell genug die Daten. Das kann man verbessern, indem man genau die Audio-Decimation und Quadrature-Rate kontrolliert, eventuell gibt es da leichte Ungenauigkeiten. Helfen kann es auch (je nach PC) die Sample Rate des Audio Sink anzuheben, beispielsweise auf 64k.

 

Kommentare   

 
Udo
#1 Udo 2015-11-16 22:30
Hallo Dirk,
ich habe versucht den RTL Stick laut der Angaben oben auf meinem Raspi 2b zu installieren. Der CMAKE Befehl wird nicht akzeptiert. Kann es am Rasbian liegen?

Vielen Dank für eine Rückmeldung.
GNURadio habe ich erfolgreich installiert. Ich bin Funkamateur und bschäftige mich erstmals mit dem GRC

Udo (DL3BCR)
Dem Administrator melden
 

Kommentar schreiben

Sicherheitscode
Aktualisieren