I\'m writing a program in C++ but using data from matlab involving Cross Correlation. I understand that when I do a correlation on 2 sets of data it gives me a single correl
You probably want corrcoef, not xcorr
.
To be clear about several concepts.
Cross-correlation vs. cross-covariance. The main difference is that cross-covariance normalize the data by subtracting the mean.
cross-covariance vs. normalized cross-covariance. The later one is divided by the standard deviation of the the input.
normalized cross-covariance and correlation coefficient. The later one is the special case of the former one at delay=0.
In Matlab xcorr(x,x)
gives auto-correlation of signal x. It is not scaled, it's simply a vector of inner products of the signal with shifted versions of itself. In order to scale it, use xcorr(x,x,'coeff')
. This command will scale your auto-correlation by signal's energy (in other words it will divide each coefficient by value of coefficient at zero lag). Note that when you're doing cross-correlation, xcorr(x,y'coeff')
, you will not get a value of 1 and zero lag, because the scaling is performed differently. It will only be 1 if you're correlating a signal with itself (I wish SO supported math formulas so that I could write it out for you).