Verarbeitung erfasster Messkurvendaten in Python

Oszilloskope von Rohde & Schwarz nutzen hochmoderne Technologien, um zuverlässige und reproduzierbare Ergebnisse zu erzielen.
Oszilloskope von Rohde & Schwarz nutzen hochmoderne Technologien, um zuverlässige und reproduzierbare Ergebnisse zu erzielen.

Ihre Anforderung

Als Entwicklungs- oder Testingenieur nutzen Sie bei Ihrer täglichen Arbeit ein R&S®RTP, R&S®RTO oder R&S®RTE Oszilloskop. Sie speichern aufgezeichnete Messkurven zum Zweck der Archivierung und Dokumentation oder für eine weitere Verarbeitung, die über die Funktionalitäts- oder Performance-Grenzen des Oszilloskops hinausgeht. Mit der Speicherung von Messkurven im ASCII-Format (Dateiendung "csv") wird die Speicherkapazität möglicherweise überschritten. Auch erfordern Transfer und Verarbeitung bei diesem Format einen beträchtlichen Zeitaufwand. Ferner sind bei Verwendung des ASCII-Formats anstelle des Binärformats einige Informationen nicht verfügbar.

Lösung von Rohde & Schwarz

Die leistungsstarken Laboroszilloskope von Rohde & Schwarz (R&S®RTP, R&S®RTO, R&S®RTE) verwenden alle dasselbe Format, um Messkurven binär zu speichern. Dank des hochperformanten Python-Hilfspakets RTxReadBin können Sie Binärdateien verarbeiten und auf alle für Ihre Dokumentation notwendigen Details zugreifen.

Applikation

Um die Messkurve von Ihrem Messgerät in die Python-Umgebung zu übertragen, müssen Sie zunächst die Python-Entwicklungsumgebung (Integrated Development Environment, IDE) vorbereiten:

  • Laden Sie das RTxReadBin-Paket von der Rohde & Schwarz Website herunter.
  • Installieren Sie das Paket auf Ihrem System.
  • Erfassen Sie eine Messkurve auf Ihrem Oszilloskop und speichern Sie diese als Binärdatei.

Es werden zwei Dateien erzeugt: eine Datei mit der Messkurvenbeschreibung (*.bin) und eine mit den Messkurvendaten (*.wfm.bin). Die (über die RTxReadBin-Funktion geladenen) Messkurvendaten können Folgendes beinhalten:

  • Analoge Kanäle
  • Digitale Kanäle (R&S®RTP‑B1 Mixed Signal Option (MSO))
  • Parallele Busse (erfasst über R&S®RTP‑B1 MSO)
  • Analoge Kanäle (über R&S®RT‑ZVC)
  • Mathematikkurven einschließlich Spektren
  • Tracks (automatisch generierte Messkurven)

Für all diese Signalquellen werden gegebenenfalls mehrere Erfassungen und mehrere Kanäle unterstützt.

Nach der Datenerfassung mit dem Rohde & Schwarz Oszilloskop können Sie die Daten zur weiteren Verarbeitung in Ihre Python-Umgebung laden. Allerdings ist es noch komfortabler, die Messkurve im Oszilloskop zu belassen und einen Netzwerkzugriff auf die Daten zu ermöglichen, indem eine CIFS-Freigabe an Ihrem Computer eingerichtet wird. Führen Sie folgende vorbereitende Schritte an Ihrem Oszilloskop durch:

  • Navigieren Sie zu "Advanced sharing"
  • Wählen Sie "Public profile" und ändern Sie die folgenden Parameter:
    - Turn on network discovery
    - Turn on file and printer sharing
    - Turn on write access to public folders

Nachdem Sie diese Schritte durchgeführt haben, können Sie sich über folgenden Dateipfad in Ihrem Python-Skript mit dem Oszilloskop verbinden:

r’\\<name of scope or IP address>\Users\Public\Documents\Rohde-Schwarz\RTx\RefWaveforms\<filename>.bin’

Beachten Sie, dass Python den String und somit die \U-Zeichenfolge interpretiert, was zu einem Fehler führt. Um dies zu vermeiden, setzen Sie ein „r“ (für „raw“) vor den String. Möglicherweise werden Sie nach Ihren Zugangsdaten gefragt. Vergewissern Sie sich, dass Sie keine Authentifizierung gegenüber dem lokalen Windows Domain Server verwenden. Stellen Sie dazu dem lokalen Konto instrument einen Backslash voran:

account: \instrument
password: <your oscilloscope pw>

Alternativ können sie die Messkurve auch über den Windows Explorer von Ihrem Oszilloskop herunterladen (per Drag & Drop).

Sobald diese Voraussetzungen erfüllt sind, können Sie das Python-Modul (RTxReadBin) über die Python-Importfunktion laden und RTxReadBin aufrufen. Am einfachsten geht dies über die Angabe des Dateinamens. Die Funktion liefert drei Rückgabewerte: die vertikalen Messkurvendaten (y), die Horizontalachsendaten (x) und den Erfassungsparameter (S).

> from RTxReadBin import RTxReadBin
> import numpy
> y, x, S = RTxReadBin(’<wfm filename>.bin’)
> y.shape

