FB_CMA_Correlation

Berechnung der Korrelationsfunktion für ein- und mehrkanalige reell-wertige Zeitreihen.

Der Funktionsbaustein FB_CMA_Correlation berechnet die Korrelationsfunktion reell-wertiger Zeitreihen.

Die Korrelationsfunktion zweier Signale beschreibt deren Ähnlichkeit bei unterschiedlichen zeitlichen Verschiebungen gegeneinander. Die zeitdiskrete Verschiebung wird im Folgenden mit m bezeichnet.

Die Eingangsdaten bestehen aus einem Tupel aus einem (oder mehreren) Testsignalen x[n] sowie einem (oder mehreren) Referenzsignalen y[n]. Die Eingangsdaten werden über den Baustein FB_CMA_SourcePaired in die Analysekette eingebracht. Hierbei ist zu beachten, dass bei der Angabe eines einzelnen Referenzsignals alle Kanäle der Testsignale mit dem gleichen Referenzsignal korreliert werden. Hingegen bei der Angabe mehrerer Referenzsignale paarweise das Referenzsignal von Kanal i mit dem Testsignal von Kanal i korreliert wird. Die Anzahl der Kanäle nChannels muss entsprechend übereinstimmen.

Die Anwendungsmöglichkeiten der Korrelationsfunktion sind vielfältig. So ist es beispielsweise möglich eine Signalreferenz eines Prozessschritts zu erfassen und diese dann fortwährend mit Wiederholungen dieses Prozessschritts zu vergleichen. Das Maß der Ähnlichkeit (Wert des Maximums der Korrelationsfunktion) kann dann zur Überwachung des Prozessschritts herangezogen werden. Ebenso ist die Korrelationsfunktion zur Bestimmung von zeitlichen Verschiebungen ein gutes Werkzeug. Hier wird nicht der Wert des Maximums, sondern dessen Position auf der Verschiebeachse m gesucht. Dies kann beispielsweise zur Ermittlung von Laufzeitunterschieden von Signalen genutzt werden, bspw. bei der Ortung von Leckagen mittels mehrerer Mikrofone. Ganz allgemein lässt sich die Autokorrelation, also die Korrelation eines Signales mit sich selbst, zur Signalerkennung in stark verrauschten Signalen nutzen. Ist das Rauschen zufällig und das Nutzsignal ein deterministisches Signal, beinhaltet das Ergebnis der Autokorrelation die Rauschkomponente nur noch bei m=0 und das deterministische Signal wird sichtbar.

Abtasttheorem: Wie der diskreten Fourier-Transformation ist das Abtasttheorem in gleicher Weise gültig. Der zeitkontinuierliche Verlauf einer Autokorrelationsfunktion kann bei diskreten Zeitreihen rekonstruiert werden, wenn die Abtastfrequenz mindestens doppelt so groß ist wie die höchste im Signal vorkommende Frequenz.

Die Berechnung der Korrelationsfunktion erfolgt auf Basis einer der nachfolgenden, konfigurierbaren Definitionen:

Base

FB_CMA_Correlation 1:

Normed

FB_CMA_Correlation 2:

Covariance

FB_CMA_Correlation 3:

Covariance (Bessel Korrektur)

FB_CMA_Correlation 4:

Pearson

FB_CMA_Correlation 5:

Die Wahl der oben genannten Definitionen erfolgt über den Initialparameter eCorrelationMode vom Typ E_CM_CorrelationMode. Bei quantitativer Bewertung der Ähnlichkeit von Signalen wird „Pearson“ empfohlen. Hingegen ist bei Suche nach einer Verschiebezeit die Normierung unerheblich.

Die Berechnung erfolgt über einem gewählten Zeitfenster, welches durch eWindowMode vom Typ E_CM_WindowMode eingestellt wird. Hierbei stehen drei Varianten zur Auswahl: ein gleitendes Fenster, eine festes Fenster sowie die Berechnung auf Grundlage aller gesammelten Daten seit dem letzten ResetData().

Konfiguration

