

Von Tektronix-Experten
Softwaredefinierte Funkgeräte (SDR) bieten gegenüber herkömmlichen, hardwarebasierten Messgeräten und Funkempfängern mehrere Vorteile, darunter Flexibilität, Rekonfigurierbarkeit und die Möglichkeit, Open-Source-Verarbeitungswerkzeuge zu verwenden. In diesem Beitrag erfahren Sie, wie Sie Daten aus einem Tektronix-Echtzeit-Spektrumanalysator (RTSA) exportieren und in eine Vielzahl von Tools importieren.
Wir beginnen damit, wie man durch die Verwendung einer einfachen Tabellenkalkulation für grundlegende Analysen einen angemessenen Einblick in das interessierende Signal gewinnen kann. Tools wie Octave bieten umfangreiche Möglichkeiten zur Matrixmanipulation, während GNU Radio viele Funkanalyse-Blöcke wie Filter, Kanalcodes, Synchronisationselemente und Entzerrer bereitstellt. Audacity, ursprünglich für die Audiobearbeitung entwickelt, kann verwendet werden, um demodulierte Daten bis auf Sample-Ebene anzuzeigen und zu bearbeiten.
Als Beispielanwendung für diesen Beitrag habe ich die Analyse eines Funk-Autoschlüssels gewählt. Diese Geräte (zumindest in den USA) senden üblicherweise mit 315 MHz und verwenden ein einfaches On-Off Keying (OOK) Modulationsverfahren. Ein einfaches Gerät wie ein Autoschlüssel ermöglicht es uns, uns auf die Verwendung der Open-Source-Toolchain zu konzentrieren und uns nicht von der Komplexität des Signals überfordern zu lassen.
Messaufbau
Der Schlüssel zur Akquisition liegt in diesem Fall in der Einrichtung der Zeitübersichtsanzeige. Diese Anzeige zeigt den gesamten Erfassungsdatensatz und verdeutlicht, wie die Spektrumzeit und die Analysezeit in den Erfassungsdatensatz passen. Sie können auch sehen, wie Sie die Spektrumzeit und die Analysezeit anpassen können, um Teile der Daten zu messen.
Ein Vorteil des RTSA gegenüber vergleichbaren SDRs ist, dass er über einen analogen Abwärtswandler verfügt. Dadurch können wir das Gerät auf 315 MHz, die Mittenfrequenz der Übertragung, einstellen. In diesem Fall legen wir die Spanne willkürlich auf 5 MHz fest, um sicherzustellen, dass wir das Signal erfassen. Der Trigger des Instruments sollte auf HF-Impuls eingestellt sein, damit eine Datenerfassung erfolgt, wenn der Schlüsselanhänger aktiviert wird.
Der HF-Puls hat eine Dauer von etwa 185 ms und eine Datenrate von ~1700 Hz, was einer Periodizität von 0,6 ms entspricht. Wenn wir uns entscheiden, 220 ms an Daten mit 7 MS/s (Megasamples pro Sekunde) zu erfassen, dann erfassen wir 1,5 Msamples bzw. 142 ns pro Sample (0,219s/1,5 Msamples). Bei einer Datenrate von 1.700 Hz bzw. 0,6 ms bedeutet das, dass wir 4.000 Punkte pro Pulsübergang erfassen. Laut Nyquist könnten wir deutlich weniger einfangen. In diesem Fall haben wir die Erfassungsspanne jedoch auf 5 MHz eingestellt, sodass 7 MS/s ausreichend sind. Eine kleinere Spanne würde gegebenenfalls zu einer niedrigeren Abtastrate führen.
Im Fenster „Zeitübersicht“ werden die Spektrumslänge und die Analyselänge angezeigt. Die Spektrumslänge ist der Zeitraum innerhalb des Erfassungsdatensatzes, über den das Spektrum berechnet wird. Die Analyselänge ist der Zeitraum innerhalb des Erfassungsdatensatzes, über den alle anderen Messungen wie Amplitude vs. Zeit oder Spektrum werden wie im folgenden Beispiel dargestellt erstellt. Die Spektrumlänge und die Analyselänge können miteinander verknüpft werden, sodass die zur Erzeugung der Spektrumanzeige verwendeten Daten auch für die Messanzeigen verwendet werden; sie müssen jedoch nicht miteinander verknüpft werden. Sie werden standardmäßig separat angegeben und zur Analyse verschiedener Teile des Erfassungsdatensatzes verwendet.

Daten exportieren
Sobald die Messung erfolgt ist, können die Daten als IQ-Daten gespeichert werden. Wählen Sie „Datei“ und dann „Speichern unter“, um die Daten zu speichern. Ich habe CSV als Format und Acq als Datentyp ausgewählt. Datenexport.

Speichern Sie anschließend die Analysedauer der aktuellen Akquisition als IQ-Datensatz.

Wenn Sie die Datei in Notepad oder einem beliebigen ASCII-Editor öffnen, sehen Sie eine Kopfzeile und können überprüfen, dass Sie 1532861 Abtastpunkte mit einer Abtastfrequenz von 7000000 Hz erfasst haben.

Tabellenkalkulationen
Sie können die Datei auch als CSV-Datei in eine Tabellenkalkulation importieren und dann ganz einfach die Größe (I2 + Q2) berechnen und die Daten grafisch darstellen. Da wir 1,5 Millionen Datenpunkte haben – was für manche Tabellenkalkulationsprogramme zu viele Daten sind –, können wir die SignalVu-PC-Software verwenden, um nur einen kleinen Teil der Wellenform zur Analyse zu erfassen. In diesem Fall habe ich den Header umgangen und mithilfe des Zeitübersichtsfensters 16 ms Datenfeld bzw. 120.000 Samples ausgewählt. Anschließend habe ich, wie oben beschrieben, die Analysedaten in einer CSV-Datei gespeichert.

Nach dem Import in eine Tabellenkalkulation können wir die Kopfdaten und die IQ-Daten sehen. In Spalte D habe ich die Magnitude berechnet und das IQ Mag Data-Diagramm erstellt.

Tabellenkalkulationen bieten zwar gewisse Möglichkeiten zur Signalanalyse, sind aber nicht für die Arbeit mit großen Matrixdaten optimiert. Es gibt jedoch mehrere Open-Source-Programmiersprachen, die genau dafür entwickelt wurden.
Oktave
GNU Octave ist eine freie Open-Source-Hochsprache, die primär für numerische Berechnungen gedacht ist. Octave kann über eine grafische Benutzeroberfläche (GUI) oder über die Kommandozeile mit der Befehlsschnittstellenversion (CLI) ausgeführt werden. In den folgenden Beispielen werde ich die CLI-Version verwenden.
Beachten Sie in den obigen Beispielen, dass die CSV-Datei mit einer Kopfzeile gespeichert wurde. Octave benötigt diese Header-Datei nicht. Der Befehl „delimiter read“ (dlmread) ist eine gute Wahl zum Importieren der Daten. Wir können das Komma als Trennzeichen festlegen und den Import nach der10. Zeile starten, sodass wir die Kopfzeile nicht importieren. Wir werden 'v' als den Vektor angeben, dem wir die Matrix zuweisen möchten.
v = dlmread (filename, ',', 10,0);
Sobald der Import abgeschlossen ist, können Sie überprüfen, ob die Daten korrekt der Variable v zugewiesen wurden. Der Befehl size gibt die Länge und Breite von v zurück. Wenn wir die Datei „Datenfeld nur“ aus dem Tabellenkalkulationsbeispiel in Octave einlesen und dann die Größe des Arrays abfragen, gibt die Abfrage eine zweispaltige Matrix mit 119.291 Zeilen zurück.

Octave enthält eine leistungsstarke Reihe von Matrixmanipulationsfunktionen, zum Beispiel um die Größe des IQ-Arrays handschriftlich zu berechnen, jedes Element der Matrix zu quadrieren und dann jede horizontale Zeile mit der sum()-Funktion zu summieren.

Das Ergebnis ist ein einspaltiges Array mit 119.291 Zeilen. Um dies grafisch darzustellen, verwenden Sie einfach die Funktion plot(), wie oben gezeigt. Dadurch öffnet sich das folgende Grafikfenster:

Octave verfügt über diverse Matrixmanipulations- und arithmetische Funktionen. Zum Beispiel müssen Sie nicht jedes Element quadrieren und dann addieren; Sie können die Funktion sumsq() verwenden, die jedes Element in einer Zeile quadriert und dann die Zeile summiert.

