Cross Validated is a question and answer site for people interested in statistics, machine learning, data analysis, data mining, and data visualization. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I am trying to measure the similarity between two signals, i.e. how identical they are. A complete overlap (two lines forming a single line) should give me a value of 1, the greater the distance, between the lines and the less similar the overall trend, the closer the value should go to 0.

I have tried measuring standard deviation $\sigma$ and different variants of correlation $r$ using MATLAB functions std(), xcorr() and corr2(). They did not do the trick, as ,e.g. $\sigma_{\phi_{A}}$ was $>$ than $\sigma_{\phi_{B}}$ (see figure below).

I was thinking about using some sort of weighted average between $\sigma$ and $r$. Another possibility would be to measure the difference between areas under the curves (but then different intersecting graphs could have the same area).

There are related questions to this, but they are either: (i) discussing the generic concept of similarity or (ii) suggest using xcorr() (different variants of which did not work for me).

Link to an image of two signals

share|improve this question
up vote 2 down vote accepted

One obvious thing to do would be to use the L2 distance between the two curves, and then transform it to get the range you want:


However, like you say, the issue of determining what you mean by 'similar' curves is not a simple problem. In fact, using the $L^2$ distance has issues in that it leads to very low 'prediction power' due to the curse of dimensionality.

Have a look at this paper (it is very readable) for some nice simple examples:

share|improve this answer
Thank you. The L2 norm seems to be working. It would have been nice to see some discussion of why other methods were not suitable. – A.L. Verminburger Jun 4 '13 at 13:49
I can't speak authoritatively about the particular things you tried, so won't try to (very interested to read an answer from someone who can!). As general comment though, they probably weren't suitable because they didn't match what you were imagining as describing 'similar' curves. I'd again suggest the paper I've linked to, it does a really nice job of explaining this. – thebigdog Jun 4 '13 at 23:17

Use Dynamic Time Warping if your signals are not too long. DTW is used in various fields like signature matching and speech recognition.

Download MATLAB's DTW library here.

share|improve this answer
Can you elaborate on how DTW works & why it would be a solution for the OP? – gung May 7 '15 at 22:59

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.