Die vertikalen Daten (y) sind ein NumPy-Array mit der Form (Shape) [<record Length>, <# of acquisitions>, <# of active channels>]. Bei einer MSO-Messkurve wird der Datentyp Boolean verwendet, beim parallelen Bus eine vorzeichenlose ganze Zahl (Unsigned Integer; uint16), bitkomprimiert mit höchstem MSO-Index (MSB). Nehmen wir zum Beispiel an, dass die MSO-Leitungen D12, D7, D2 und D0 angeschlossen und als paralleler Bus konfiguriert sind. Dann wird das aufgezeichnete Datenwort als D12 ∙ 23 + D7 ∙ 22 + D2 ∙ 21 + D0 ∙ 20 abgespeichert. Für alle anderen Messkurven-Datentypen wird das Gleitkommaformat Float32 verwendet. Es ist wichtig zu erwähnen, dass das Oszilloskop im Vergleich zu Python eine andere Zählweise für den Verlauf (History) der Erfassungen verwendet. Das Oszilloskop beginnt bei (1 - <# of acquisitions>) und zählt bis 0 als die letzte Erfassung. In Python ist es umgekehrt: Der Start erfolgt bei 0, und die Zählung endet mit (<# of acquisitions> - 1) als letzte Erfassung.

Die horizontalen Daten (x) sind ein 64-Bit-Float-NumPy-Array mit der Form (Shape) [<record length>]. Wenn die Daten im x/y-Interleaved-Format gespeichert werden, wird das Array erweitert, so dass es alle Erfassungen [<record length>, <# of acquisitions>] abdeckt. Wird ein Spektrum gespeichert, so beinhaltet die X-Achse die Frequenzachse des Spektrums.

Die Aufzeichnungslänge sowie die Anzahl der Erfassungen und Kanäle lassen sich einfach ermitteln, indem auf die Shape-Eigenschaft des Rückgabewerts y zugegriffen wird.

Werden nicht alle Parameter benötigt, so können sie mit der üblichen Python-Syntax ignoriert werden, beispielsweise durch Hinzufügen eines List Specifiers (siehe Beispiel unten) oder mit Hilfe eines Unterstrichs als Positionsrückgabeparameter.

> y, x =
RTxReadBin(’<wfm filename>.bin’)[0,2]

Zwei weitere (optionale) Parameter können angegeben werden, um die zugewiesene Speicherkapazität zu reduzieren. Der erste Parameter spezifiziert die interessierenden Erfassungen. Der zweite Parameter legt das interessierende Intervall, die Zeit oder die Frequenz fest. Beide erfordern eine Liste mit einer Länge von zwei Elementen. Beachten Sie, dass der Erfassungsparameter der Python-Notation einer Liste folgt. Im angegebenen Beispiel werden zwei Erfassungen (2,3) zurückgegeben.

> y, x, S = RTxReadBin(’<wfm filename>.bin’,
acquisitions = [2,4],
xInterval = [-2e-7,3e-7])

Der verbleibende Parameter S enthält alle Details, die in der Header-Datei zur Verfügung stehen. Er ist als Python-Dictionary implementiert. Nicht alle dieser Parameter sind für den Benutzer wichtig. Jedoch können einige von ihnen für die Dokumentation und Analyse hilfreich sein. Da die Messkurvendaten im y-Vektor nur als Gleitkommazahl (Float) dargestellt sind, kann der Benutzer aus diesen Daten nicht die Originaleinstellungen bestimmen. Allerdings kann der Benutzer durch Prüfung der Parameter im Header die erforderlichen Informationen für Dokumentation und Nachverarbeitung gewinnen. Beispielsweise ist es für das Verständnis der Rauschbedingungen einer Messung wichtig, Kenntnis über die Einstellungen von vertikaler Skalierung, Offset, Position und Kopplung zu haben.

Ein weiteres Beispiel betrifft die Analyse der Pulswiederholrate (PRI) bei Radarapplikationen. Wird mit Hilfe des segmentierten Speichers1) ein einziger Radarpuls pro Erfassung aufgezeichnet, so spiegelt die Liste der Zeitstempel dieser segmentierten Erfassung die Triggerereignisse über der Zeit wieder, die andernfalls nicht verfügbar sind (S[’Timestamps’]). Der Zeitunterschied zwischen aufeinanderfolgenden Triggerereignissen liefert die PRI-Folge.

Die folgenden beiden Darstellungen zeigen Messkurvendaten, die am Oszilloskop und in einer Python-Umgebung geladen wurden. Drei Signale werden abgebildet:

  • 1-MHz-Sinussignal mit Offset
  • Radar-Chirpsignal, alternierend auf- und absteigend
  • Rauschen – kein Signal angeschlossen

Die RTxReadBin-Funktion bietet den Vorteil, dass sie Messkurvendateien mit Mehrfach-Erfassungen (History) verarbeiten kann. Wird dieselbe Datei geladen, so erkennt das Oszilloskop dagegen nur die letzte Erfassung und zeigt einen leeren Verlauf (ohne History).

1)Siehe „Demodulieren von Radar-HF-Pulsen mit einem Oszilloskop“ auf der Website von Rohde & Schwarz.

Fazit

Das R&S®RTP, R&S®RTO und R&S®RTE sind leistungsstarke Oszilloskope. Das Python-Modul (RTxReadBin) erweitert die Funktionalität der Messgeräte um den Zugriff auf gespeicherte Messkurven. Für Applikationen, die Nachverarbeitung, Dokumentation oder nachfolgende Analyse umfassen, beispielsweise den Vergleich von Messkurven, stehen jetzt alle Messkurvendaten in einer leistungsstarken Python-Umgebung zur Verfügung.

Drei unterschiedliche Messkurven ohne History, geladen als Referenzmesskurven.
Drei unterschiedliche Messkurven ohne History, geladen als Referenzmesskurven.
Lightbox öffnen
Drei unterschiedliche Messkurven mit History.
Drei unterschiedliche Messkurven mit History.
Lightbox öffnen