Skip to content

correction

Der correction Service korrigiert Messdaten durch Resampling, Interpolation von Messfehlern oder Novalues, Offsetkorrektur und kann meherere Messdateien konkatenieren.

Laufzeitumgebung

Der correction Service muss Zugriff auf zwei Komponenten haben:

  • RabbitMQ Message Broker zum Empfangen der Korrekturanfragen und Ablegen der Ergebnisse und Logs.
  • MinIO Object Storage, der Messdaten zur Verfügung stellt, falls diese zu groß sind, um sie direkt in der Korrekturanfrage zu senden.

Der correction Service verwendet die folgenden RabbitMQ-Exchanges:

  • Measurement.Correction für Berechnungsanfragen und Antworten
    • Anfragen werden über den entsprechenden Routing Key empfangen und in der Queue Measurement.Correction.RequestQueue gehalten
    • Antworten auf die Berechnungsanfragen werden in der Queue Measurement.Correction.ResponseQueue gehalten
  • Measurement.Correction.Logs zur Speicherung von Logs in der Queue Measurement.Correction.Logs.Queue
  • Measurement.Correction.DeadLetter zur Speicherung von Nachrichten, die nicht verarbeitet werden können, in der Queue Measurement.Correction.DeadLetter.Queue
  • Measurement.Correction.Canceled zur Speicherung von fehlerhaften Berechnungsanfragen in der Queue Measurement.Correction.Canceled.Queue

Konfiguration

Umgebungsvariable Beschreibung Typ Werte
RABBITMQ_HOST* Der Host, unter dem der RabbitMQ Message Broker erreichbar ist. string
RABBITMQ_PORT Der Port, unter dem der RabbitMQ Message Broker erreichbar ist. int 64-65535 (default: 5672)
RABBITMQ_USER* Der RabbitMQ-Benutzer, den der correction Service zur Athentifizierung verwendet. string
RABBITMQ_PASSWORD* Das Passwort des konfigurierten RabbitMQ-Benutzers. string
RABBITMQ_VIRTUALHOST* Der verwendete Virtualhost des RabbitMQ-Servers. string
RABBITMQ_EXCHANGE_NAME Der RabbitMQ-Exchange, auf dem die Berechnungsanfragen und -ergebnisse abgelegt werden. string default: Measurement.Correction
MINIO_HOST* Name bzw. Adresse des Hosts, unter dem der MinIO-Server erreichbar ist. string
MINIO_PORT* TCP-Port, unter dem der MinIO-Server erreichbar ist. int 64-65535
MINIO_BUCKET* Name des MinIO-Buckets, der zum Laden der Messdaten verwendet werden soll. string
MINIO_USER* Nutzername, den der Service zur Authentifizierung mit MinIO verwenden soll. string mind. 8 Zeichen
MINIO_PASSWORD* Passwort des konfigurierten MinIO-Nutzers. string mind. 8 Zeichen
MINIO_TLS* Gibt an, ob TLS bzw. HTTPS für eine verschlüsselte Kommunikation verwendet werden soll. boolean
MINIO_SSL_CERT_FILE Pfad zu einer Datei, die die verwendete Kette an SSL-Zertifikaten enthält (mit der u.a. das Server-Zertifikat signiert wurde). Ist keine solche Datei angegeben, wird das Client-Zertifikat bei Anfragen nicht überprüft. string
RABBITMQ_DEAD_LETTER_EXCHANGE Der RabbitMQ-Exchange, an den durch einen Timeout oder sonstige Fehler nicht bearbeitete Nachrichten weitergeleitet werden. string default: Measurement.Correction.DeadLetter

API

Allgemeines Anfrage- und Antwortformat

Anfragen an den correction Service enthalten die folgenden Felder:

  • request_minio_bucket: Optionale Angabe des MinIO-Buckets, aus dem die Messdaten geladen werden sollen (muss nur angegeben werden, falls der Messdaten-Bucket nicht der konfigurierte ist).
  • result_data_provider_type: minio, falls die Berechnungsergebnisse in MinIO gespeichert werden sollen, sonst explicit oder den Parameter weglassen.
  • result_minio_bucket: Der MinIO-Bucket, in dem Berechnungsergebnisse gespeichert werden sollen.
  • Guid: Eine optionale GUID, die von der Anfrage in die Antwort übernommen wird.

Die einzelnen Endpunkte benötigen weitere korrekturspezifische Konfigurationsparameter.

Die Antwort des correction Service ist wie folgt aufgebaut:

  • channel_name: Name des korrigierten Kanals
  • data_provider: Die korrigierten bzw. konkatenierten Messdaten als Data Provider mit einem zusätzlichen history-Eintrag für die durchgeführte Korrektur.
  • service_version: Version des correction Containers, der die Anfrage bearbeitet hat.
  • Guid: Optionale aus der Anfrage übernommene GUID.
{
    "channel_name": "test_channel",
    "data_provider": { ... },
    "service_version": "1.2.3",
    "Guid": "f901f9e9-e205-45aa-831c-46e6761fcf8e" | null
}