Mit den Initialisierungsparametern werden die Berechnungsvariante sowie das Fenster festgelegt. Diese können mit der Configure() Methode für jeden Kanal individuell angepasst werden.

NaN Vorkommnis

Falls der Eingangsvektor einen oder mehrere NaN (Not a Number)-Werte beinhaltet, wird der gesamte Ausgangsvektor mit NaN gefüllt. Siehe separates Kapitel für weitere Information über NaN Werte.

FB_CMA_Correlation 6:

Behandlung von NaN-Werten

Falls die oben beschriebenen Situationen, welche zu NaN-Werten führen, nicht ausgeschlossen oder sicher vernachlässigt werden können, muss das Anwendungsprogramm diese Fehlerwerte behandeln.

Verhalten bei der Verarbeitung mehrkanaliger Eingangsdaten

Bei der Verarbeitung mehrerer Kanäle (nChannels > 1) besteht die Möglichkeit unterschiedlicher Rückgabewerte je Kanal. In diesem Fall können gesonderte Rückgabewerte am Funktionsbaustein abgefragt werden. Sind die Ergebnisse von einem oder mehreren Kanälen unzulässig, jedoch nicht alle Kanäle, dann entspricht der Wert am Baustein eCM_InfRTime_AmbiguousChannelResults. Sind die Ergebnisse aller Kanäle unzulässig, dann entspricht der Wert am Baustein eCM_ErrRTime_ErrornousChannelResults.

Die Abfrage einer Liste der Rückgabewerte aller Kanäle kann über die Methode GetChannelErrors()erfolgen.

Beispielimplementierung

Eine exemplarische Implementierung ist unter folgendem Link verfügbar: Korrelationsfunktion

Ein- und Ausgänge

Die Ein- und Ausgangspuffer entsprechen einer der folgenden Definitionen (input / output shape). Die variablen Parameter sind Teil des Bausteineingangs stInitPars. Für die Verarbeitung eines einzelnen Kanals (nChannels = 1) gilt:

MultiArray im

Elementtyp

Dimensionen

Dimensionsgrößen

input stream A

LREAL

1

not specified*

input stream B

LREAL

1

not specified*

output stream

LREAL

1

1+(nPositiveShift+nNegativeShift)/nStepsize

Bei der Verarbeitung mehrerer Kanäle (nChannels > 1) gilt:

MultiArray im

Elementtyp

Dimensionen

Dimensionsgrößen

input stream A

LREAL

2

nChannels x not specified*

input stream B

LREAL

1

not specified*

output stream

LREAL

2

nChannels x (1+(nPositiveShift+nNegativeShift)/nStepsize)

oder für die paarweise Berechnung der Korrelationskoeffizienten:

MultiArray im

Elementtyp

Dimensionen

Dimensionsgrößen

input stream A

LREAL

2

nChannels x not specified*

input stream B

LREAL

2

nChannels x  not specified*

output stream

LREAL

2

nChannels x (1+(nPositiveShift+nNegativeShift)/nStepsize)

Eingangsparameter

Die Eingangsparameter dieses Bausteins repräsentieren Initialisierungsparameter und müssen bereits bei der Deklaration der FB Instanz zugewiesen werden! (Alternativ: Init()-Methode). Sie dürfen nur einmalig zugewiesen werden. Eine Änderung zur Laufzeit ist nicht möglich.

VAR_INPUT
    stInitPars       : ST_CM_Correlation_InitPars;         // init parameter
    nOwnID           : UDINT;                              // ID for this FB instance
    aDestIDs         : ARRAY[1..cCMA_MaxDest] OF UDINT;    // IDs of destinations for output
    nResultBuffers   : UDINT := 4;                         // number of MultiArrays which should be initialized for results (0 for no initialization)
    tTransferTimeout : LTIME := LTIME#500US;               // timeout checking off during access to inter-task FIFOs
END_VAR

Ausgangsparameter

