banner
Heim / Blog / Erste Schritte mit GNU Radio
Blog

Erste Schritte mit GNU Radio

Jun 18, 2023Jun 18, 2023

Software Defined Radio (SDR) – die Fähigkeit, Funksignale mithilfe von Software statt mit Elektronik zu verarbeiten – ist unbestreitbar faszinierend. Es besteht jedoch eine große Lücke zwischen der Verwendung handelsüblicher SDR-Software und dem Schreiben eigener SDR-Software. Schließlich erfordern SDRs viel digitale Signalverarbeitung (DSP) bei hohen Geschwindigkeiten.

Nicht viele Leute könnten einen modernen PC von Grund auf bauen, aber fast jeder kann sich ein Motherboard, einige I/O-Karten, ein Netzteil und ein Gehäuse besorgen und ein individuelles System zusammenstellen. Das ist die Idee hinter GNU Radio und SDR. GNU Radio bietet eine Fülle von Python-Funktionen, mit denen Sie anspruchsvolle SDR-Anwendungen (oder tatsächlich jede beliebige DSP-Anwendung) erstellen können.

Wenn Python immer noch nicht Ihr Ding ist (oder sogar), gibt es eine noch einfachere Möglichkeit, GNU Radio zu verwenden: den GNU Radio Companion (GRC). Dies ist ein größtenteils grafischer Ansatz, der es Ihnen ermöglicht, Module grafisch zusammenzuführen und einfache GUIs zu erstellen, um Ihr neues Funkgerät zu steuern.

Auch wenn man bei GRC normalerweise an Radios denkt, handelt es sich tatsächlich um ein gutes Framework zum Erstellen jeder Art von DSP-Anwendung, und das zeige ich Ihnen im folgenden Video. GRC verfügt über einen Signalgeneratorblock und Schnittstellen zu Ihrer Soundkarte. Es ist sogar in der Lage, Daten im Dateisystem zu lesen und zu schreiben, sodass Sie damit viele DSP-Anwendungen oder Simulationen ohne zusätzliche Hardware durchführen können.

AKTUALISIEREN:Verpassen Sie nicht den Folgebeitrag, in dem SDRPlay zum Erstellen eines GNU Radio-basierten Empfängers verwendet wird.

Es gibt mehrere Schlüsselbausteine, die SDR ermöglichen. Das erste ist ein Eingabegerät (eine Quelle), das mit einer bestimmten Abtastrate abgetastet wird. Bei einem Audiogerät handelt es sich bei den Samples um reelle Zahlen. Allerdings werden Funkgeräte eher komplexe Zahlen mit einer I- und Q-Komponente liefern.

Wenn Sie nicht mit der Darstellung von Signalen als I- und Q-Komponenten (manchmal auch als Quadraturdaten bezeichnet) vertraut sind, ist das ein großes Thema (mit einer großartigen 3D-Erklärung, eine von Tektronix und eine andere von National Instruments). Allerdings müssen Sie die Theorie hinter Quadratursignalen nicht direkt verstehen, um mit GRC zu beginnen. Beachten Sie lediglich, dass die I- und Q-Signale kombiniert werden können, um jede Wellenform auszudrücken, und dass umgekehrt jede Wellenform in eine Reihe von I- und Q-Werten zerfallen kann. Bei GRC ist es jedoch (in den meisten Fällen) nicht so wichtig, das zu verstehen, genauso wie Sie eine Grafikkarte verwenden können, ohne genau zu wissen, welche Signale auf dem PCI-Express-Bus liegen.

Ein einfaches Starterprojekt finden Sie im Video unten. GRC verwendet ein Blockdiagramm (ein Flussdiagramm), um Ihr Projekt darzustellen. Wenn Sie ein neues Flussdiagramm erstellen, sehen Sie, dass bereits zwei Blöcke vorhanden sind: einer für Optionen und eine Variable mit dem Namen samp_rate. Der wichtigste Teil des Optionsblocks legt das grafische Toolkit fest, das Sie verwenden möchten (grafische WX-Widgets oder QT-Widgets). Für unseren Zweck spielt es keine Rolle, aber im Video werde ich Qt auswählen. Die Abtastrate ist so integraler Bestandteil Ihres Designs, dass es dafür eine spezielle Variable gibt. Die meisten anderen Blöcke erfassen den Wert dieser Variablen und verwenden ihn für ihre Abtastrate. Dies ist jedoch nicht immer das, was Sie wollen, aber es ist ein guter Ausgangspunkt. In diesem Beispiel erhalte ich schließlich eine Eingabe von einer Soundkarte, daher wollte ich eine Abtastrate, die von den meisten Soundkarten unterstützt wird (48 kHz). Zunächst habe ich das Beispiel jedoch sehr einfach gehalten, wie Sie in der Abbildung oben sehen können.

