Hi NG, I have a problem regarding normalization when performing cross-correlation: I have a relatively short signal/waveform ("A") which I'm cross-correlating with a longer timeseries ("B") to look for this waveform. Since there are large fluctuations in B, I have decided to apply some sort of normalization scheme to both A and B. So, for A I divided all the samples with the squareroot of the average power of the signal, i.e. sqrt(sum(A(i)^2)/N). As for B, I do the same thing FOR EACH WINDOW OF "B" THAT "A" PASSES IN THE CORRELATION. That is, before the windows are multiplied and summed in the correlation, the segment of B in question undergoes the same treatment as described above. The result looks very strange, and is definately not correct. Do you see any flaws in my method? Thanks! Best, M.L.

# Normalization and cross-correlation - what am I doing wrong?

Started by ●February 23, 2006

Reply by ●February 23, 20062006-02-23

Normalized correlation is: sum(A(i)B(i))/sqrt(sum(A(i)^2) sum(B(i)^2)) Where all summations are over the same number of elements N (regardless of the actual length of each signal, which may have elements that do not participate in the correlation). M.L. wrote:> Hi NG, > > I have a problem regarding normalization when performing > cross-correlation: > > I have a relatively short signal/waveform ("A") which I'm > cross-correlating with a longer timeseries ("B") to look for this > waveform. Since there are large fluctuations in B, I have decided to > apply some sort of normalization scheme to both A and B. So, for A I > divided all the samples with the squareroot of the average power of the > signal, i.e. sqrt(sum(A(i)^2)/N). As for B, I do the same thing FOR > EACH WINDOW OF "B" THAT "A" PASSES IN THE CORRELATION. That is, before > the windows are multiplied and summed in the correlation, the segment > of B in question undergoes the same treatment as described above. > > The result looks very strange, and is definately not correct. Do you > see any flaws in my method? > > > Thanks! > > Best, > > M.L. >

Reply by ●February 23, 20062006-02-23

the description of your problem is not easy to understand. why normalize with power? I would do it like this a_new=a/max(a); b_new=b/max(b); cross-correlate a_new with b_new and look for peak(s) in cross-correlation. can you upload screenshots to some webpage so we can see why it looks "strange"? which language are you programming in?

Reply by ●February 23, 20062006-02-23

Hi, Thanks - both of you. I changed my code (MatLab by the way) to use the formula stated in twains post and now it seems to work much better. I think my mistake was that I divided the sqrt(power) with the number of samples in the window. Apart from that, I had the same calculation.. Thanks! I appreciate it.. Best, M.L.