VAR_OUTPUT
    bError         : BOOL;                           // TRUE if an error occurs. Reset by next method call.
    hrErrorCode    : HRESULT;                        // '< 0' = error; '> 0' = info; '0' = no error/info
    ipErrorMessage : I_TcMessage := fbErrorMessage;  // Shows detailed information about occurred errors, warnings and more.
    nCntResults    : ULINT;                          // Counts outgoing results (MultiArrays were calculated and sent to transfer tray).
END_VAR
  • bError: Der Ausgang ist TRUE, falls ein Fehler auftritt.
  • hrErrorCode: Falls ein Fehler auftritt, wird ein entsprechender Fehlercode vom Typ HRESULT ausgegeben. Mögliche Werte sind in der Liste der Fehlercodes erläutert.
  • ipErrorMessage: Beinhaltet nähere Informationen zum aktuellen Rückgabewert. Siehe hierzu den Abschnitt Fehlerbeschreibung und Information. Für diesen speziellen Schnittstellenzeiger ist intern sichergestellt, dass er immer gültig/zugewiesen ist.

Methoden

Call():

Die Methode wird jeden Zyklus aufgerufen, um den Algorithmus auf die aktuellen Eingangsdaten anzuwenden. Der Baustein wartet auf Eingangsdaten, sofern die Methode weder neue Ergebnisse noch einen Fehler angibt. Dies ist ein reguläres Verhalten im Ablauf der Analysekette.

  • Rückgabewert: Falls ein Fehler auftritt, wird ein entsprechender Fehlercode vom Typ HRESULT ausgegeben. Mögliche Werte sind in der Liste der Fehlercodes erläutert.
METHOD Call : HRESULT
VAR_OUTPUT
    bNewResult   : BOOL;       // TRUE every time when outgoing MultiArray was calculated and sent to transfer tray.
    bError       : BOOL;       // TRUE if an error occurs.
    hrErrorCode  : HRESULT;    // '< 0' = error; '> 0' = info; '0' = no error/info
END_VAR
  • bError: Der Ausgang ist TRUE, falls ein Fehler auftritt.
  • hrErrorCode: Falls ein Fehler auftritt, wird ein entsprechender Fehlercode vom Typ HRESULT ausgegeben. Mögliche Werte sind in der Liste der Fehlercodes erläutert. Dieser Ausgang ist identisch zum Rückgabewert der Methode.
FB_CMA_Correlation 7:

Falls ein Timeout eintritt oder kein MultiArray Puffer für das Ergebnis verfügbar ist, so gehen weder die Eingangsdaten noch die Ergebnisdaten verloren. Sie werden beim nächsten Aufruf weitergeleitet.

Configure():

Mit dem Aufruf dieser Methode können die Skalierung der Korrelationskoeffizienten (Initialparameter eCorrelationMode) sowie das zu Grunde liegende Berechnungsfenster (Initialparameter eWindowMode) zur Laufzeit verändert werden.

Das entsprechende SPS Array muss wie folgt definiert sein. Für eine erneute Konfiguration mit einem anderen Satz an Argumenten kann die Configure() Methode ebenfalls genutzt werden.

METHOD Configure : HRESULT
VAR_INPUT
    pArg     : PVOID;    // pointer to array of arguments
    nArgSize : UDINT;    // size of arguments buffer in bytes 
END_VAR

Die Eingangspuffer entsprechen einer der folgenden Definitionen (input shape). Die variablen Parameter sind Teil des Bausteineingangs stInitPars.

Varianten

Eingangspuffer (MultiArray input stream)
Elementtyp, Dimensionsanzahl, Dimensionsgrößen

Identische Konfiguration aller Kanäle

UDINT, 1,
2

Kanalspezifische Konfiguration
(nChannels > 1)

UDINT, 2,
nChannels x 2

Init():

Üblicherweise ist diese Methode in einer Condition Monitoring Applikation nicht notwendig. Sie bietet eine Alternative zur Bausteininitialisierung. Die Init() Methode darf nur während der Initialisierungsphase der SPS aufgerufen werden. Sie kann nicht während der Laufzeit verwendet werden. Es sei auf die Verwendung von einer FB_init Methode oder dem Attribut 'call_after_init' hingewiesen (siehe TwinCAT SPS Referenz). Hiermit wird zudem die Bausteinkapselung erleichtert.