Zunächst platzieren Sie eine Signalquelle, die IQ-Daten (als komplexe Zahlen) generiert, im Flussdiagramm. Der Signalgeneratorblock kann tatsächlich zu viele Daten erzeugen und die CPU verlangsamen. Da die Samplerate 48 kHz beträgt, ist es nicht sinnvoll, mehr als 48.000 Samples pro Sekunde zu generieren. Um dies sicherzustellen, fügen Sie einen Drosselblock hinzu und verbinden ihn mit dem Generator.

Das Verbinden von Ports mit derselben Farbe (und damit demselben Datentyp) ist einfach. Klicken Sie einfach auf einen Port und dann auf den anderen. Die Reihenfolge spielt keine Rolle und Sie können mehr als einen Eingang mit einem einzelnen Ausgang verbinden. Wenn der Portdatentyp nicht übereinstimmt, müssen Sie einen Typkonverter verwenden (was später im Beispielvideo gezeigt wird).

Der letzte Teil meines einfachen Beispiels ist nur ein FFT-Anzeigeblock, der QT verwendet (die gleiche Grafikbibliothek, die Sie im Optionsblock festgelegt haben). Sobald alles miteinander verbunden ist, können Sie die Wiedergabetaste drücken und Sie sollten eine FFT des Signals sehen.

Zugegeben, das ist nicht besonders aufregend, aber man muss erst laufen, bevor man rennt. Im Video sehen Sie, dass Sie weitere grafische Elemente hinzufügen können, z. B. Schieberegler zum Ändern der Frequenz und Selektoren zum Auswählen des Signaltyps. Schließlich fügen Sie einen Soundkarteneingang hinzu (der keinen Gashebel benötigt; in diesem Fall ist es tatsächlich harmlos, beides zu haben, aber normalerweise würden Sie den Gashebelblock entfernen, wenn Sie einen echten Hardwareblock verwenden). Was jedoch erforderlich ist, ist eine Typkonvertierung, um die realen Daten in komplexe umzuwandeln. Das endgültige Projekt erscheint links.

Ich empfehle Ihnen, sich das Video bei geöffnetem GRC anzusehen. Sie kommen größtenteils ohne spezielle Hardware zurecht und die Soundkartenquelle sollte mit Ihrer Soundkarte funktionieren (ich vermute, Sie haben sicherlich eine Soundkarte in Ihrem PC).

Wenn Sie mit dem Beispiel vertraut sind, versuchen Sie, es zu erweitern. Fügen Sie eine Soundkartensenke hinzu, um Audio herauszugeben. Versuchen Sie, den Ton aus der Testquelle zu filtern. Wie klingt beispielsweise eine tiefpassgefilterte Rechteckwelle bei verschiedenen Frequenzen? Wenn Sie abenteuerlustig sind, versuchen Sie, Soundkarten-Audio zu filtern und es zur Wiedergabe in eine Wave-Datei zu schreiben. Alle Werkzeuge, die Sie benötigen, finden Sie in der GRC-Werkzeugpalette.

Übrigens, wenn Sie Linux verwenden (wie ich) und PulseAudio als Soundsystem verwenden, kann es zu einer abgehackten Audiowiedergabe kommen. Die Lösung dafür ist einfach. Erstellen Sie einfach eine Datei in Ihrem Home-Verzeichnis: ~/.gnuradio/config.conf (oder bearbeiten Sie sie, wenn sie bereits vorhanden ist). Sie benötigen Folgendes:

Sie können die nperiods sogar noch weiter erhöhen, wenn dadurch keine Verbesserung erzielt wird.

AKTUALISIEREN:Fahren Sie mit dem Bau eines Funkempfängers anhand eines Beispiels fort.

Das nächste Mal werde ich das SDRPlay-Gerät auspacken und ein echtes Radio bauen. Wenn Sie viel detaillierte Theorie wünschen, schauen Sie sich die Tutorial-Reihe von [Michael Ossman] an. Es richtet sich an das HackRF, aber die Theorie gilt weiterhin. Natürlich sind GNU Radio (und GRC) nicht die einzige Möglichkeit, DSP-Software zu erstellen, wie wir bereits festgestellt haben.

AKTUALISIEREN:AKTUALISIEREN: