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?

 채택된 답변

the cyclist
the cyclist 2021년 2월 12일

0 개 추천

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

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!
Yes I did.

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

제품

릴리스

R2020a

질문:

2021년 2월 11일

댓글:

2021년 9월 12일

Community Treasure Hunt

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

Start Hunting!

Translated by