Resampling

  • Routing Key: Resampling
  • history-Typ: resampling
  • Parameter:
    • channel_name*: Name des zu resampelnden Kanals
    • data_provider*: Data Provider, der den zu resampelnden Messkanal bereitstellt
    • target_sample_rate*: Sample Rate, in die der Kanal transformiert werden soll
    • method: Zu verwendende Resampling-Methode (Default=fourier)
      • fourier: Überführt das Signal durch FFT und IFFT in die angegebene Sample Rate. Die FFT erhält so weit wie möglich den Frequenzgehalt des Signals, kann jedoch zu geringfügigen Phasenverschiebungen und Ringing-Effekten (insb. bei abrupten Peaks) führen.
      • nearest_neighbour: Wählt als Wert im neuen Signal den zeitlich nächsten Wert im alten Signal aus. Einfaches und schnelles Vorgehen, dafür ungenau und produziert beim Upsampling ein stufenförmiges Signal.
      • monalysis: Erzeugt einen Stützkanal in der Ziel-Abtastrate. Erhält beim Downsampling die Peaks des Originalsignals. Glättet beim Upsampling das Signal.
{
    "channel_name": "test_channel",
    "data_provider": { ... },
    "request_minio_bucket": "request_bucket" | null,
    "target_sample_rate": 1000,
    "method": "fourier" | "monalysis" | "nearest_neighbour" | null
    "result_data_provider_type": "explicit" | "minio" | null,
    "result_minio_bucket": "result_bucket" | null,
    "Guid": "f901f9e9-e205-45aa-831c-46e6761fcf8e" | null,
}
{
    "type": "resampling",
    "old_sample_rate": 500,
    "new_sample_rate": 1000,
    "method": "monalysis"
}

Fourier Upsampling

Fourier Downsampling

Nearest Neighbour Upsampling

Nearest Neighbour Downsampling

Monalysis Upsampling

Monalysis Downsampling

Interpolation

  • Routing Key: Interpolation
  • history-Typ: interpolation
  • Interpoliert festgelegte Bereiche eines Messsignals nach der ausgewählten Methode, z.B. zur Entfernung von zuvor detektierten Peaks, Endanschlägen oder Messfehlern aus dem Signal
  • Parameter:
    • channel_name*: Name des zu interpolierenden Kanals
    • data_provider*: Data Provider, der den zu interpolierenden Messkanal bereitstellt
    • interpolation_ranges*: Array der zu interpolierenden Bereiche
    • method*: Interpolationsmethode (eine aus constant, cubic, linear, mean, tanh, quadratic)
    • value: konstanter Interpolationswert, nur notwendig bei Interpolationsmethode constant
{
    "channel_name": "test_channel",
    "data_provider": { ... },
    "interpolation_ranges": [
        {
            "start": 523,
            "end": 578
        },
        ...
    ],
    "method": "constant" | "cubic" | "linear" | "mean" | "tanh" | "quadratic",
    "value": 5 | null,
    "request_minio_bucket": "request_bucket" | null,
    "result_data_provider_type": "explicit" | "minio" | null,
    "result_minio_bucket": "result_bucket" | null,
    "Guid": "f901f9e9-e205-45aa-831c-46e6761fcf8e" | null
}
{
    "type": "interpolation",
    "method": "quadratic",
    "start": 500,
    "end": 520,
    "value": null
}

constant Interpolation

cubic Interpolation

linear Interpolation

mean Interpolation

tanh Interpolation

quadratic Interpolation

Konkatenation

  • Routing Key: Concatenation
  • history-Typ: concatenation
  • Konkateniert mehrere Messkanäle und interpoliert die Lücken zwischen den Signalen nach der ausgewählten Methode
  • Parameter:
    • channel_name*: Name des zu konkatenierenden Kanals
    • channels*: Array von Data Providern, die die zu konkatenierenden Messkanäle bereitstellen
    • gap_size*: Größe der zu interpolierenden Lücke zwischen den einzelnen Messkanälen (in Datenpunkten)
    • method*: Interpolationsmethode (eine aus constant, cubic, linear, mean, tanh, quadratic)
    • value: konstanter Interpolationswert, nur notwendig bei Interpolationsmethode constant
{
    "channel_name": "test_channel",
    "channels": [ { ... }, ... ],
    "gap_size": 10,
    "method": "constant" | "cubic" | "linear" | "mean" | "tanh" | "quadratic",
    "value": 5 | null,
    "request_minio_bucket": "request_bucket" | null,
    "result_data_provider_type": "explicit" | "minio" | null,
    "result_minio_bucket": "result_bucket" | null,
    "Guid": "f901f9e9-e205-45aa-831c-46e6761fcf8e" | null
}
{
    "type": "concatenation",
    "method": "quadratic",
    "joins": [
        {
            "start": 10,
            "end": 15
        },
        {
            "start": 100,
            "end": 140
        }
    ],
    "value": null
}

constant Konkatenation

cubic Konkatenation

linear Konkatenation

mean Konkatenation

tanh Konkatenation

