.. index:: TEM-Emission, Emissionsdatenstruktur, Detektoren TEM-Emissionsdaten ================== ``TEMCell.Measure_Emission`` speichert korrigierte Empfängerspannungen für Rauschmessung, EUT-Orientierungen und gegebenenfalls Detektor-Nachmessungen. Die Auswertung erfolgt stufenweise durch ``Calculate_Prad``, ``Calculate_Emax`` und optional ``Calculate_EmissionLimitComparison``:: raw = history.rawData_Emission[description] result = history.processedData_Emission[description] Rohdaten -------- Die kanonischen Messwertpfade sind:: raw["voltage"][detector][frequency][port][position][sample] raw["noise"][detector][frequency][port][0][sample] Detektoren werden normalisiert, typischerweise auf ``"PK"``, ``"QP"`` oder ``"AV"``. ``frequency`` ist ein numerischer Frequenzwert in Hz; ``port`` und ``sample`` sind ganzzahlige Indizes. Beim Rauschen steht der Positionsschlüssel ``0`` für eine positionsunabhängige Messung. Ältere Historien ohne Detektorebene (``voltage[frequency][port][position]``) werden weiterhin gelesen und dem Fallback-Detektor zugeordnet. Ein Messwerteintrag enthält ``value``, ``pfwd``, ``pbwd``, ``detector``, ``receiver`` und ``acquisition_source``. ``value`` ist die bereits um die Pfadkorrektur bereinigte Spannungs-Quantity. Die beiden Leistungsschlüssel sind bei diesem Empfängerablauf normalerweise ``None`` und werden nur aus Kompatibilitätsgründen mit der gemeinsamen Eintragsstruktur geführt. .. list-table:: Weitere Rohdaten-Keys :header-rows: 1 :widths: 34 66 * - Key - Bedeutung * - ``geometry``, ``eut_position`` - GTEM-Geometrie und optionale EUT-Koordinaten. * - ``prescan_detector`` - Detektor des schnellen Ausgangsscans. * - ``acquisition`` - ``mode``, ``scan_chunk_size``, ``progress_log_batch_size`` und ``detailed_point_logging`` des Messlaufs. * - ``Prescreen`` - Frequenz-, Port- und positionsbezogene Vorbewertung. * - ``RemeasureRequiredFrequencies`` - Sortierte Frequenzen, für die eine Nachmessung erforderlich ist. * - ``RemeasurementCoverage`` - ``complete``, ``operator_decision`` und noch ``missing`` gebliebene Detektor-/Positions-/Frequenzkombinationen. * - ``prescreen_e0y_source`` - Bei der Vorbewertung verwendete Feldfaktor-Herkunft. * - ``mg`` - Persistierte Messgraphbeschreibung, nicht eine offene Geräteverbindung. ``Prescreen[frequency][port][position]`` enthält ``field_limit``, ``voltage_limit``, ``measured_peak_voltage``, ``margin_db``, ``remeasure_required``, ``prescreen_margin_db``, ``position_count_assumption``, ``prescan_detector``, ``remeasure_detector``, ``e0y_source_family`` und ``e0y_source_name``. Struktur der Auswertung ----------------------- Die Auswertung ergänzt einen gemeinsamen Datensatz; welche Keys vorhanden sind, hängt von den ausgeführten Stufen ab. ``Evaluate_Emission`` führt ``Calculate_Prad`` und ``Calculate_Emax`` aus und ergänzt bei gesetztem Limit auch den Vergleich. Nach ``Calculate_Prad`` sind vorhanden: ``Prad``, ``Prad_noise`` ``[frequency][port][result_index]`` enthält eine Leistungs-Quantity in W. ``detector_used`` ``[frequency][port][position]`` nennt den für die jeweilige Spannung verwendeten Detektor. ``correlation_positions`` ``[frequency][port][result_index]`` ist das Tupel der drei orthogonalen EUT-Orientierungen, die in die Korrelation eingingen. ``correlation_detectors`` Gleicher Index; Liste der tatsächlich verwendeten Detektoren. ``e0y_source`` Herkunft der Feldfaktoren einschließlich ``family``, ``name`` und ``component``. Je nach Auswahl enthält sie weitere Geometrie-, Positions- oder Verifikationsmetadaten. Nach ``Calculate_Emax`` kommen ``Emax`` und ``Emax_noise`` hinzu. Ihr Pfad ist ``[frequency][port][result_index]``; der Eintrag besitzt ``h``, ``v`` und ``total`` als Feldstärke-Quantities. ``total`` ist das größere der beiden polarisierten Ergebnisse. Die Annahmen werden explizit unter ``Assumed_Distance``, ``Gmax_Model``, ``Assumed_hg``, ``Assumed_RH``, ``Assumed_Zc`` und ``Assumed_Directivity[frequency]`` gespeichert. Detektor- und Grenzwertbewertung -------------------------------- Ein ausgeführtes Prescreening kann auch in der Auswertung ``Prescreen``, ``RemeasureRequiredFrequencies``, ``EmissionLimit`` und ``prescreen_e0y_source`` erzeugen. Die rohe Vorbewertung ist jedoch für den tatsächlichen Messablauf und die Nachmessungsentscheidung maßgeblich. ``LimitComparison[frequency][port][result_index]`` besitzt ``Emax``, ``limit``, ``margin_db``, ``passed``, ``detector_required``, ``detector_used`` und ``detector_fallback``. ``passed`` ist ``None``, wenn an der Frequenz kein gültiger Grenzwert vorliegt. ``detector_fallback == True`` kennzeichnet, dass mindestens ein erforderlicher Enddetektor fehlte. Diese Information darf bei der Interpretation eines scheinbar bestandenen Grenzwertvergleichs nicht ignoriert werden. Fehlende oder ungeklärte Grenzwertvarianten behalten die bestehende Bedeutung ``passed=None``, ``limit=None`` und ``margin_db=None``. Der globale Profilstatus unterscheidet sich von den optionalen frequenzbezogenen Bewertungsfeldern. Siehe :doc:`../framework/limit-references`. Neue ``LimitComparison``-Einträge enthalten zusätzlich optional ``limit_status`` (str: applicable/exempt/unresolved/out_of_range) und ``limit_reason`` (str). Ausgenommene und ungeklärte Fälle behalten ``limit=None``, ``margin_db=None`` und ``passed=None``. Alte Historien ohne die Felder bleiben lesbar; fehlender Status bedeutet unbekannt und wird nicht als Ausnahme interpretiert. Bestehende Schlüssel, Indizes, Zahlenwerte und Einheiten behalten ihre Bedeutung. ``EmissionLimit`` kann das optionale Attribut operating_frequency aus der Referenzmatrix enthalten. Prescreen-Einträge behalten ihre bisherige Struktur. Resolver-created ``EmissionLimit`` objects may additionally contain ``profile_id`` (string): the registered model identity, independent of its selection parameters. It is optional for direct construction and old pickles. A detector mismatch no longer produces ``passed=True``: below-limit results with ``detector_fallback=True`` have ``passed=None``; the numerical margin remains available. This does not change existing result keys or units. Aufbewahrte Orientierungssweeps ------------------------------- Das Skript ``tem-emission.py`` arbeitet standardmäßig interaktiv. Nach jedem vollständigen Orientierungssweep zeigt es korrigierte Spannungen in dBµV, die Spannungs-Screeninggrenze und die Schwelle ``Grenzwert - prescreen_margin_db``. Verfügbare Rauschdaten werden ergänzt. Dies sind Screeningkurven einer einzelnen Orientierung, keine abschließende Bewertung der abgestrahlten Feldstärke; fehlende Grenzwertabschnitte bleiben unbewertet. Der Anwender kann die Orientierung wiederholen, fortfahren oder vorzeitig beenden. Variante und Notizen beschreiben den EUT-Zustand **während des angezeigten Sweeps**. Nach Wahl der Wiederholung wird der nächste EUT-Zustand vor dem erneuten Start vorbereitet. Für unbeaufsichtigte Abläufe gilt oben in der Konfiguration ``cdict["interactive_sweeps"] = False``; ein Eintrag in den jeweiligen ``measure_parameters`` kann dies überschreiben. Direkte Aufrufe von ``TEMCell.Measure_Emission`` behalten den Standard ``interactive_sweeps=False``. ``sweep_variant`` (Standard ``"default"``) und ``sweep_notes`` (Standard leerer String) initialisieren die Beschriftung. Die Prüfung verwendet Qt oder ein Terminal mit PNGs. Live-Darstellung während der Aufnahme und auswählbare Überlagerungen älterer Kurven sind noch nicht umgesetzt. Interaktive Historien ergänzen folgende **optionale** Rohdatenschlüssel. Ältere Historien ohne diese Felder bleiben lesbar; Einheiten und bestehende Indexhierarchien von Spannung/Rauschen bleiben erhalten. Das Arbeitsdictionary ``voltage`` enthält den jeweils neuesten Sweep pro Orientierung. Für Wiederholungen sind die aufbewahrten Snapshots zu verwenden, nicht gleiche Listenindizes über mehrere Orientierungen:: raw["orientation_sweeps"][sweep_id] # dict, unabhängiger Snapshot raw["active_orientation_sweep"] # str, solange ausstehend raw["selected_orientation_sweeps"][position] # str, zuletzt akzeptierte ID raw["sweep_selections"][evaluation_name]["sweeps"] # dict: Orientierung -> ID raw["interactive_session_incomplete"] # bool, Resume-Datei behalten ``sweep_id`` ist ein stabiler UUID-Hexstring. Jeder Datensatz enthält ``id`` (str), ``position`` (Orientierungsstring), ``variant`` und ``notes`` (str), ``acquisition_id`` (nullbasierter Aufnahmeindex als Integer), ``frequencies`` (Tupel aus float-Werten in Hz), ``prescan_detector`` (str), ``started_at_utc`` (ISO-UTC-String) und ``status`` (``running``, ``awaiting_review``, ``complete`` oder ``interrupted``). Snapshots ergänzen ``updated_at_utc``; akzeptierte Sweeps außerdem ``finished_at_utc``. ``limit_title`` (str) und ``screening_parameters`` (``prescreen_margin_db`` in dB sowie ``position_count_assumption`` als Integer) halten bei Verfügbarkeit den Screeningkontext fest. ``voltage`` im Snapshot behält die Hierarchie Detektor/Frequenz/Port/Orientierung/Sample für genau diese Orientierung. Verfügbare ``noise``, ``Prescreen``, ``RemeasurementCoverage``, ``acquisition`` und ``prescreen_e0y_source`` werden als Kontext kopiert. Prescreenkontext kann weitere Orientierungen enthalten; nur ``position`` des Datensatzes gehört zu diesem Sweep. Neue Empfängersamples können ``orientation_sweep_id`` (str) tragen. Snapshots und Arbeitsdaten teilen keine veränderlichen Container. Unterbrochene Sweeps werden mit derselben ID und vorhandenen Samples fortgesetzt; eine bewusste Wiederholung erhält eine neue ID. Beim vorzeitigen Beenden vor Aufnahme aller angeforderten Orientierungen bleibt Autosave erhalten. Bevor interaktive Messungen eine Arbeitsorientierung ersetzen, werden ältere Samples archiviert. Importierte Datensätze erhalten ``legacy_import=True``, ``variant="legacy"``, ``started_at_utc=None`` und Notizen mit dem ursprünglichen Sampleindex. ``acquisition_id`` stammt aus den Samplemetadaten oder ist bei fehlender Angabe der String ``"legacy"``. Gemischte Aufnahmemetadaten machen einen importierten Datensatz ``interrupted`` und verhindern dessen Auswahl für ein Endergebnis. Optionale Kontext- und Zeitstempelfelder können dort fehlen. Der abschließende Auswahldialog akzeptiert einen vollständigen Sweep je Orientierung für eine kanonische orthogonale Dreiergruppe oder alle zwölf Orientierungen (Anhang A.3.2.3.2 des gepflegten IEC-61000-4-20-Entwurfs). Frequenzraster, Aufnahmeindex und EUT-Variante müssen übereinstimmen; der Prescan muss vollständig abgedeckt sein. Mehrere benannte Auswahlen sind möglich, ohne sämtliche Kombinationen aufzuzählen. Unterschiedliche Wiederholungszahlen sind zulässig. Anzeigeauswahl und Auswertungsauswahl bleiben getrennte Konzepte; IDs und Notizen ermöglichen spätere Vergleichsüberlagerungen. Ein ``sweep_selections``-Eintrag enthält ``sweeps`` (Orientierung-zu-ID-dict), ``created_at_utc`` (ISO-UTC-String) und nach Auswertung ``result_description`` (str). Die Erstellungszeit wird beim Hinzufügen jedes benannten Satzes in Qt oder Terminal erfasst und bleibt bei späterem Finish sowie nach dem Laden des Pickles unverändert. Eigene Adapter mit dem bisherigen Zwei-Argument-Aufruf von ``SweepEvaluationSelection`` dürfen die Zeit weglassen; nur dann verwendet der Ablauf seine Übernahmezeit. Mitgelieferte Zeiten müssen ISO-Zeitstempel in UTC sein. Alle Vorschläge werden vor dem Speichern einer Auswahl validiert; persistierte Schlüssel und Schema bleiben unverändert. Die Auswertung erzeugt eine unabhängige Rohdatenansicht in bisheriger Struktur und ein verarbeitetes Ergebnis unter ``description + "::" + evaluation_name``. Dessen ``selected_orientation_sweeps`` dokumentiert die Herkunft. Korrelationsformeln und Anforderungen an finale Detektoren bleiben erhalten. Es gibt keine implizite Auswahl: Schließen ohne Hinzufügen speichert die Messungen ohne neues Endergebnis. Das Messpickle enthält sämtliche Sweeps und Auswahlen; der normale Rohdatentabellenexport bildet das Arbeitsdictionary ab, nicht jede aufbewahrte Wiederholung. Der Sweep-Dialog unterscheidet zwei Abschlussaktionen: **Finish acquisition & select results** beendet die Aufnahme und führt zur Endauswahl. **Save & exit without evaluation** behält die gemessenen Sweeps und beendet den Ablauf ohne neue Endauswertung. Im Auswahldialog verwirft die zweite Aktion neu vorgemerkte Auswahlen; frühere Auswahlen/Ergebnisse bleiben erhalten. Tooltips erläutern beide Aktionen. Das TEM-Emissionshauptfenster beschriftet seinen Abbruchknopf mit **Stop measurement**; andere Messarten behalten ihre RF-Off-Beschriftung. Terminalprüfung ohne PySide6 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Der Standard ``sweep_review="auto"`` verwendet installiertes Qt mit Anzeige oder GUI-Dispatcher, sonst die Terminalprüfung. Für eine ausdrückliche Terminalwahl:: cdict["interactive_sweeps"] = True cdict["sweep_review"] = "terminal" cdict["sweep_review_dir"] = "output/sweep-review" Einträge in ``measure_parameters`` überschreiben diese Einstellungen. Direkte ``Measure_Emission``-Aufrufe akzeptieren dieselben beiden Prüfparameter. ``qt`` verlangt ausdrücklich Qt. Die Terminalprüfung benötigt interaktives stdin; fehlen verwendbare Anzeige und Terminal, stoppt die Verfügbarkeitsprüfung vor der Geräteerzeugung. Keine Prüfung wird stillschweigend bestätigt. Unbeaufsichtigte Abläufe verwenden weiterhin ``interactive_sweeps=False``. Vor jeder Prüfung speichert das Programm eine PNG-Datei und nennt vollständigen Pfad, Sweep-ID und Orientierung. Das Bild verwendet denselben Helfer wie Qt: korrigierte Spannungen, verfügbare Rauschdaten, Screeninggrenzen und Margenschwellen. Das Bild in einem Betrachter öffnen und bei Bedarf vom Messrechner kopieren. Das Programm startet keinen Betrachter. Einzelorientierungen sind Screening, kein endgültiges Abstrahlungsergebnis; fehlende Grenzwertabschnitte bleiben unbewertet. Nach Variante/Notizen ausdrücklich wählen: ``1`` wiederholt, ``2`` geht weiter, ``3`` beendet die Erfassung und führt zur Auswertungsauswahl, ``4`` speichert und beendet ohne Annahme des ausstehenden Sweeps oder neue Auswertung. Leere Variante/Notizen behalten bisherige Werte; ``-`` löscht Notizen. Leere/ungültige Entscheidungen wiederholen die Frage. EOF oder Strg-C bedeutet Speichern/Beenden, niemals Zustimmung. Ausstehende Daten behalten ``awaiting_review`` und ``interactive_session_incomplete=True``; Fortsetzung verwendet dieselbe ID und vorhandene Samples. RF-Off/Quit bleibt wirksam. Metadaten werden erst nach Validierung übernommen. Die Endauswahl listet vollständige Sweeps mit IDs, Varianten und Notizen. Gruppennummer oder ``a`` für alle zwölf Orientierungen wählen, anschließend je Orientierung eine Sweep-Nummer und einen unbenutzten Auswertungsnamen. Mehrere benannte Sätze sind möglich; ``f`` beendet und übernimmt sie. ``x``, EOF oder Strg-C verwirft neu vorgemerkte Sätze; frühere Ergebnisse bleiben. Dieselben Prüfungen von Abdeckung, Variante, Frequenzraster und Erfassungs-ID gelten für Qt und Terminal; unvollständige Sätze werden nicht ausgewertet. Ohne explizites Verzeichnis liegen PNGs neben dem Autosave in ``-sweep-review``; ohne Autosave-Pfad gilt ``tem-emission-review`` im Arbeitsverzeichnis. Namen werden aus Sweep-IDs abgeleitet und bei erneuter Anzeige desselben Sweeps wiederverwendet. Bilder sind externe Prüfunterlagen, keine neuen Pickle-Attribute oder finalen Reports; sie gehören zu den Messdaten außerhalb des Quell-Repositories. Adapter und Callbacks bleiben lokal, werden nicht gepickelt und bei Fortsetzung anhand der Konfiguration neu erzeugt.