Table of Contents
Cross Correlation
The Cross_Correlation command can be used to determine if there is a relationship between two signals when one is shifted relative to the other. This command can also be used to calculate the self-similarity of a signal with a time-delayed version of itself. In this case the command calculates the signal's autocorrelation.
More about calculating cross-correlations can be found on Wikipedia and on Paul Bourke's website.
Pipeline Command
The Cross_Correlation command can be found in the Pipeline Workshop within the Signal Process folder as so:
Cross_Correlation ! /SIGNAL_OWNER1= /SIGNAL_TYPE1= /SIGNAL_FOLDER1= /SIGNAL_NAME1= ! /SIGNAL_COMPONENT1= ! /SIGNAL_OWNER2= /SIGNAL_TYPE2= /SIGNAL_FOLDER2= /SIGNAL_NAME2= ! /SIGNAL_COMPONENT2= ! /RESULT_OWNER= ! /RESULT_FOLDER= PROCESSED /RESULT_NAME= ! /MAX_DELAY=10 ! /DATA_WRAP=FALSE ;
Command Parameters
The parameters that can be used to control the command are as follows:
| Signal Owner | The name of the file containing the given signal |
| Signal Type | The type of signal (force, target, link_model_based, etc.) |
| Signal Folder | The name of the folder containing the given signal |
| Signal Component | Which component of the signal is used |
| Result Owner | The name of the file that will contain the result |
| Result Folder | The name of the folder containing the resulting signal(s) |
| Result Name | The name of the resulting signal |
| Max Delay | Indicates the number of frames the signal will be shifted to determine the correlation |
| Data Wrap | True or False: Whether the signal should be considered to loop |
Understand the parameters of the Cross_Correlation command:
SIGNAL1
The /SIGNAL_OWNER1, /SIGNAL_TYPE1, /SIGNAL_FOLDER1, and /SIGNAL_NAME1 parameters allow the user to specify which signal (by file, data type, folder, and name) should be used as the first signal for the cross-correlation calculation.
SIGNAL2
Similarly, the /SIGNAL_OWNER2, /SIGNAL_TYPE2, /SIGNAL_FOLDER2, and /SIGNAL_NAME2 parameters allow the user to specify the second signal for the cross-correlation calculation.
RESULT
The /RESULT_OWNER, /RESULT_FOLDER, and /RESULT_NAME parameters allow the user to specify where the result of the cross-correlation calculation should be saved.
- The result's data type the DERIVED folder.
- The result's folder defaults to being the PROCESSED folder.
MAX_DELAY
The /MAX_DELAY parameter indicates the number of frames the signal will be shifted to determine the correlation. This parameter can be considered as the “window” of frames to be compared across the signal.
The size of the resulting signal is determined as twice the value of the /MAX_DELAY plus one, e.g., a delay of 10 will result in 21 values (-10 to 10). A result at -10 will indicate that Signal ONE was shifted -10 frames relative to Signal TWO. A result at 10 will indicate that Signal ONE was shifted +10 frames relative to Signal TWO.
Setting the /MAX_DELAY parameter to a value that is too small will likely be inadequate to capture the correlation of two signals. Setting the /MAX_DELAY parameter to be the length of the two signals will cover all possible correlations. To further review the shift between the two signals, an example script and power point can be downloaded here.
DATA_WRAP
The /DATA_WRAP parameter is a binary flag indicating whether the signal should be considered to loop.
With no Data Wrap and a MAX_DELAY of half the length of the signal, the first and last frames of the resulting signal will only be comparing half the signal. With Data Wrap, all frames of the resulting signal will be a correlation resulting from comparing all frames of the two signals.
Dialog
Example: Find the Frame Offset with Highest Correlation
If you want just the frame offset with the highest correlation, you could use the sample script below to calculate the cross-correlation between the two signals, sort these cross-correlation values, and extract the shift responsible for the largest cross-correlation.
Cross_Correlation ! /SIGNAL_OWNER1= /SIGNAL_TYPE1=DERIVED /SIGNAL_FOLDER1=COP_TEST /SIGNAL_NAME1=LCOP_MAG_ORIGINAL_SIGNAL /SIGNAL_COMPONENT1=X ! /SIGNAL_OWNER2= /SIGNAL_TYPE2=ANALOG /SIGNAL_FOLDER2=PROCESSED /SIGNAL_NAME2=Force.Fz2 /SIGNAL_COMPONENT2=X ! /RESULT_OWNER= ! /RESULT_FOLDER=PROCESSED /RESULT_NAME=CrossCorrResult /MAX_DELAY=100 ! /DATA_WRAP=FALSE ; Evaluate_Expression /EXPRESSION=SORT(DERIVED::PROCESSED::CrossCorrResult, -1, 2) ! /SIGNAL_TYPES= ! /SIGNAL_FOLDER=ORIGINAL ! /SIGNAL_NAMES= /RESULT_TYPES=DERIVED /RESULT_FOLDERS=PROCESSED /RESULT_NAME=CrossCorrResult_Sorted ! /APPLY_AS_SUFFIX_TO_SIGNAL_NAME=FALSE ; Metric_Explicit ! /RESULT_METRIC_FOLDER=PROCESSED /RESULT_METRIC_NAME=CrossCorrResult /METRIC_VALUE=DERIVED::PROCESSED::CrossCorrResult_Sorted[1,1] ;

