VNA-Exporte in DAT konvertieren

mpylab-vna2dat konvertiert CSV- und Touchstone-Exporte in DAT-Dateien. Frequenzpunkte bleiben erhalten. Die Ausgabe enthält FUNIT: Hz, UNIT: dB und drei polare Werte pro Punkt. Das Werkzeug interpoliert nicht und greift nicht auf Geräte zu.

mpylab-vna2dat exports/ --output-dir dat/ --dry-run
mpylab-vna2dat exports/ --output-dir dat/
mpylab-vna2dat cable.s2p --parameter S21 --magnitude-error-db 0.2 --phase-error-deg 1
mpylab-vna2dat cable.s2p --parameter all

CSV mit einem Trace behält den Basisnamen; bei mehreren Traces und bei Touchstone wird der Parameter angehängt, beispielsweise cable_S21.dat. Vorhandene Dateien erfordern --overwrite; symbolische Links als Ziel werden abgelehnt. Jede Datei wird atomar geschrieben. Fehler stoppen unabhängige Dateien nicht. Exitcode 0 bedeutet Erfolg, 1 mindestens einen Konvertierungs- oder Dateifehler und 2 ungültige CLI-Syntax. Die Zusammenfassung zählt Ausgaben und Fehler, nicht notwendigerweise Quelldateien. --recursive durchsucht Unterverzeichnisse. Ein explizites Zielverzeichnis ist flach; bei Namenskollisionen wird keine der kollidierenden Dateien gewählt. --dry-run validiert Inhalt und Namen ohne Dateien oder Verzeichnisse anzulegen. Spätere Schreibrechte werden dadurch nicht garantiert.

CSV-Eingabe

Ein unterstützter Header lautet:

freq[Hz],db:Trc1_S21,ang:Trc1_S21,

Trace-Präfix und S-Parameter ordnen dB und Phase einander zu. Mehrere Traces erfordern --parameter Sij oder --parameter all. Kommentare mit # oder !, Leerzeilen, UTF-8-BOM, CRLF und abschließende Trennzeichen sind erlaubt. Frequenzeinheiten: Hz, kHz, MHz und GHz; Phasen immer in Grad. Komma, Semikolon und Tabulator werden automatisch erkannt. Dezimaltrennzeichen ist der Punkt. Explizite Auswahl für Semikolon: --delimiter ';'. Für andere Exporte lassen sich drei Spalten (ab 1 gezählt) und die Frequenzeinheit explizit angeben:

mpylab-vna2dat export.csv --columns 1,2,3 --frequency-unit MHz --skip-rows 3

Explizite Spalten wählen einen dB/Grad-Trace; --parameter benennt ihn optional. Die Headererkennung entfällt dann. Ungültige ausgewählte Werte, nichtendliche Zahlen, negative, doppelte oder absteigende Frequenzen sind Fehler. Es wird weder sortiert noch über Duplikate gemittelt.

Touchstone-Eingabe

Unterstützt werden S-Parameter mit einem oder zwei Ports, .s1p/.s2p, RI-, MA- und DB-Darstellung sowie Standardwerte der Optionszeile. Eine begrenzte Touchstone-2.0-Untermenge unterstützt außerdem .ts, vollständige Single-Ended- Matrizen, beide Zweitor-Reihenfolgen und positive Bezugswiderstände je Port. Pflichtschlüssel und Frequenzanzahl werden geprüft. Ein Port wählt standardmäßig S11; zwei Ports erfordern eine Auswahl. Es findet keine Renormierung statt. Bezugswiderstände bleiben als Kommentare erhalten. DAT-Verbraucher erzwingen diese Kommentare nicht; das Bezugssystem muss zur Anwendung passen.

Unbekannte Schlüssel, Mixed-Mode-Daten, Rauschdaten, Dreiecksmatrizen, mehr als zwei Ports und umgebrochene Ein-/Zweitor-Datensätze werden abgelehnt. Nullbeträge sind nicht als endliche dB-Werte darstellbar und werden nicht durch eine willkürliche Untergrenze ersetzt. Über- oder Unterlauf bei der Linearisierung führt ebenfalls zum Fehler.

Grundlage ist die IBIS-Touchstone-2.0-Spezifikation, insbesondere Option Line, Two-Port Data Order, Reference und Single-Ended Network Parameter Data. Die genannte Untermenge ist keine vollständige Touchstone-2.0-Unterstützung.

Sweep und Unsicherheit

Konstante Frequenzdifferenzen kennzeichnen lineare, konstante Differenzen der logarithmierten Frequenzen logarithmische Raster. --sweep-rtol setzt die relative Abstandstoleranz (Standard 1e-5). Weniger als drei Punkte oder Raster, die beide Prüfungen erfüllen, sind mehrdeutig. Andere Raster sind unregelmäßig und bleiben erhalten. Klassifikation und gegebenenfalls eine INI-Empfehlung für die Frequenzinterpolation werden kommentiert. Dies konfiguriert keinen Kanal automatisch: Das Raster allein bestimmt nicht das physikalisch beste Interpolationsmodell. Eine Nullfrequenz schließt logarithmische Erkennung aus.

Standard sind 0,2 dB Betragshalbspanne und 1 Grad Phasenunsicherheit. Beide Werte sind einstellbar, endlich und nichtnegativ; die Phasenunsicherheit muss kleiner als 180 Grad sein. DAT interpretiert die halbe linearisierte Betragsspanne als Standardunsicherheit. Herstellertoleranzen und erweiterte Unsicherheiten werden nicht automatisch umgerechnet. Betrag und Phase sind unabhängig; Korrelationen zwischen Frequenzen oder Traces werden nicht angenommen. Betragsunsicherheit null ist erlaubt: Bei drei gleichen Beträgen behält der mittlere angegebene Wert die Nominalphase. Phasengrenzen dürfen +/-180 Grad überschreiten.

Formatvereinbarung für polare dB-Daten

Für Betrag d in dB und Übertragungsphase phi speichert der bestehende DAT-Leser 10**(d/10) * exp(1j*phi) als POWERRATIO. Dies ist eine leistungsbezogene Übertragungsdarstellung, keine komplexe physikalische Leistung. Zur Gewinnung des S-Parameters wird nur der Betrag gewurzelt; die Phase bleibt erhalten. [-3, 60] ergibt damit ungefähr 0.707946 * exp(1j*pi/3) in AMPLITUDERATIO und keine Phase von 30 Grad.

mpylab.tools.ratio_conversion.convert_transfer_ratio() konvertiert in beide Richtungen und erhält die SCUQ-Unsicherheitsabhängigkeiten. MGraph nutzt diese Umrechnung jetzt für leistungsbezogene DAT-Werte zum Amplitudenverhältnis; ältere Versionen halbierten dabei fälschlich die Phase. Bestehende skalare Leistungskorrekturen bleiben unverändert. Die MGraph-Umrechnung von Amplitude zur physikalischen Leistung verwendet weiterhin abs(S)**2 und verwirft die Phase bewusst. Bloßes Umetikettieren der Einheit oder eine komplexe Wurzel ersetzen die explizite Umrechnung nicht. DAT-Grammatik und bisher gespeicherte Einheiten ändern sich nicht.