cross-correlation of two signal always shows unexpected 0 lag

YANAN ZHU (view profile)

on 20 Nov 2018
Latest activity Commented on by Honglei Chen

on 20 Nov 2018

Honglei Chen (view profile)

Hi,everyone, I got a very strange issue.
b is a signal of 251 samples. c is got by shifting b by 5 sample. (b and c are attached).
But when I do xcorr on b and c, the max correlation always occurs at 0 lag. which I do not understand. Can someone help?
Below is my code. Thank you.
figure;
plot(b);hold on;
plot(c);
[r,lag] = xcorr(b,c,'coeff');
[m, i_max]=max(r);
shift=lag(i_max);
% plot(lag,r);
display(shift);

R2018a

Honglei Chen (view profile)

on 20 Nov 2018

You may want to try
[r,lag] = xcorr(b-mean(b),c-mean(c),'coeff');
HTH

YANAN ZHU

YANAN ZHU (view profile)

on 20 Nov 2018
Thank you so much! It works! Can I know what really happened under the hood after subtracting the mean?
Honglei Chen

Honglei Chen (view profile)

on 20 Nov 2018
Since your goal is to look for similarity between two signals, I think in theory the cross correlation really requires both signal to be zero mean. Otherwise, the DC component will affect your result. For example, let's say two signals are uncorrelated and have all positive values. In theory, the correlation coefficient should be 0. However, without removing the means, the result will always be positive.
HTH