NaN result on xcorr?

Hello everyone. I am trying to use both xcorr(var1,var2,0,'coeff' and corrcoef in order to get a correlation coefficient of two vectors (I want to see how "similar" they are).
The thing is, sometimes I need to insert a vector of zeros into that calculation and the I get NaN as a result.
It is very important for me to be able to correlate between a vector of zeros and a vector of really small numbers ( both of same length, of course), and get a relatively good correlation between the two (relative to a vector of ones with a vector of small numbers, for example).

 Akzeptierte Antwort

Wayne King
Wayne King am 25 Sep. 2012
Bearbeitet: Wayne King am 25 Sep. 2012

0 Stimmen

If you have a a vector of zeros, then using the 'coeff' option will give you NaNs because you are normalizing by the product of the input norms. The norm of the zero vector is 0 (it is the only vector with zero norm by the definition of a norm).
So you have a vector of 0/0
You can use the 'unbiased', 'biased', or 'none' options (the last one does not need to be specified), but you will get a vector of zeros of course.
If you cross correlate any vector with the zero vector, the answer must be a vector of zeros. How can it be anything else? The cross correlation involves an element-by-element product and sum. All your products must be zero if one of the inputs is the zero vector.

3 Kommentare

Guy
Guy am 25 Sep. 2012
Bearbeitet: Guy am 25 Sep. 2012
Hey Wayne,
Thank you for your answer, I understand that maybe the procedure of the correlation function is not suitable in my case.
Here is a brief of what I am dealing with:
I am receiving (to a function) a sequence of pairs of vectors that represent points of lines, and so I need to correlate each one of them with a previously known line vector and take the best fit every time.
The problem is that sometimes one of the pairs is a vector of zeros, and, alas, in some occasions it is the best fit. What can I do? I must detect it somehow..
Any ideas? What would be the best alternative?
Wayne King
Wayne King am 25 Sep. 2012
If these are just points on a line, what not just orthogonally project each line onto the reference line?; that will give you the best approximation in the minimum squared error (2-norm) sense
Guy
Guy am 25 Sep. 2012
Can you detail a little further? How do I do that?
Also forgot to mention, I figured the problem with the correlation might be a devision by zero, so I transferred zero vectors into 'eps' vectors, meaning that I gave them some insignificant value that will not have any affect on the desirable result. The outcome then was -1, which I could not understand because I correlated it with a vector of small values as well. Anyway, this did not work for me but maybe your idea will?

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Community Treasure Hunt

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

Start Hunting!

Translated by