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. .. code-block:: console 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. :func:`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.