Why is xcorr getting this very simple case "wrong"?

I'm sure it's just me, but I have
a = [1 2 3 4 5 4 3 2 1];
b = [0 1 2 3 4 5 4 3 2];
[c,lags] = xcorr(detrend(a,0), detrend(b,0), 'normalized');
Then i try
lags(c == max(c))
%ans 0
Why doesn't xcorr believe the lag should be 1 sample?

 Respuesta aceptada

the cyclist
the cyclist el 12 de Feb. de 2021
I didn't figure this out with certainty, but if you take a look at the "More About" section of the documentation for xcorr, it mentions that xcorr can only approximate the true cross-correlation if an infinite-length signal, due to the finite length of the input vector. So, I think what is happening is that the end effects are overwhelming the "true" lag result.
I confirmed this by using
a = repmat(a,5,1);
b = repmat(b,5,1);
to get more extended signal, and you do see the lag=-1 dominate.
FYI, using
stem(lags,c)
is a good way to visualize the results.

2 comentarios

Thank you @the cyclist for the insight. Did you actually mean
a = repmat(a,1,5);
b = repmat(b,1,5);
to get horizontally extended signal? Thanks!
the cyclist
the cyclist el 12 de Sept. de 2021
Yes I did.

Iniciar sesión para comentar.

Más respuestas (0)

Productos

Versión

R2020a

Preguntada:

el 11 de Feb. de 2021

Comentada:

el 12 de Sept. de 2021

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by