Entfernen von NoValues

  • Routing Key: NoValueRemoval
  • history-Typ: interpolation
  • Interpoliert alle Novalues eines Messsignals nach der ausgewählten Methode
  • Parameter:
    • channel_name*: Name des zu korrigierenden Kanals
    • data_provider*: Data Provider, der den zu interpolierenden Messkanal bereitstellt
    • method*: Interpolationsmethode (eine aus constant, cubic, linear, mean, tanh, quadratic)
    • value: konstanter Interpolationswert, nur notwendig bei Interpolationsmethode constant
{
    "channel_name": "test_channel",
    "data_provider": { ... },
    "method": "constant" | "cubic" | "linear" | "mean" | "tanh" | "quadratic",
    "value": 5 | null,
    "request_minio_bucket": "request_bucket" | null,
    "result_data_provider_type": "explicit" | "minio" | null,
    "result_minio_bucket": "result_bucket" | null,
    "Guid": "f901f9e9-e205-45aa-831c-46e6761fcf8e" | null
}
{
    "type": "interpolation",
    "method": "quadratic",
    "start": 500,
    "end": 520,
    "value": null
}

Mittelwert-Offsetkorrektur

  • Routing Key: OffsetCorrection.TargetMean
  • history-Typ: offset_correction
  • Korrigiert den Offset eines Messsignals so, dass der Mittelwert des Signals einem Zielwert entspricht.
  • Parameter:
    • channel_name*: Name des zu korrigierenden Kanals
    • data_provider*: Data Provider, der den zu korrigierenden Messkanal bereitstellt
    • target_mean*: Ziel-Mittelwert des Kanals
    • threshold: Grenzwert, den der Unterschied zwischen tatsächlichem Mittelwert und Zielmittelwert überschreiten muss, um die Korrektur durchzuführen (verhindert minimale Änderungen, Default: 0)
{
    "channel_name": "test_channel",
    "data_provider": { ... },
    "target_mean": 0,
    "threshold": 0.1 | null,
    "request_minio_bucket": "request_bucket" | null,
    "result_data_provider_type": "explicit" | "minio" | null,
    "result_minio_bucket": "result_bucket" | null,
    "Guid": "f901f9e9-e205-45aa-831c-46e6761fcf8e" | null
}
{
    "type": "offset_correction",
    "correction_value": 12
}

Beispiel Mittelwert-Offsetkorrektur

Median-Offsetkorrektur

  • Routing Key: OffsetCorrection.TargetMedian
  • history-Typ: offset_correction
  • Korrigiert den Offset eines Messsignals so, dass der Median des Signals einem Zielwert entspricht.
  • Parameter:
    • channel_name*: Name des zu korrigierenden Kanals
    • data_provider*: Data Provider, der den zu korrigierenden Messkanal bereitstellt
    • target_median*: Ziel-Median des Kanals
    • threshold: Grenzwert, den der Unterschied zwischen tatsächlichem Median und Zielmedian überschreiten muss, um die Korrektur durchzuführen (verhindert minimale Änderungen, Default: 0)
{
    "channel_name": "test_channel",
    "data_provider": { ... },
    "target_median": 0,
    "threshold": 0.1 | null,
    "request_minio_bucket": "request_bucket" | null,
    "result_data_provider_type": "explicit" | "minio" | null,
    "result_minio_bucket": "result_bucket" | null,
    "Guid": "f901f9e9-e205-45aa-831c-46e6761fcf8e" | null
}
{
    "type": "offset_correction",
    "correction_value": 12
}

Beispiel Median-Offsetkorrektur

Offsetkorrektur um einen festen Wert

  • Routing Key: OffsetCorrection.CorrectionValue
  • history-Typ: offset_correction
  • Korrigiert den Offset eines Messsignals um einen festen Wert.
  • Parameter:
    • channel_name*: Name des zu korrigierenden Kanals
    • data_provider*: Data Provider, der den zu korrigierenden Messkanal bereitstellt
    • correction_value*: Wert, um den der Kanal offsetkorrigiert werden soll.
{
    "channel_name": "test_channel",
    "data_provider": { ... },
    "correction_value": -2.3,
    "request_minio_bucket": "request_bucket" | null,
    "result_data_provider_type": "explicit" | "minio" | null,
    "result_minio_bucket": "result_bucket" | null,
    "Guid": "f901f9e9-e205-45aa-831c-46e6761fcf8e" | null
}
{
    "type": "offset_correction",
    "correction_value": 12
}

Beispiel Offsetkorrektur um einen festen Wert

Offsetkorrektur mit dem ersten Wert

  • Routing Key: OffsetCorrection.FirstValue
  • history-Typ: offset_correction
  • Korrigiert den Offset eines Messsignals so, dass der erste Wert des korrigierten Kanals 0 ist.
  • Parameter:
    • channel_name*: Name des zu korrigierenden Kanals
    • data_provider*: Data Provider, der den zu korrigierenden Messkanal bereitstellt
{
    "channel_name": "test_channel",
    "data_provider": { ... },
    "request_minio_bucket": "request_bucket" | null,
    "result_data_provider_type": "explicit" | "minio" | null,
    "result_minio_bucket": "result_bucket" | null,
    "Guid": "f901f9e9-e205-45aa-831c-46e6761fcf8e" | null
}
{
    "type": "offset_correction",
    "correction_value": 12
}