Forums

cross correlation sound

Started by maz_p5 August 24, 2008
>On Aug 27, 6:53=A0am, "maz_p5" <maz...@hotmail.com> wrote: >> >>On Aug 25, 5:04=3DA0pm, kronec...@yahoo.co.uk wrote: >> >> >>> You know from the ccor in samples. Suppose the peak occurs at 5 >> sample >> >>> intervals. Then the TDOA is 5*Ts where Ts is the sampling interval
of
>> >>> your original data. It could also be -5 steps though so watch the >> >>> sign. >> >> >>> K.- Hide quoted text - >> >> >>> - Show quoted text - >> >> >>Thanks, K. =A0I hope I=3D92m not adding to the guy=3D92s confusion,
but=
> cross >> >>correlation isn=3D92t the easiest thing for a beginner to figure out.
=
>=A0I >> >>started writing a response to his last question (obviously, I=3D92m
a
>> >>little late), and rather than throw it away, I=3D92ll post it
anyways.
>> >> >>After doing the cross correlation, you're back in the time domain. >> >>You had a sample rate, so if the peak is displaced by 'x' number of >> >>samples from the zero point (or, in your case, since you're using >> >>MATLAB, the 1 point), you can directly determine the delay.
=A0Consider
>> >>a pure sinusoidal signal. =A0If the peak is displaced by 5 points to
th=
>e >> >>right of the 0 point, it says that one waveform is delayed by 5
sample
>> >>times from the other. =A0If the peak is displaced 5 points to the
left
>> >>of the 0 point (it=3D92s in the upper half of the inverse FFT
outputs),
>> it >> >>says that the other waveform is delayed by 5 sample times. =A0So (for
a=
>n >> >>FFT of even N), if the peak is between points 0 and N/2, then
that=3D92=
>s >> >>your time delay in sample times. =A0If the peak is from N/2 + 1 to N
-
>> >>1, then the delay would be counted from there up to the 0 point. >> >>Seems simple enough. =A0Perhaps you're being overly confused by the >> >>sound speed, sensor displacement, etc. =A0The sensor displacement
would
>> >>come into play if they are, say, a multiple number of wavelengths >> >>apart. =A0In that case, the actual physical delay would be the >> >>displacement of the peak plus some multiple of N sample times. =A0And
i=
>f >> >>you=3D92re using some kind of short time impulse type signal, you
might
>> >>not get any result (e.g.: the waveform hits the second sensor 10 >> >>seconds after hitting the first sensor, but the time span of the >> >>inverse FFT is only 1 second). >> >> >Hi, >> >Thank you but I seriously cant get the hang of what you are trying to >> say. >> >I am an amateur in MATLAB and hence i am getting confused. I also
think
>> >that its not necessary to consider the things you are saying. >> >> >My question is simple - how do i calculate the delay between the
peaks
>> of >> >2 different signals? (both of my signals are just simple horizontal >> lines >> >with a peak at a particular sample i.e noise is almost null. The
signals
>> >have just one peak in them, both arriving at different time. The rest
of
>> >the signal is almost close to a straight line. The signals are
captured
>> at >> >44000Hz and the total size of both the signals is 431020). >> >> >I hope someone can help me now with a simple solution. If possible >> please >> >try and explain with a code. Thank you. >> >> Also lets say for eg, >> >> x=3Drand(1000,1); >> y=3Drand(1000,1); >> x(500)=3D40; %peak >> y(200)=3D35; %peak >> z=3Dxcorr(x,y); >> plot(z) >> >> You will see a peak at 1300. Is this the delay =3D 1300 - length of
data
>> i.e. delay between the two signals =3D 300. is this the right way?-
Hide =
>quoted text - >> >> - Show quoted text - > >Well, I use C++, not MATLAB, but I think that what you're doing is: >generate 1000 points for both x and y; set point 500 in x to 40 and >point 200 in y to 35; cross correlate x and y; plot results. For two >N point inputs, xcorr in MATLAB gives you 2*N outputs, and it provides >them in a c[m] =3D Rxy[m-N], m=3D1, 2, ... 2N-1 format, so the first
1000
>points are actually the 'left side' results where waveform y is >delayed from waveform x. The next 1000 points are the 'right side' of >the results, where waveform x is delayed from waveform y. Since your >peak is on the right side (at 1300), it says that your x waveform is >delayed by 300 sample times from the y waveform. That's exactly where >you would expect it to be. Just treat the first 1000 output points as >the left side results (waveform y delayed from waveform x) and the >second 1000 output points as the right side (waveform x delayed from >waveform y). The N point is the 'no delay between the inputs' point. > >With your inputs as they are, the output tells you that the x waveform >is 300 sample times later than the y waveform. I think if you made >your inputs x[200] =3D 40 and y[500] =3D 35, the peak should show up at >output point 700, based on my interpretation of the MATLAB >documentation (point 700 would be the 700-1000 result, which is >-300). It would tell you that y is now 300 sample times later than >x. You might want to check that to see if my interpretation of the >documentation is correct. > >Good job, maz. Now all you've got to do is generate all the delays >needed for your 4 sensor problem and try to solve for the (x,y) >position of the source. And be careful of the fact that your sensor >spacing may be some multiple of the wavelength, which could cause a >problem (I couldn't tell in physical units what your sensor spacing >was from your original post). You could also turn time delays into >angles and try solving things that way. >
Hi, Thanks.. Seems I am getting a little closer now. Can you pass me your email id, so that I can send you my .wav files captured from the microphones so that we can cross-check our delay results. Please, if you do not mind. Thanks.
>On Aug 27, 6:53=A0am, "maz_p5" <maz...@hotmail.com> wrote: >> >>On Aug 25, 5:04=3DA0pm, kronec...@yahoo.co.uk wrote: >> >> >>> You know from the ccor in samples. Suppose the peak occurs at 5 >> sample >> >>> intervals. Then the TDOA is 5*Ts where Ts is the sampling interval
of
>> >>> your original data. It could also be -5 steps though so watch the >> >>> sign. >> >> >>> K.- Hide quoted text - >> >> >>> - Show quoted text - >> >> >>Thanks, K. =A0I hope I=3D92m not adding to the guy=3D92s confusion,
but=
> cross >> >>correlation isn=3D92t the easiest thing for a beginner to figure out.
=
>=A0I >> >>started writing a response to his last question (obviously, I=3D92m
a
>> >>little late), and rather than throw it away, I=3D92ll post it
anyways.
>> >> >>After doing the cross correlation, you're back in the time domain. >> >>You had a sample rate, so if the peak is displaced by 'x' number of >> >>samples from the zero point (or, in your case, since you're using >> >>MATLAB, the 1 point), you can directly determine the delay.
=A0Consider
>> >>a pure sinusoidal signal. =A0If the peak is displaced by 5 points to
th=
>e >> >>right of the 0 point, it says that one waveform is delayed by 5
sample
>> >>times from the other. =A0If the peak is displaced 5 points to the
left
>> >>of the 0 point (it=3D92s in the upper half of the inverse FFT
outputs),
>> it >> >>says that the other waveform is delayed by 5 sample times. =A0So (for
a=
>n >> >>FFT of even N), if the peak is between points 0 and N/2, then
that=3D92=
>s >> >>your time delay in sample times. =A0If the peak is from N/2 + 1 to N
-
>> >>1, then the delay would be counted from there up to the 0 point. >> >>Seems simple enough. =A0Perhaps you're being overly confused by the >> >>sound speed, sensor displacement, etc. =A0The sensor displacement
would
>> >>come into play if they are, say, a multiple number of wavelengths >> >>apart. =A0In that case, the actual physical delay would be the >> >>displacement of the peak plus some multiple of N sample times. =A0And
i=
>f >> >>you=3D92re using some kind of short time impulse type signal, you
might
>> >>not get any result (e.g.: the waveform hits the second sensor 10 >> >>seconds after hitting the first sensor, but the time span of the >> >>inverse FFT is only 1 second). >> >> >Hi, >> >Thank you but I seriously cant get the hang of what you are trying to >> say. >> >I am an amateur in MATLAB and hence i am getting confused. I also
think
>> >that its not necessary to consider the things you are saying. >> >> >My question is simple - how do i calculate the delay between the
peaks
>> of >> >2 different signals? (both of my signals are just simple horizontal >> lines >> >with a peak at a particular sample i.e noise is almost null. The
signals
>> >have just one peak in them, both arriving at different time. The rest
of
>> >the signal is almost close to a straight line. The signals are
captured
>> at >> >44000Hz and the total size of both the signals is 431020). >> >> >I hope someone can help me now with a simple solution. If possible >> please >> >try and explain with a code. Thank you. >> >> Also lets say for eg, >> >> x=3Drand(1000,1); >> y=3Drand(1000,1); >> x(500)=3D40; %peak >> y(200)=3D35; %peak >> z=3Dxcorr(x,y); >> plot(z) >> >> You will see a peak at 1300. Is this the delay =3D 1300 - length of
data
>> i.e. delay between the two signals =3D 300. is this the right way?-
Hide =
>quoted text - >> >> - Show quoted text - > >Well, I use C++, not MATLAB, but I think that what you're doing is: >generate 1000 points for both x and y; set point 500 in x to 40 and >point 200 in y to 35; cross correlate x and y; plot results. For two >N point inputs, xcorr in MATLAB gives you 2*N outputs, and it provides >them in a c[m] =3D Rxy[m-N], m=3D1, 2, ... 2N-1 format, so the first
1000
>points are actually the 'left side' results where waveform y is >delayed from waveform x. The next 1000 points are the 'right side' of >the results, where waveform x is delayed from waveform y. Since your >peak is on the right side (at 1300), it says that your x waveform is >delayed by 300 sample times from the y waveform. That's exactly where >you would expect it to be. Just treat the first 1000 output points as >the left side results (waveform y delayed from waveform x) and the >second 1000 output points as the right side (waveform x delayed from >waveform y). The N point is the 'no delay between the inputs' point. > >With your inputs as they are, the output tells you that the x waveform >is 300 sample times later than the y waveform. I think if you made >your inputs x[200] =3D 40 and y[500] =3D 35, the peak should show up at >output point 700, based on my interpretation of the MATLAB >documentation (point 700 would be the 700-1000 result, which is >-300). It would tell you that y is now 300 sample times later than >x. You might want to check that to see if my interpretation of the >documentation is correct. > >Good job, maz. Now all you've got to do is generate all the delays >needed for your 4 sensor problem and try to solve for the (x,y) >position of the source. And be careful of the fact that your sensor >spacing may be some multiple of the wavelength, which could cause a >problem (I couldn't tell in physical units what your sensor spacing >was from your original post). You could also turn time delays into >angles and try solving things that way. >
Hi, Thanks.. Seems I am getting a little closer now. Can you pass me your email id, so that I can send you my .wav files captured from the microphones so that we can cross-check our delay results. Please, if you do not mind. Thanks.
On Aug 28, 7:15&#2013266080;pm, "maz_p5" <maz...@hotmail.com> wrote:
> >On Aug 27, 6:53=A0am, "maz_p5" <maz...@hotmail.com> wrote: > >> >>On Aug 25, 5:04=3DA0pm, kronec...@yahoo.co.uk wrote: > > >> >>> You know from the ccor in samples. Suppose the peak occurs at 5 > >> sample > >> >>> intervals. Then the TDOA is 5*Ts where Ts is the sampling interval > of > >> >>> your original data. It could also be -5 steps though so watch the > >> >>> sign. > > >> >>> K.- Hide quoted text - > > >> >>> - Show quoted text - > > >> >>Thanks, K. =A0I hope I=3D92m not adding to the guy=3D92s confusion, > but= > > cross > >> >>correlation isn=3D92t the easiest thing for a beginner to figure out. > = > >=A0I > >> >>started writing a response to his last question (obviously, I=3D92m > a > >> >>little late), and rather than throw it away, I=3D92ll post it > anyways. > > >> >>After doing the cross correlation, you're back in the time domain. > >> >>You had a sample rate, so if the peak is displaced by 'x' number of > >> >>samples from the zero point (or, in your case, since you're using > >> >>MATLAB, the 1 point), you can directly determine the delay. > =A0Consider > >> >>a pure sinusoidal signal. =A0If the peak is displaced by 5 points to > th= > >e > >> >>right of the 0 point, it says that one waveform is delayed by 5 > sample > >> >>times from the other. =A0If the peak is displaced 5 points to the > left > >> >>of the 0 point (it=3D92s in the upper half of the inverse FFT > outputs), > >> it > >> >>says that the other waveform is delayed by 5 sample times. =A0So (for > a= > >n > >> >>FFT of even N), if the peak is between points 0 and N/2, then > that=3D92= > >s > >> >>your time delay in sample times. =A0If the peak is from N/2 + 1 to N > - > >> >>1, then the delay would be counted from there up to the 0 point. > >> >>Seems simple enough. =A0Perhaps you're being overly confused by the > >> >>sound speed, sensor displacement, etc. =A0The sensor displacement > would > >> >>come into play if they are, say, a multiple number of wavelengths > >> >>apart. =A0In that case, the actual physical delay would be the > >> >>displacement of the peak plus some multiple of N sample times. =A0And > i= > >f > >> >>you=3D92re using some kind of short time impulse type signal, you > might > >> >>not get any result (e.g.: the waveform hits the second sensor 10 > >> >>seconds after hitting the first sensor, but the time span of the > >> >>inverse FFT is only 1 second). > > >> >Hi, > >> >Thank you but I seriously cant get the hang of what you are trying to > >> say. > >> >I am an amateur in MATLAB and hence i am getting confused. I also > think > >> >that its not necessary to consider the things you are saying. > > >> >My question is simple - how do i calculate the delay between the > peaks > >> of > >> >2 different signals? (both of my signals are just simple horizontal > >> lines > >> >with a peak at a particular sample i.e noise is almost null. The > signals > >> >have just one peak in them, both arriving at different time. The rest > of > >> >the signal is almost close to a straight line. The signals are > captured > >> at > >> >44000Hz and the total size of both the signals is 431020). > > >> >I hope someone can help me now with a simple solution. If possible > >> please > >> >try and explain with a code. Thank you. > > >> Also lets say for eg, > > >> x=3Drand(1000,1); > >> y=3Drand(1000,1); > >> x(500)=3D40; %peak > >> y(200)=3D35; %peak > >> z=3Dxcorr(x,y); > >> plot(z) > > >> You will see a peak at 1300. Is this the delay =3D 1300 - length of > data > >> i.e. delay between the two signals =3D 300. is this the right way?- > Hide = > >quoted text - > > >> - Show quoted text - > > >Well, I use C++, not MATLAB, but I think that what you're doing is: > >generate 1000 points for both x and y; set point 500 in x to 40 and > >point 200 in y to 35; cross correlate x and y; plot results. &#2013266080;For two > >N point inputs, xcorr in MATLAB gives you 2*N outputs, and it provides > >them in a c[m] =3D Rxy[m-N], m=3D1, 2, ... 2N-1 format, so the first > 1000 > >points are actually the 'left side' results where waveform y is > >delayed from waveform x. &#2013266080;The next 1000 points are the 'right side' of > >the results, where waveform x is delayed from waveform y. &#2013266080;Since your > >peak is on the right side (at 1300), it says that your x waveform is > >delayed by 300 sample times from the y waveform. &#2013266080;That's exactly where > >you would expect it to be. &#2013266080;Just treat the first 1000 output points as > >the left side results (waveform y delayed from waveform x) and the > >second 1000 output points as the right side (waveform x delayed from > >waveform y). &#2013266080;The N point is the 'no delay between the inputs' point. > > >With your inputs as they are, the output tells you that the x waveform > >is 300 sample times later than the y waveform. &#2013266080;I think if you made > >your inputs x[200] =3D 40 and y[500] =3D 35, the peak should show up at > >output point 700, based on my interpretation of the MATLAB > >documentation (point 700 would be the 700-1000 result, which is > >-300). &#2013266080;It would tell you that y is now 300 sample times later than > >x. &#2013266080;You might want to check that to see if my interpretation of the > >documentation is correct. > > >Good job, maz. &#2013266080;Now all you've got to do is generate all the delays > >needed for your 4 sensor problem and try to solve for the (x,y) > >position of the source. &#2013266080;And be careful of the fact that your sensor > >spacing may be some multiple of the wavelength, which could cause a > >problem (I couldn't tell in physical units what your sensor spacing > >was from your original post). &#2013266080;You could also turn time delays into > >angles and try solving things that way. > > Hi, > > Thanks.. Seems I am getting a little closer now. Can you pass me your > email id, so that I can send you my .wav files captured from the > microphones so that we can cross-check our delay results. Please, if you do > not mind. > Thanks.- Hide quoted text - > > - Show quoted text -
Nope, sorry, not gonna do that - I've got too many other things to do right now. Besides, once you do the cross correlations, you've got the information you need to solve your problem. First, I would suggest that you turn those time delays into angles of arrival. Here's how to visualize it. The cross correlation delays, as computed by MATLAB, range from -999, -998, ... -1, 0, +1, ... , +998, +999. You'll have 4 delays - one for each pair of sensors. Now consider each sensor pair as lying on an east/west axis. A delay of 0 says "the waveform arrives at both sensors at the same time." What it means physically is that the waveform is arriving perpendicular to the 2 sensors (at a 90 degree angle, or from the north). Now consider a delay of +1. This corresponds to the waveform arriving almost (but not quite) from due north towards the 2 sensors. You&#2013266066;ll have to figure out what that 1 sample time delay means in terms of actual physical distance traveled by the waveform for the given sound speed. Draw the problem out on a piece of graph paper to determine the angular units if need be. Then figure out the angle for other delays. Positive delays mean that the waveform arrival is more from the right or northeast direction, and negative delays mean that the waveform arrival is more from left or northwest direction. So, given your time delays, turn them into angles. Now take a piece of graph paper and draw the actual physical arrangement of your sensor array. Then mark the points exactly halfway between each pair of sensors that were used to generate the time delays (e.g.: for your 0,0 and 0,6 pair, mark the 0,3 point; for the 0,0 and 4,0 pair, mark the 2,0 point). Using those 4 marked points, physically draw the 4 angles that correspond to your time delays and get a visual idea of what it all means. Your 4 arrival angles should cross a some point in the x,y plane. For a high signal to noise ratio signal, they should all pass directly through an x,y point on the plane. That's the origin of the sound. I'd suggest you do it that way at first, because it gives you more of a visual interpretation of what you're actually doing. Once you've got the basic idea, then you can go about figuring out how to program the "drawing of the angles" to estimate the x,y point. And remember that for the low signal to noise ratio cases, the simple cross correlator will start to have a lot of problems, and the generalized version is far more preferable. But for the high signal to noise ratio case, just use the simple cross correlator to determine the delays, figure out the angles, and you should get a solution to your problem.
>On Aug 27, 6:53=A0am, "maz_p5" <maz...@hotmail.com> wrote: >> >>On Aug 25, 5:04=3DA0pm, kronec...@yahoo.co.uk wrote: >> >> >>> You know from the ccor in samples. Suppose the peak occurs at 5 >> sample >> >>> intervals. Then the TDOA is 5*Ts where Ts is the sampling interval
of
>> >>> your original data. It could also be -5 steps though so watch the >> >>> sign. >> >> >>> K.- Hide quoted text - >> >> >>> - Show quoted text - >> >> >>Thanks, K. =A0I hope I=3D92m not adding to the guy=3D92s confusion,
but=
> cross >> >>correlation isn=3D92t the easiest thing for a beginner to figure out.
=
>=A0I >> >>started writing a response to his last question (obviously, I=3D92m
a
>> >>little late), and rather than throw it away, I=3D92ll post it
anyways.
>> >> >>After doing the cross correlation, you're back in the time domain. >> >>You had a sample rate, so if the peak is displaced by 'x' number of >> >>samples from the zero point (or, in your case, since you're using >> >>MATLAB, the 1 point), you can directly determine the delay.
=A0Consider
>> >>a pure sinusoidal signal. =A0If the peak is displaced by 5 points to
th=
>e >> >>right of the 0 point, it says that one waveform is delayed by 5
sample
>> >>times from the other. =A0If the peak is displaced 5 points to the
left
>> >>of the 0 point (it=3D92s in the upper half of the inverse FFT
outputs),
>> it >> >>says that the other waveform is delayed by 5 sample times. =A0So (for
a=
>n >> >>FFT of even N), if the peak is between points 0 and N/2, then
that=3D92=
>s >> >>your time delay in sample times. =A0If the peak is from N/2 + 1 to N
-
>> >>1, then the delay would be counted from there up to the 0 point. >> >>Seems simple enough. =A0Perhaps you're being overly confused by the >> >>sound speed, sensor displacement, etc. =A0The sensor displacement
would
>> >>come into play if they are, say, a multiple number of wavelengths >> >>apart. =A0In that case, the actual physical delay would be the >> >>displacement of the peak plus some multiple of N sample times. =A0And
i=
>f >> >>you=3D92re using some kind of short time impulse type signal, you
might
>> >>not get any result (e.g.: the waveform hits the second sensor 10 >> >>seconds after hitting the first sensor, but the time span of the >> >>inverse FFT is only 1 second). >> >> >Hi, >> >Thank you but I seriously cant get the hang of what you are trying to >> say. >> >I am an amateur in MATLAB and hence i am getting confused. I also
think
>> >that its not necessary to consider the things you are saying. >> >> >My question is simple - how do i calculate the delay between the
peaks
>> of >> >2 different signals? (both of my signals are just simple horizontal >> lines >> >with a peak at a particular sample i.e noise is almost null. The
signals
>> >have just one peak in them, both arriving at different time. The rest
of
>> >the signal is almost close to a straight line. The signals are
captured
>> at >> >44000Hz and the total size of both the signals is 431020). >> >> >I hope someone can help me now with a simple solution. If possible >> please >> >try and explain with a code. Thank you. >> >> Also lets say for eg, >> >> x=3Drand(1000,1); >> y=3Drand(1000,1); >> x(500)=3D40; %peak >> y(200)=3D35; %peak >> z=3Dxcorr(x,y); >> plot(z) >> >> You will see a peak at 1300. Is this the delay =3D 1300 - length of
data
>> i.e. delay between the two signals =3D 300. is this the right way?-
Hide =
>quoted text - >> >> - Show quoted text - > >Well, I use C++, not MATLAB, but I think that what you're doing is: >generate 1000 points for both x and y; set point 500 in x to 40 and >point 200 in y to 35; cross correlate x and y; plot results. For two >N point inputs, xcorr in MATLAB gives you 2*N outputs, and it provides >them in a c[m] =3D Rxy[m-N], m=3D1, 2, ... 2N-1 format, so the first
1000
>points are actually the 'left side' results where waveform y is >delayed from waveform x. The next 1000 points are the 'right side' of >the results, where waveform x is delayed from waveform y. Since your >peak is on the right side (at 1300), it says that your x waveform is >delayed by 300 sample times from the y waveform. That's exactly where >you would expect it to be. Just treat the first 1000 output points as >the left side results (waveform y delayed from waveform x) and the >second 1000 output points as the right side (waveform x delayed from >waveform y). The N point is the 'no delay between the inputs' point. > >With your inputs as they are, the output tells you that the x waveform >is 300 sample times later than the y waveform. I think if you made >your inputs x[200] =3D 40 and y[500] =3D 35, the peak should show up at >output point 700, based on my interpretation of the MATLAB >documentation (point 700 would be the 700-1000 result, which is >-300). It would tell you that y is now 300 sample times later than >x. You might want to check that to see if my interpretation of the >documentation is correct. > >Good job, maz. Now all you've got to do is generate all the delays >needed for your 4 sensor problem and try to solve for the (x,y) >position of the source. And be careful of the fact that your sensor >spacing may be some multiple of the wavelength, which could cause a >problem (I couldn't tell in physical units what your sensor spacing >was from your original post). You could also turn time delays into >angles and try solving things that way. >
Hi, I want verification if the results below are correct. The sounds are captured at 44100 Hz into the two microphones. The length of both the sounds is - 430120 samples (bcuz both we captured simultaneously) The peak of m1 occurs at = 176426 The peak of m2 occurs at = 176437 Now, I cross-correlate both the signals m1 and m2 using z=xcorr(m1,m2); The peak of z occurs at = 430101 Is this the delay between the two signals or is c = length(m1)-430101 the delay between the two signals? I am getting confused on this part because I have seen papers showing both the ways. Please let me know. Thank you.
m2 is later than m1, so it's the same as you had before with y later
than x.  So the peak should be interpreted as occurring on the left or
lower half of your results.  Treat the first N-1 output points as the
left side results (waveform y later than waveform x), the N point as
being the zero delay point and the second N-1 output points as the
right side (waveform x later than waveform y).  You should have 2N - 2
outputs.  So if the delay shows up in the first or lower half of the
results, then your delay is the distance (in number of samples)
between the zero delay point (point N, or the exact middle of your
total number of points) and the peak to its left ( delay = N minus the
peak).  When the delay shows up in the second or upper half of the
results, the delay is computed from the zero delay point up to the
peak (subtract N from the location of the peak).

But one problem I see is that you have a difference of 11 points
between m1 and m2. I'm not quite sure how you arrived at some of the
numbers you're using.
On Sep 5, 12:53&#2013266080;am, kevinjmc...@netscape.net wrote:
> m2 is later than m1, so it's the same as you had before with y later > than x. &#2013266080;So the peak should be interpreted as occurring on the left or > lower half of your results. &#2013266080;Treat the first N-1 output points as the > left side results (waveform y later than waveform x), the N point as > being the zero delay point and the second N-1 output points as the > right side (waveform x later than waveform y). &#2013266080;You should have 2N - 2 > outputs. &#2013266080;So if the delay shows up in the first or lower half of the > results, then your delay is the distance (in number of samples) > between the zero delay point (point N, or the exact middle of your > total number of points) and the peak to its left ( delay = N minus the > peak). &#2013266080;When the delay shows up in the second or upper half of the > results, the delay is computed from the zero delay point up to the > peak (subtract N from the location of the peak). > > But one problem I see is that you have a difference of 11 points > between m1 and m2. I'm not quite sure how you arrived at some of the > numbers you're using.
I knew those numbers were suspicious! 430120 can be factored by 8 then 5 to yield 10753, which is a prime number. So MATLAB is probably zero padding to do the computations. That's why your delay is 11, but your calculated delay is 19. Very tricky.
>On Sep 5, 12:53=A0am, kevinjmc...@netscape.net wrote: >> m2 is later than m1, so it's the same as you had before with y later >> than x. =A0So the peak should be interpreted as occurring on the left
or
>> lower half of your results. =A0Treat the first N-1 output points as
the
>> left side results (waveform y later than waveform x), the N point as >> being the zero delay point and the second N-1 output points as the >> right side (waveform x later than waveform y). =A0You should have 2N -
2
>> outputs. =A0So if the delay shows up in the first or lower half of the >> results, then your delay is the distance (in number of samples) >> between the zero delay point (point N, or the exact middle of your >> total number of points) and the peak to its left ( delay =3D N minus
the
>> peak). =A0When the delay shows up in the second or upper half of the >> results, the delay is computed from the zero delay point up to the >> peak (subtract N from the location of the peak). >> >> But one problem I see is that you have a difference of 11 points >> between m1 and m2. I'm not quite sure how you arrived at some of the >> numbers you're using. > >I knew those numbers were suspicious! 430120 can be factored by 8 >then 5 to yield 10753, which is a prime number. So MATLAB is probably >zero padding to do the computations. That's why your delay is 11, but >your calculated delay is 19. Very tricky. >
Hi, yes it is tricky and that is exactly what is confusing me as to which is the right one. No, it is not zero padding. Actually i start recording using some other recording software and not MATLAB bcuz MATLAB doesnt support four multiple inputs. I start recording, and as soon as i capture the peak, then i stop the recording after about couple of seconds. Now what should i do. How do i verify if my delay calculation is correct?
On Sep 5, 5:21&#2013266080;am, "maz_p5" <maz...@hotmail.com> wrote:
> >On Sep 5, 12:53=A0am, kevinjmc...@netscape.net wrote: > >> m2 is later than m1, so it's the same as you had before with y later > >> than x. =A0So the peak should be interpreted as occurring on the left > or > >> lower half of your results. =A0Treat the first N-1 output points as > the > >> left side results (waveform y later than waveform x), the N point as > >> being the zero delay point and the second N-1 output points as the > >> right side (waveform x later than waveform y). =A0You should have 2N - > 2 > >> outputs. =A0So if the delay shows up in the first or lower half of the > >> results, then your delay is the distance (in number of samples) > >> between the zero delay point (point N, or the exact middle of your > >> total number of points) and the peak to its left ( delay =3D N minus > the > >> peak). =A0When the delay shows up in the second or upper half of the > >> results, the delay is computed from the zero delay point up to the > >> peak (subtract N from the location of the peak). > > >> But one problem I see is that you have a difference of 11 points > >> between m1 and m2. I'm not quite sure how you arrived at some of the > >> numbers you're using. > > >I knew those numbers were suspicious! &#2013266080;430120 can be factored by 8 > >then 5 to yield 10753, which is a prime number. &#2013266080;So MATLAB is probably > >zero padding to do the computations. &#2013266080;That's why your delay is 11, but > >your calculated delay is 19. &#2013266080;Very tricky. > > Hi, > > yes it is tricky and that is exactly what is confusing me as to which is > the right one. > > No, it is not zero padding. Actually i start recording using some other > recording software and not MATLAB bcuz MATLAB doesnt support four multiple > inputs. I start recording, and as soon as i capture the peak, then i stop > the recording after about couple of seconds. > > Now what should i do. How do i verify if my delay calculation is correct?- Hide quoted text - > > - Show quoted text -
OK. Let's just focus on what your output really means. Your inputs are two N point time domain recordings. MATLAB will give you 2N - 1 outputs (keep in mind that I'm not familiar with it - I do my own cross correlations in C++ because I know how my stuff works, and I can trust it). I said previously that you get 2N - 2 points - that's wrong - MATLAB gives you 2N - 2 points plus the N point, which is 2N-1 points. The N point is halfway betweeen point 0 (the first output), and point 2N-1 (the last point). In the middle of all those points is point N. It is the zero delay point. If the peak in the cross correlation shows up at the N point in the outputs, it means that there is no delay between the 2 waveforms. If the peak shows up on the left side of the 2N-1 outputs (the peak is at a point less than N), it means that one waveform is delayed from the other by the distance in sample times from the point N to the left. Just imagine the points as being from -(N-1) to N to +(N-1), with N in the center as being the 'no delay between them.' So if the peak shows up on the left side of the results (peak location less than N), your delay is N minus the location of the peak, expressed as a positive number. If the peak shows up on the right side of the results (peak location greater than N), then your delay is (peak location - N), which will be a positive number. The reason I'm concerned is that you seem to have a delay between waveforms of 11 sample times in a previous post, but your calculated result indicates a delay of 19 sample times. Something is wrong. I don't know how MATLAB actually computes cross correlations (do you know how it does it?). Your sample length is so large that it might not do it with a direct calculation. That's what led me to believe that it's might be doing it some other way, and your sample length doesn't factor well (it has a very large prime factor). I won't be back until sometime tonight, but I'll think about your problem a bit further. In the mean time, is N actually 430120 samples, and your programmed delay 11 sample times, and your sample rate 44100, and your computed delay at 430101? Please check your numbers.
>On Sep 5, 5:21=A0am, "maz_p5" <maz...@hotmail.com> wrote: >> >On Sep 5, 12:53=3DA0am, kevinjmc...@netscape.net wrote: >> >> m2 is later than m1, so it's the same as you had before with y
later
>> >> than x. =3DA0So the peak should be interpreted as occurring on the
lef=
>t >> or >> >> lower half of your results. =3DA0Treat the first N-1 output points
as
>> the >> >> left side results (waveform y later than waveform x), the N point
as
>> >> being the zero delay point and the second N-1 output points as the >> >> right side (waveform x later than waveform y). =3DA0You should have
2N=
> - >> 2 >> >> outputs. =3DA0So if the delay shows up in the first or lower half of
t=
>he >> >> results, then your delay is the distance (in number of samples) >> >> between the zero delay point (point N, or the exact middle of your >> >> total number of points) and the peak to its left ( delay =3D3D N
minus
>> the >> >> peak). =3DA0When the delay shows up in the second or upper half of
the
>> >> results, the delay is computed from the zero delay point up to the >> >> peak (subtract N from the location of the peak). >> >> >> But one problem I see is that you have a difference of 11 points >> >> between m1 and m2. I'm not quite sure how you arrived at some of
the
>> >> numbers you're using. >> >> >I knew those numbers were suspicious! =A0430120 can be factored by 8 >> >then 5 to yield 10753, which is a prime number. =A0So MATLAB is
probably
>> >zero padding to do the computations. =A0That's why your delay is 11,
but
>> >your calculated delay is 19. =A0Very tricky. >> >> Hi, >> >> yes it is tricky and that is exactly what is confusing me as to which
is
>> the right one. >> >> No, it is not zero padding. Actually i start recording using some
other
>> recording software and not MATLAB bcuz MATLAB doesnt support four
multipl=
>e >> inputs. I start recording, and as soon as i capture the peak, then i
stop
>> the recording after about couple of seconds. >> >> Now what should i do. How do i verify if my delay calculation is
correct?=
>- Hide quoted text - >> >> - Show quoted text - > >OK. Let's just focus on what your output really means. Your inputs >are two N point time domain recordings. MATLAB will give you 2N - 1 >outputs (keep in mind that I'm not familiar with it - I do my own >cross correlations in C++ because I know how my stuff works, and I can >trust it). I said previously that you get 2N - 2 points - that's >wrong - MATLAB gives you 2N - 2 points plus the N point, which is 2N-1 >points. The N point is halfway betweeen point 0 (the first output), >and point 2N-1 (the last point). In the middle of all those points is >point N. It is the zero delay point. If the peak in the cross >correlation shows up at the N point in the outputs, it means that >there is no delay between the 2 waveforms. If the peak shows up on >the left side of the 2N-1 outputs (the peak is at a point less than >N), it means that one waveform is delayed from the other by the >distance in sample times from the point N to the left. Just imagine >the points as being from -(N-1) to N to +(N-1), with N in the center >as being the 'no delay between them.' So if the peak shows up on the >left side of the results (peak location less than N), your delay is N >minus the location of the peak, expressed as a positive number. If >the peak shows up on the right side of the results (peak location >greater than N), then your delay is (peak location - N), which will be >a positive number. > >The reason I'm concerned is that you seem to have a delay between >waveforms of 11 sample times in a previous post, but your calculated >result indicates a delay of 19 sample times. Something is wrong. I >don't know how MATLAB actually computes cross correlations (do you >know how it does it?). Your sample length is so large that it might >not do it with a direct calculation. That's what led me to believe >that it's might be doing it some other way, and your sample length >doesn't factor well (it has a very large prime factor). > >I won't be back until sometime tonight, but I'll think about your >problem a bit further. In the mean time, is N actually 430120 >samples, and your programmed delay 11 sample times, and your sample >rate 44100, and your computed delay at 430101? Please check your >numbers. > >
Hi, Yes the nos. are correct. When i stop recording, i open the .wav files in matlab which are 430120 samples long. If i had to record it in matlab, then i would obviously set N to some value which is = multiple of sampling frequency i.e. N= 44100 x 10 for 10 sec recording; which is not the case here. So, N= 430120. max(m1)=176426 max(m2)=176437 z=xcorr(m1,m2); max(z)=430101 Thank you. -Maz
On Sep 5, 7:51&#2013266080;am, "maz_p5" <maz...@hotmail.com> wrote:
> >On Sep 5, 5:21=A0am, "maz_p5" <maz...@hotmail.com> wrote: > >> >On Sep 5, 12:53=3DA0am, kevinjmc...@netscape.net wrote: > >> >> m2 is later than m1, so it's the same as you had before with y > later > >> >> than x. =3DA0So the peak should be interpreted as occurring on the > lef= > >t > >> or > >> >> lower half of your results. =3DA0Treat the first N-1 output points > as > >> the > >> >> left side results (waveform y later than waveform x), the N point > as > >> >> being the zero delay point and the second N-1 output points as the > >> >> right side (waveform x later than waveform y). =3DA0You should have > 2N= > > - > >> 2 > >> >> outputs. =3DA0So if the delay shows up in the first or lower half of > t= > >he > >> >> results, then your delay is the distance (in number of samples) > >> >> between the zero delay point (point N, or the exact middle of your > >> >> total number of points) and the peak to its left ( delay =3D3D N > minus > >> the > >> >> peak). =3DA0When the delay shows up in the second or upper half of > the > >> >> results, the delay is computed from the zero delay point up to the > >> >> peak (subtract N from the location of the peak). > > >> >> But one problem I see is that you have a difference of 11 points > >> >> between m1 and m2. I'm not quite sure how you arrived at some of > the > >> >> numbers you're using. > > >> >I knew those numbers were suspicious! =A0430120 can be factored by 8 > >> >then 5 to yield 10753, which is a prime number. =A0So MATLAB is > probably > >> >zero padding to do the computations. =A0That's why your delay is 11, > but > >> >your calculated delay is 19. =A0Very tricky. > > >> Hi, > > >> yes it is tricky and that is exactly what is confusing me as to which > is > >> the right one. > > >> No, it is not zero padding. Actually i start recording using some > other > >> recording software and not MATLAB bcuz MATLAB doesnt support four > multipl= > >e > >> inputs. I start recording, and as soon as i capture the peak, then i > stop > >> the recording after about couple of seconds. > > >> Now what should i do. How do i verify if my delay calculation is > correct?= > >- Hide quoted text - > > >> - Show quoted text - > > >OK. &#2013266080;Let's just focus on what your output really means. &#2013266080;Your inputs > >are two N point time domain recordings. &#2013266080;MATLAB will give you 2N - 1 > >outputs (keep in mind that I'm not familiar with it - I do my own > >cross correlations in C++ because I know how my stuff works, and I can > >trust it). &#2013266080;I said previously that you get 2N - 2 points - that's > >wrong - MATLAB gives you 2N - 2 points plus the N point, which is 2N-1 > >points. &#2013266080;The N point is halfway betweeen point 0 (the first output), > >and point 2N-1 (the last point). &#2013266080;In the middle of all those points is > >point N. &#2013266080;It is the zero delay point. If the peak in the cross > >correlation shows up at the N point in the outputs, it means that > >there is no delay between the 2 waveforms. &#2013266080;If the peak shows up on > >the left side of the 2N-1 outputs (the peak is at a point less than > >N), it means that one waveform is delayed from the other by the > >distance in sample times from the point N to the left. &#2013266080;Just imagine > >the points as being from -(N-1) to N to +(N-1), with N in the center > >as being the 'no delay between them.' &#2013266080;So if the peak shows up on the > >left side of the results (peak location less than N), your delay is N > >minus the location of the peak, expressed as a positive number. &#2013266080;If > >the peak shows up on the right side of the results (peak location > >greater than N), then your delay is (peak location - N), which will be > >a positive number. > > >The reason I'm concerned is that you seem to have a delay between > >waveforms of 11 sample times in a previous post, but your calculated > >result indicates a delay of 19 sample times. &#2013266080;Something is wrong. &#2013266080;I > >don't know how MATLAB actually computes cross correlations (do you > >know how it does it?). &#2013266080;Your sample length is so large that it might > >not do it with a direct calculation. That's what led me to believe > >that it's might be doing it some other way, and your sample length > >doesn't factor well (it has a very large prime factor). > > >I won't be back until sometime tonight, but I'll think about your > >problem a bit further. &#2013266080;In the mean time, is N actually 430120 > >samples, and your programmed delay 11 sample times, and your sample > >rate 44100, and your computed delay at 430101? &#2013266080;Please check your > >numbers. > > Hi, > > Yes the nos. are correct. > When i stop recording, i open the .wav files in matlab which are 430120 > samples long. If i had to record it in matlab, then i would obviously set N > to some value which is = multiple of sampling frequency i.e. N= 44100 x 10 > for 10 sec recording; which is not the case here. > So, N= 430120. > max(m1)=176426 > max(m2)=176437 > z=xcorr(m1,m2); > max(z)=430101 > Thank you. > -Maz- Hide quoted text - > > - Show quoted text -
I'm presuming that your max(m1) and max(m2) values are actual physically measured peaks occurring in your recordings. The delay is 11 sample times between them, and I presume that you got it by eyeballing the data. But your calculated delay is N - 430101 = 19. Since it's on the left or lower side of the result (the computed delay is less than N), then it should actually be considered to be a negative delay, but we'll ignore that for now. As for the rest of your numbers, I find it quite extraordinary that you just so happen to have an N that has a huge prime factor (10753) in it. Similarly, your data length is about 9.75 seconds, which corresponds to a couple of miles at a sound speed of 1100 feet/sec. But your 'measured' and calculated results differ. I can't help but think that MATLAB may be padding the numbers without your knowledge because of that large prime factor in N. I seriously doubt that MATLAB is doing the calculation using a direct N squared computation (that's 1.85... x10 to the 11th calculations!). So it's probably factoring N into more manageable amounts. The problem is that prime factor of 10753. Quite possibly, it's adding a few zero padded points such that N can be factored more favorably. MATLAB will zero pad the data if you give it two different input lengths, and it wouldn't surprise me if it did something similar when it comes up against a large prime like 10753. So try changing the value you're using for N, and chop a few data points off your recordings. For instance, 409600 is 640 squared, and MATLAB should have no problem with it. Otherwise, you may have a problem with how MATLAB is actually performing the calculation internally, and I can't help you with that.