Die Eingangsparameter der Bausteininstanz dürfen nicht bei der Deklaration zugewiesen werden, falls die Initialisierung mit der Init() Methode erfolgen soll.

  • Rückgabewert: Falls ein Fehler auftritt, wird ein entsprechender Fehlercode vom Typ HRESULT ausgegeben. Mögliche Werte sind in der Liste der Fehlercodes erläutert.
METHOD Init : HRESULT
VAR_INPUT
    stInitPars     : ST_CM_Correlation_InitPars;         // init parameter
    nOwnID         UDINT;                                // ID for this FB instance
    aDestIDs       : ARRAY[1..cCMA_MaxDest] OF UDINT;    // IDs of destinations for output
    nResultBuffers : UDINT := 4;                         // number of MultiArrays which should be initialized for results (0 for no initialization)
END_VAR

ResetData():

Die Methode löscht alle bereits hinzugefügten Datensätze, vgl. Gedächtniseigenschaft des Funktionsbausteins. Wird nach einem ResetData() die Call()-Methode wieder aufgerufen, muss entsprechend erst der interne Speicher wieder aufgefüllt werden um ein gültiges Ergebnis zu berechnen.

  • Rückgabewert: Falls ein Fehler auftritt, wird ein entsprechender Fehlercode vom Typ HRESULT ausgegeben. Mögliche Werte sind in der Liste der Fehlercodes erläutert.
METHOD ResetData : HRESULT
VAR_INPUT
END_VAR

PassInputs():

Solange eine FB_CMA_Source Instanz aufgerufen wird und somit Signaldaten zu einem Zielblock übertragen werden, müssen wie in der API SPS Referenz erläutert alle weiteren Blöcke der Analysekette zyklisch aufgerufen werden.
Manchmal ist es sinnvoll, einen Algorithmus für eine bestimmte Zeit nicht auszuführen. Beispielsweise sollten manche Algorithmen nur nach vorherigem Training bzw. Konfiguration ausgeführt werden. Zwar muss der Funktionsbaustein dennoch zyklisch aufgerufen werden, aber es ist ausreichend, wenn die am Baustein ankommenden Daten im Kommunikationsring weitergeleitet werden. Dies geschieht mittels der Methode PassInputs() anstelle der Methode Call(). Hierbei wird der Algorithmus selbst nicht aufgerufen und entsprechend kein Ergebnis berechnet sowie kein Ausgangspuffer generiert.

  • Rückgabewert: Falls ein Fehler auftritt, wird ein entsprechender Fehlercode vom Typ HRESULT ausgegeben. Mögliche Werte sind in der Liste der Fehlercodes erläutert.
METHOD PassInputs : HRESULT
VAR_INPUT
END_VAR

GetChannelErrors():

Die Methode ermöglicht die Abfrage einer Liste der kanalspezifischen Rückgabewerte bei der Verarbeitung mehrerer Kanäle (nChannels > 1). Ein Aufruf ist sinnvoll für den Fall, dass der Rückgabewert des Bausteins einem der Werte eCM_InfRTime_AmbiguousChannelResults oder eCM_ErrRTime_ErrornousChannelResults entspricht.

  • Rückgabewert: Information über den Ausleseprozess der Liste der Fehlercodes. Der Wert wird auf TRUE gesetzt, falls die Abfrage erfolgreich war, FALSE anderenfalls.

    METHOD GetChannelErrors : BOOL
VAR_IN_OUT
    aChannelErrors : ARRAY[*] OF HRESULT;
END_VAR
  • aChannelErrors: Fehlerliste vom Typ HRESULT der Länge nChannels.

Voraussetzungen

Entwicklungsumgebung

Zielplattform

Einzubindende SPS-Bibliotheken

TwinCAT v3.1.4022.25

PC or CX (x86, x64)

Tc3_CM, Tc3_CM_Base