CCF (FPScript)
Berechnet die Kreuzkorrelationsfunktion zweier Signale. Wird verwendet zur Beschreibung der Ähnlichkeit zweier Signale.
Syntax
CCF(Signal1, Signal2 [ , Mode = CORRELATIONPRODUCT_NONCIRCULAR ])
Die Syntax der CCF-Funktion besteht aus folgenden Teilen:
Teil |
Beschreibung |
||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Signal1 |
Das Signal, dessen Korrelation mit dem zweiten Signal berechnet wird. Erlaubte Datenstrukturen sind Datenreihe, Datenmatrix, Signal und Signalreihe. Es sind alle numerischen Datentypen erlaubt. Ungültige Werte sind in diesem Argument nicht zulässig. Für die X-Komponente gelten zusätzliche Beschränkungen.Die Werte müssen einen konstanten positiven Abstand haben. Bei komplexen Datentypen erfolgt eine Betragsbildung. Ist das Argument eine Liste, dann wird die Funktion für jedes Element der Liste ausgeführt und das Ergebnis ist ebenfalls eine Liste. |
||||||||||||||
Signal2 |
Der Signal, dessen Korrelation mit dem ersten Signal berechnet wird. Erlaubte Datenstrukturen sind Datenreihe, Datenmatrix, Signal und Signalreihe. Es sind alle numerischen Datentypen erlaubt. Ungültige Werte sind in diesem Argument nicht zulässig. Für die X-Komponente gelten zusätzliche Beschränkungen.Die Werte müssen einen konstanten positiven Abstand haben. Bei komplexen Datentypen erfolgt eine Betragsbildung. Ist das Argument eine Liste, dann wird die Funktion für jedes Element der Liste ausgeführt und das Ergebnis ist ebenfalls eine Liste. |
||||||||||||||
Mode |
Gibt den Berechnungsmodus an. Das Argument Mode kann folgende Werte haben:
Ist das Argument eine Liste, dann wird deren erstes Element entnommen. Ist dies wieder eine Liste, dann wird der Vorgang wiederholt. Wenn das Argument nicht angegeben wird, wird es auf den Vorgabewert CORRELATIONPRODUCT_NONCIRCULAR gesetzt. |
Anmerkungen
Das Ergebnis ist immer vom Datentyp 64-Bit Fließkomma.
Die Einheit des Ergebnisses ist gleich dem Produkt der Einheiten von Signal1 und Signal2. Die Kreuzkorrelation für zwei Datenreihen s und g ist definiert als:
mit dem Korrelationsprodukt:
und N, der Anzahl der Werte in s und g.
Die Werte der normierten Kreuzkorrelation liegen zwischen -1 und +1. Die normierte Kreuzkorrelation berechnet sich hierbei als Quotient zwischen Kreuzkorrelation und dem Quadrat des RMS-Wertes des Eingangsdatensatzes.
Die Berechnung erfolgt in allen Fällen im Frequenzbereich nach folgender Formel:
IRFFTn(*FFTn(Signal1) * FFTn(Signal2))
Bei zweidimensionalen Argumenten erfolgt die Berechnung spaltenweise und das Ergebnis ist ebenfalls zweidimensional. Hat eines der Argumente eine X-Komponente, so gilt dies auch für das Ergebnis. Das Ergebnis enthält dann den Zeitversatz τ der Kreuzkorrelationsfunktion. Bemerkung: Falls das andere Argument keine X-Komponente besitzt, so wird für dieses die gleiche Abtastung wie für das Argument mit X-Komponente angenommen.
Bei der zirkulären Kreuzkorrelation erfolgt die Berechnung unter der Annahme, dass in Signal1 und Signal2 eine oder mehrere vollständige Perioden der zu analysierenden Signale abgelegt sind. In diesem Fall müssen die Zeilenanzahlen von Signal1 und Signal2 übereinstimmen.
Die nicht-zirkuläre Kreuzkorrelation basiert auf der Annahme, dass die Signale außerhalb der durch die Datensätze Signal1 und Signal2 abgedeckten Ausschnitte den Betrag Null haben. Vor dem Übergang in den Frequenzbereich wird deshalb eine ausreichende Anzahl von Nullen an die Datensätze angehängt. Die Kreuzkorrelationsfunktion wird für alle τ berechnet, für die diese einen Wert ungleich 0 haben kann, d. h. für die noch eine Überlappung der beiden Signale vorliegt.
Verfügbarkeit
FlexPro Basic, Professional, Developer Suite
Beispiele
Dim digital1 = 0#50
digital1[ValuesAboveLevel(Noise(digital1, NOISE_UNIFORM, 0), 0, EVENT_INDEX)] = 1
Dim digital2 = 0#50
digital2[ValuesAboveLevel(Noise(digital2, NOISE_UNIFORM, 0), 0, EVENT_INDEX)] = 1
Dim d1 = 0#7 : digital1[0,-8]
Dim d2 = 0#11 : digital2[0,-12]
GlobalMaximum(CCF(digital1, d1 + d2, CORRELATIONPRODUCT_CIRCULAR))// = 7
GlobalMaximum(CCF(digital2, d1 + d2, CORRELATIONPRODUCT_CIRCULAR))// = 11
In diesem Beispiel wird demonstriert, wie mithilfe der CCF-Funktion die Zeitverzögerung zwischen Sende- und Empfangssignal ermittelt werden kann. Das Empfangssignal ist dabei die Summe aus zwei Digitalsignalen mit unterschiedlichen Zeitverzögerungen. Die Position, an der beim zirkulären Kreuzkorrelationsprodukt zwischen Sende- und Empfangssignal das Maximum auftritt, entspricht der Zeitverzögerung des Sendesignals.
Siehe auch
Literatur
[1] "Oppenheim, A. V. and Schafer, R. W.": "Discrete-Time Signal Processing, 2nd Edition", Seite 743 - 48. "Prentice Hall, New Jersey",1999.ISBN 0-13-754920-2.
[2] "H. D. Lüke": "Signalübertragung", Seite 79 - 81. "Springer-Verlag Berlin, Heidelberg, New York",1985.ISBN 3-540-15526-0.