Anschließend können Sie den Inhalt des Arrays mit flipud() umkehren und die Daten rückwärts darstellen, wie unten gezeigt:

Octave eignet sich zwar hervorragend für Matrixberechnungen und verfügt über viele Funktionen, ist aber nicht für die Analyse von Funksignalen optimiert, was uns zu GNU Radio führt.
GNU Radio
Wie Octave verfügt auch GNU Radio sowohl über eine Kommandozeilen- als auch über eine grafische Programmiersprache; GNU Radio wurde jedoch explizit für die Analyse von Funksignalen entwickelt. GNU Radio ist ein freies und quelloffenes Softwareentwicklungs-Toolkit, das Signalverarbeitungsblöcke zur Implementierung von Softwareradios bereitstellt. Es kann mit verschiedenen externen Hardwaresystemen verwendet werden, darunter die Tektronix RTSA-Familie.
Im Prinzip empfängt man ein Signal, verarbeitet es und gibt das resultierende Signal dann an ein grafisches Element wie Spektrum- oder Zeitanzeigen aus, oder man gibt es in einer Datei aus und/oder gibt es letztendlich an einen tatsächlichen Hardware-Sender aus.
GNU Radio verfügt über Filter, Kanalcodes, Synchronisationselemente, Entzerrer, Demodulatoren, Vocoder, Decoder und viele andere Elemente (Elementblöcke), die typischerweise in Funksystemen zu finden sind. Wichtiger noch: Es beinhaltet eine Methode zur Verbindung dieser Blöcke und regelt anschließend, wie Daten von einem Block zum anderen weitergegeben werden. Auch das Erweitern von GNU Radio ist recht einfach; wenn Sie einen bestimmten fehlenden Block finden, können Sie ihn schnell erstellen und hinzufügen.
Um die CSV-Daten einer Spektrumsaufnahme nutzen zu können, müssen Sie sie in ein Binärformat konvertieren, das von GNU Radio gelesen werden kann. Dies kann auf verschiedene Arten erfolgen, aber da ich Octave in diesem Beispiel bereits geöffnet hatte, habe ich ein kleines Konvertierungsskript geschrieben. Zuerst wird mit dlmread() die 1,5 Millionen Punkte umfassende Schlüsselanhängerdatei in die Matrix v eingelesen. Anschließend wird mit der Funktion textInBinOut() eine Datei erstellt, die von GNU Radio gelesen werden kann.

Mit den Daten in einem verwendbaren Format können wir einen GNU Radio Flow Graph erstellen. Das Flussdiagramm unten bezieht das Signal aus der Datei, die ich gerade erstellt habe, und leitet es dann in die GUI-Frequenzsenke weiter, die das Signal im Frequenzbereich anzeigt, ähnlich wie bei einem Spektrumanalysator. Die Abtastrate beträgt 7 MS/s und ich habe sie einer Variablen namens samp_rate zugewiesen. Das Drosselelement nutzt diese Variable, um den Datendurchsatz zu begrenzen. Hinweis: Es empfiehlt sich, den Datendurchsatz auf die Abtastrate zu begrenzen. Dadurch wird verhindert, dass GNU Radio alle CPU-Ressourcen verbraucht, wenn der Ablaufgraph nicht durch einen Datenstrom in Echtzeit von externer Hardware reguliert wird.

Wenn ich das Flussdiagramm ausführe, zeigt das Spektrum die folgenden Ergebnisse an:

Beachten Sie, dass dies keine Konvertierung der Daten beinhaltet; alle Elemente im Flussdiagramm verwenden komplexe Datentypen, und wir verbinden einfach eine Linie zwischen den Elementen, um die komplexen Daten zwischen ihnen zu übertragen. Der nächste Schritt besteht darin, die Amplitudendaten auf plus und minus eins zu normalisieren. Im Falle dieses Signals können Sie die IQ-Daten mit 10 multiplizieren. Sie können dem Signal auch Rauschen hinzufügen und die Mittenfrequenz anpassen.
Im folgenden Beispiel habe ich zwei Range-GUI-Elemente hinzugefügt, die als Schieberegler dienen, um das additive Rauschen des Noise Generator Elements zu erhöhen und die Mittenfrequenz durch Mischen des Originalsignals mit einem von einem Single Source Element erzeugten Signal zu verschieben. Ich habe außerdem eine Spektrogrammanzeige bzw. das Wasserfall-Senken-Element hinzugefügt, um die Veränderungen im Laufe der Zeit zu beobachten.

Die Ausführung des obigen Ablaufdiagramms liefert die folgende Ausgabe. Wenn der Frequenzschieber bewegt wird, kann man sehen, wie sich die Mittenfrequenz des ursprünglichen Trägers verschiebt, und wenn wir Rauschen von der Rauschquelle hinzufügen, erhöht sich die Amplitude des Rauschpegels.

Letztendlich wollen wir das Signal demodulieren und es im Zeitbereich betrachten. Mit einem einfachen Modulationsverfahren wie OOK ist dies relativ einfach. Da GNU Radio so leistungsstark ist, können Sie eine vollständige analoge oder digitale Empfängerkette mit Elementen aufbauen, die Ihnen die Taktrückgewinnung, komplexe Demodulationsfilterung und Symboldecodierung ermöglichen.
Da OOK relativ einfach zu dekodieren ist, habe ich das obige Flussdiagramm modifiziert, indem ich zunächst die Skalierung durch Verwendung des Multiply Const Elements vereinfacht und anschließend das IQ-Signal in eine Gleitkomma-Größe umgewandelt habe.

Da die erste Messung über Funk (OTA) erfolgte, gibt es eine gewisse Variabilität in der Amplitude. Diese können wir jedoch mithilfe der Schwellenwertfunktion korrigieren, indem wir einen 1-V-Ausgang für jeden Eingangswert über 0,8 V und einen 0-V-Ausgang für jeden Wert unter 0,1 V am Eingang des Elements definieren. Die beiden Amplitudendiagramme zeigen sowohl die Rohamplitudendaten als auch die durch die Schwellenwertfunktion gefilterten Amplitudendaten.

Beachten Sie, dass ich im Flussdiagramm die Daten auch um den Faktor siebzig reduziert und dann das Wave File Sink Element verwendet habe, um die resultierenden Daten zur Weiterverarbeitung im nächsten Tool in einer Datei zu speichern.
Audacity ist eine kostenlose Open-Source-Softwareanwendung zum Bearbeiten und Aufnehmen digitaler Audiodateien. Viele nutzen es auch zur Analyse demomodulierter Daten verschiedenster Art. Es ermöglicht Ihnen, Daten bis hin zu jedem einzelnen Abtastpunkt anzuzeigen und zu bearbeiten. Im folgenden Beispiel habe ich so weit hineingezoomt, dass jeder einzelne Abtastpunkt sichtbar ist.

Mithilfe des Beispielbearbeitungswerkzeugs können Sie jeden einzelnen Punkt anpassen oder bei Bedarf sogar die gesamte Hüllkurve ändern. Um die Datei wieder in GNU Radio zu importieren, verwenden Sie einfach das Source Wav File Element.
Fazit
Probleme mit störungsfreiem Dynamikbereich, Spiegelungen, Oberwellen und anderen Störsignalen beeinträchtigen die Leistungsfähigkeit vieler heute auf dem Markt erhältlicher SDRs. Daher ist es für eine erfolgreiche Analyse von grundlegender Bedeutung sicherzustellen, dass die erfassten Daten vor der Verarbeitung von guter Qualität sind. Die Verwendung eines leistungsstarken RSA306 oder RSA500 RTSA als SDR gewährleistet die Erfassung qualitativ hochwertiger Spektrumdaten. Sobald die Daten erfasst sind, stehen zahlreiche leistungsstarke Software-Tools zur Verfügung, die SDR-Funktionalität ermöglichen.
In diesem Beitrag habe ich nur an der Oberfläche gekratzt. Sowohl Octave als auch GNU Radio können auch für Taktrückgewinnung, Demodulation und Messungen an allen Arten von IQ-modulierten Signalen verwendet werden, während Audacity die grafische Bearbeitung auf Sample-Ebene ermöglicht. Die Kombination hochwertiger Empfangsfunktionen mit einer Reihe leistungsstarker Open-Source-Softwaretools bietet nahezu unendliche Analysemöglichkeiten und die Möglichkeit, tiefe Einblicke in die Funkumgebung um uns herum zu gewinnen. Erfahren Sie mehr über Spektrumanalysatoren“
