# cross correlation sound

Started by August 24, 2008
```Hello,
My name is maz and I am working on simple sound source localization. I
have to find the location of a sound source on a 2d plane. (I am not
considering z axis). I have 4 mics placed on a wooden platform, the
co-ordinates of which are m1(0,0), m2(0,6), m3(4,6), m4(4,0). del12 is
the
difference between the distance from mic 1 to the source and from mic 2
to
the source. del12=(delay between the 1st mic and the 2nd x v sound i.e.
340m/s)/fs i.e. 44000. My question is how do I calculate the delay
between
these two sound signals using cross-correlation in matlab. (I am not
considering sound for the start as i have taken the readings in a sound
free environment). I do not know since I am still learning. Can you

```
```On Aug 24, 8:57 pm, "maz_p5" <maz...@hotmail.com> wrote:
> Hello,
> My name is maz and I am working on simple sound source localization. I
> have to find the location of a sound source on a 2d plane. (I am not
> considering z axis). I have 4 mics placed on a wooden platform, the
> co-ordinates of which are m1(0,0), m2(0,6), m3(4,6), m4(4,0). del12 is
> the
> difference between the distance from mic 1 to the source and from mic 2
> to
> the source. del12=(delay between the 1st mic and the 2nd x v sound i.e.
> 340m/s)/fs i.e. 44000. My question is how do I calculate the delay
> between
> these two sound signals using cross-correlation in matlab. (I am not
> considering sound for the start as i have taken the readings in a sound
> free environment). I do not know since I am still learning. Can you

There are many papers which formulate this type of problem. You could
start here

IEEE TRANSACTIONS ON ACOUSTICS, SPEECH, AND SIGNAL PROCESSING, VOL.
ASSP-29, NO. 3, JUNE 1981
Time Delay Estimation for Passive Sonar
Signal Processing by C.Carter

For the 3 microphone solution there is a simple formula (eq 8a and 8b
in this paper). This will give you the range and the bearing.
You can use more microphones and then the problem is over-determined
(more equations than unknowns).
Cross correlation per-se is not brilliant. See the paper where they
use Generalized Cross Correlation.

K.
```
```On Sun, 24 Aug 2008 02:31:35 -0700 (PDT), kronecker@yahoo.co.uk wrote:

>On Aug 24, 8:57 pm, "maz_p5" <maz...@hotmail.com> wrote:
>> Hello,
>> My name is maz and I am working on simple sound source localization. I
>> have to find the location of a sound source on a 2d plane. (I am not
>> considering z axis). I have 4 mics placed on a wooden platform, the
>> co-ordinates of which are m1(0,0), m2(0,6), m3(4,6), m4(4,0). del12 is
>> the
>> difference between the distance from mic 1 to the source and from mic 2
>> to
>> the source. del12=(delay between the 1st mic and the 2nd x v sound i.e.
>> 340m/s)/fs i.e. 44000. My question is how do I calculate the delay
>> between
>> these two sound signals using cross-correlation in matlab. (I am not
>> considering sound for the start as i have taken the readings in a sound
>> free environment). I do not know since I am still learning. Can you
>
>There are many papers which formulate this type of problem. You could
>start here
>
>IEEE TRANSACTIONS ON ACOUSTICS, SPEECH, AND SIGNAL PROCESSING, VOL.
>ASSP-29, NO. 3, JUNE 1981
>Time Delay Estimation for Passive Sonar
>Signal Processing by C.Carter
>
>For the 3 microphone solution there is a simple formula (eq 8a and 8b
>in this paper). This will give you the range and the bearing.
>You can use more microphones and then the problem is over-determined
>(more equations than unknowns).
>Cross correlation per-se is not brilliant. See the paper where they
>use Generalized Cross Correlation.
>

I was going to download this paper and discovered that just being a
member of the Signal Processing Society isn't enough to get access to
transactions papers.   I dropped my transaction subscription a couple
of years ago since the new papers have seemed pretty irrelevant to
what I do.

Annoying.

Eric Jacobsen
Minister of Algorithms
Abineau Communications
http://www.ericjacobsen.org

Blog: http://www.dsprelated.com/blogs-1/hf/Eric_Jacobsen.php
```
```On Aug 24, 4:57&#2013266080;am, "maz_p5" <maz...@hotmail.com> wrote:
> Hello,
> My name is maz and I am working on simple sound source localization. I
> have to find the location of a sound source on a 2d plane. (I am not
> considering z axis). I have 4 mics placed on a wooden platform, the
> co-ordinates of which are m1(0,0), m2(0,6), m3(4,6), m4(4,0). del12 is
> the
> difference between the distance from mic 1 to the source and from mic 2
> to
> the source. del12=(delay between the 1st mic and the 2nd x v sound i.e.
> 340m/s)/fs i.e. 44000. My question is how do I calculate the delay
> between
> these two sound signals using cross-correlation in matlab. (I am not
> considering sound for the start as i have taken the readings in a sound
> free environment). I do not know since I am still learning. Can you

Perhaps I can help with the cross correlation.  Let&#2013266066;s envision a 2
dimensional plane with north, south, east and west directions.  Now
suppose we have two sensors on the horizontal east/west axis.  Each
sensor is spaced the same distance either side of the vertical north/
south axis.  Call the east sensor #1 and the west sensor #2.  Now
suppose we have some waveform (a sine wave, truncated sinc, AWGN,
whatever) moving down from the north.  We'll presume that the signal
is planar (the 'far field' condition; i.e.: no wavefront curvature).

Arriving from the north, the waveform will hit both sensors at the
same time.  Note that with omnidirectional sensors, you can't tell if
the waveform is arriving from the north or south.  However, many
sensors have some directionality to them, so let's presume that our 2
sensors are more sensitive to the north/east/west directions.

Now we sample and zero pad outputs of both sensors in an appropriate
way to avoid doing a circular cross correlation.  Then we FFT each
zero padded sensor output, conjugate one of the results, multiply them
in the frequency domain, and inverse transform.  This is a cross
correlation.  If we didn't do the conjugation bit before multiplying
the 2 FFT results, we'd get a convolution of the 2 sensor outputs, and
that's not what we want.

If we were to look at the result when the waveform arrives from the
north, we&#2013266066;d find that there&#2013266066;s a peak in the cross correlation result
at the 0 point after the inverse FFT (zero time delay).

Now suppose the waveform arrives from the northeast.  It will arrive
at sensor 1 before sensor 2.  We&#2013266066;d do the same processing as before,
but it begs the question: &#2013266067;which zero padded sensor FFT results do we
conjugate?&#2013266068;  It makes a difference.  For the above example, if you
conjugate the FFT result of sensor 2 (the left or west side one),
you&#2013266066;d find that, as the waveform arrival moves from the north to the
northeast, the peak in your cross correlation result moves to the
right of the 0 point in the results.  When the waveform moves from the
north to the northwest, the peak moves to the left of the 0 point in
the results (i.e.: it shows up in the upper part of the inverse FFT
results).

The above describes cross correlation processing, but there are
problems with it.  For instance, with many waveforms, the cross
correlation peak will appear as a maximum with a gentle roll off as
one moves away from the peak.  The moment you add some noise to the
problem, things become very difficult.  It&#2013266066;s better to use a
&#2013266065;generalized&#2013266066; cross correlator, where one uses a window or filter in
the frequency domain (and they&#2013266066;re very different than what most people
are used to).  When using a properly calculated frequency domain
window, the improvement of the time delay estimation in a noisy
environment can be significant.  Here&#2013266066;s 3 references that may or may

J. C. Hassab, R. E. Boucher, &#2013266067;Optimum Estimation of Time Delay by a
Generalized Correlator,&#2013266068; IEEE T-ASSP, vol. 27, no. 4, Aug. 1979, pp.
373-380.

J. C. Hassab, R. E. Boucher, &#2013266067;Performance of the Generalized Cross
Correlator in the Presence of a Strong Spectral Peak in the Signal,&#2013266068;
IEEE T-ASSP, vol. 29, no. 3, June 1981, pp. 549-555.

J. C. Hassab, R. E. Boucher, &#2013266067;An Experimental Comparison of Optimum
and Sub-Optimum Filters&#2013266066; Effectiveness in the Generalized Correlator,&#2013266068;
J. Sound and Vibration, 1981, pp. 4+ (12 pages total).

(e.g.: use the references mentioned in the above).

The description provided here barely scratches the surface.  I
couldn&#2013266066;t begin to describe the problems of dealing with weak AWGN
signals in strong sinusoidal noise.  In addition, sensor spacing plays
a role.  Typically, in an acoustic system, sensor spacing is at the
&#2013266065;half wavelength&#2013266066; of the &#2013266065;design frequency&#2013266066; of the sensor array.  Then
anti-aliasing is applied to limit the frequencies in the input to be
below the design frequency (or sometimes not, depending on the
sophistication of the processing).

I would suggest that you try some simple simulation experiments at
first using different waveforms and change the delays between them
while using a simple cross correlator.  You might try a generalized
cross correlator, but that&#2013266066;s very ambitious without having taken a
course in time delay estimation.
```
```>On Aug 24, 4:57=A0am, "maz_p5" <maz...@hotmail.com> wrote:
>> Hello,
>> My name is maz and I am working on simple sound source localization. I
>> have to find the location of a sound source on a 2d plane. (I am not
>> considering z axis). I have 4 mics placed on a wooden platform, the
>> co-ordinates of which are m1(0,0), m2(0,6), m3(4,6), m4(4,0). del12 is
>> the
>> difference between the distance from mic 1 to the source and from mic
2
>> to
>> the source. del12=3D(delay between the 1st mic and the 2nd x v sound
i.e.
>> 340m/s)/fs i.e. 44000. My question is how do I calculate the delay
>> between
>> these two sound signals using cross-correlation in matlab. (I am not
>> considering sound for the start as i have taken the readings in a
sound
>> free environment). I do not know since I am still learning. Can you
>
>Perhaps I can help with the cross correlation.  Let=92s envision a 2
>dimensional plane with north, south, east and west directions.  Now
>suppose we have two sensors on the horizontal east/west axis.  Each
>sensor is spaced the same distance either side of the vertical north/
>south axis.  Call the east sensor #1 and the west sensor #2.  Now
>suppose we have some waveform (a sine wave, truncated sinc, AWGN,
>whatever) moving down from the north.  We'll presume that the signal
>is planar (the 'far field' condition; i.e.: no wavefront curvature).
>
>Arriving from the north, the waveform will hit both sensors at the
>same time.  Note that with omnidirectional sensors, you can't tell if
>the waveform is arriving from the north or south.  However, many
>sensors have some directionality to them, so let's presume that our 2
>sensors are more sensitive to the north/east/west directions.
>
>Now we sample and zero pad outputs of both sensors in an appropriate
>way to avoid doing a circular cross correlation.  Then we FFT each
>zero padded sensor output, conjugate one of the results, multiply them
>in the frequency domain, and inverse transform.  This is a cross
>correlation.  If we didn't do the conjugation bit before multiplying
>the 2 FFT results, we'd get a convolution of the 2 sensor outputs, and
>that's not what we want.
>
>If we were to look at the result when the waveform arrives from the
>north, we=92d find that there=92s a peak in the cross correlation result
>at the 0 point after the inverse FFT (zero time delay).
>
>Now suppose the waveform arrives from the northeast.  It will arrive
>at sensor 1 before sensor 2.  We=92d do the same processing as before,
>but it begs the question: =93which zero padded sensor FFT results do we
>conjugate?=94  It makes a difference.  For the above example, if you
>conjugate the FFT result of sensor 2 (the left or west side one),
>you=92d find that, as the waveform arrival moves from the north to the
>northeast, the peak in your cross correlation result moves to the
>right of the 0 point in the results.  When the waveform moves from the
>north to the northwest, the peak moves to the left of the 0 point in
>the results (i.e.: it shows up in the upper part of the inverse FFT
>results).
>
>The above describes cross correlation processing, but there are
>problems with it.  For instance, with many waveforms, the cross
>correlation peak will appear as a maximum with a gentle roll off as
>one moves away from the peak.  The moment you add some noise to the
>problem, things become very difficult.  It=92s better to use a
>=91generalized=92 cross correlator, where one uses a window or filter in
>the frequency domain (and they=92re very different than what most people
>are used to).  When using a properly calculated frequency domain
>window, the improvement of the time delay estimation in a noisy
>environment can be significant.  Here=92s 3 references that may or may
>
>J. C. Hassab, R. E. Boucher, =93Optimum Estimation of Time Delay by a
>Generalized Correlator,=94 IEEE T-ASSP, vol. 27, no. 4, Aug. 1979, pp.
>373-380.
>
>J. C. Hassab, R. E. Boucher, =93Performance of the Generalized Cross
>Correlator in the Presence of a Strong Spectral Peak in the Signal,=94
>IEEE T-ASSP, vol. 29, no. 3, June 1981, pp. 549-555.
>
>J. C. Hassab, R. E. Boucher, =93An Experimental Comparison of Optimum
>and Sub-Optimum Filters=92 Effectiveness in the Generalized
Correlator,=94
>J. Sound and Vibration, 1981, pp. 4+ (12 pages total).
>
>(e.g.: use the references mentioned in the above).
>
>The description provided here barely scratches the surface.  I
>couldn=92t begin to describe the problems of dealing with weak AWGN
>signals in strong sinusoidal noise.  In addition, sensor spacing plays
>a role.  Typically, in an acoustic system, sensor spacing is at the
>=91half wavelength=92 of the =91design frequency=92 of the sensor array.
T=
>hen
>anti-aliasing is applied to limit the frequencies in the input to be
>below the design frequency (or sometimes not, depending on the
>sophistication of the processing).
>
>I would suggest that you try some simple simulation experiments at
>first using different waveforms and change the delays between them
>while using a simple cross correlator.  You might try a generalized
>cross correlator, but that=92s very ambitious without having taken a
>course in time delay estimation.

Hello,
This sounds really confusing to me. I think it doesnt matter from where
the sound is coming as far as there will be a difference in the arrival and
difference in the position of the peak when i plot the wave file in matlab.
I have captured sound from a position between the 4 mics and I can see the
difference in the peak.
lets not consider noise at all because I have taken the readings in a
nosie free environment. can i find the time difference of arrival using
"xcorr"? if yes, How can i do that?
>
```
```On Aug 25, 9:56 pm, "maz_p5" <maz...@hotmail.com> wrote:
> >On Aug 24, 4:57=A0am, "maz_p5" <maz...@hotmail.com> wrote:
> >> Hello,
> >> My name is maz and I am working on simple sound source localization. I
> >> have to find the location of a sound source on a 2d plane. (I am not
> >> considering z axis). I have 4 mics placed on a wooden platform, the
> >> co-ordinates of which are m1(0,0), m2(0,6), m3(4,6), m4(4,0). del12 is
> >> the
> >> difference between the distance from mic 1 to the source and from mic
> 2
> >> to
> >> the source. del12=3D(delay between the 1st mic and the 2nd x v sound
> i.e.
> >> 340m/s)/fs i.e. 44000. My question is how do I calculate the delay
> >> between
> >> these two sound signals using cross-correlation in matlab. (I am not
> >> considering sound for the start as i have taken the readings in a
> sound
> >> free environment). I do not know since I am still learning. Can you
>
> >Perhaps I can help with the cross correlation.  Let=92s envision a 2
> >dimensional plane with north, south, east and west directions.  Now
> >suppose we have two sensors on the horizontal east/west axis.  Each
> >sensor is spaced the same distance either side of the vertical north/
> >south axis.  Call the east sensor #1 and the west sensor #2.  Now
> >suppose we have some waveform (a sine wave, truncated sinc, AWGN,
> >whatever) moving down from the north.  We'll presume that the signal
> >is planar (the 'far field' condition; i.e.: no wavefront curvature).
>
> >Arriving from the north, the waveform will hit both sensors at the
> >same time.  Note that with omnidirectional sensors, you can't tell if
> >the waveform is arriving from the north or south.  However, many
> >sensors have some directionality to them, so let's presume that our 2
> >sensors are more sensitive to the north/east/west directions.
>
> >Now we sample and zero pad outputs of both sensors in an appropriate
> >way to avoid doing a circular cross correlation.  Then we FFT each
> >zero padded sensor output, conjugate one of the results, multiply them
> >in the frequency domain, and inverse transform.  This is a cross
> >correlation.  If we didn't do the conjugation bit before multiplying
> >the 2 FFT results, we'd get a convolution of the 2 sensor outputs, and
> >that's not what we want.
>
> >If we were to look at the result when the waveform arrives from the
> >north, we=92d find that there=92s a peak in the cross correlation result
> >at the 0 point after the inverse FFT (zero time delay).
>
> >Now suppose the waveform arrives from the northeast.  It will arrive
> >at sensor 1 before sensor 2.  We=92d do the same processing as before,
> >but it begs the question: =93which zero padded sensor FFT results do we
> >conjugate?=94  It makes a difference.  For the above example, if you
> >conjugate the FFT result of sensor 2 (the left or west side one),
> >you=92d find that, as the waveform arrival moves from the north to the
> >northeast, the peak in your cross correlation result moves to the
> >right of the 0 point in the results.  When the waveform moves from the
> >north to the northwest, the peak moves to the left of the 0 point in
> >the results (i.e.: it shows up in the upper part of the inverse FFT
> >results).
>
> >The above describes cross correlation processing, but there are
> >problems with it.  For instance, with many waveforms, the cross
> >correlation peak will appear as a maximum with a gentle roll off as
> >one moves away from the peak.  The moment you add some noise to the
> >problem, things become very difficult.  It=92s better to use a
> >=91generalized=92 cross correlator, where one uses a window or filter in
> >the frequency domain (and they=92re very different than what most people
> >are used to).  When using a properly calculated frequency domain
> >window, the improvement of the time delay estimation in a noisy
> >environment can be significant.  Here=92s 3 references that may or may
>
> >J. C. Hassab, R. E. Boucher, =93Optimum Estimation of Time Delay by a
> >Generalized Correlator,=94 IEEE T-ASSP, vol. 27, no. 4, Aug. 1979, pp.
> >373-380.
>
> >J. C. Hassab, R. E. Boucher, =93Performance of the Generalized Cross
> >Correlator in the Presence of a Strong Spectral Peak in the Signal,=94
> >IEEE T-ASSP, vol. 29, no. 3, June 1981, pp. 549-555.
>
> >J. C. Hassab, R. E. Boucher, =93An Experimental Comparison of Optimum
> >and Sub-Optimum Filters=92 Effectiveness in the Generalized
> Correlator,=94
> >J. Sound and Vibration, 1981, pp. 4+ (12 pages total).
>
> >You might look for some simpler processing references to start with
> >(e.g.: use the references mentioned in the above).
>
> >The description provided here barely scratches the surface.  I
> >couldn=92t begin to describe the problems of dealing with weak AWGN
> >signals in strong sinusoidal noise.  In addition, sensor spacing plays
> >a role.  Typically, in an acoustic system, sensor spacing is at the
> >=91half wavelength=92 of the =91design frequency=92 of the sensor array.
> T=
> >hen
> >anti-aliasing is applied to limit the frequencies in the input to be
> >below the design frequency (or sometimes not, depending on the
> >sophistication of the processing).
>
> >I would suggest that you try some simple simulation experiments at
> >first using different waveforms and change the delays between them
> >while using a simple cross correlator.  You might try a generalized
> >cross correlator, but that=92s very ambitious without having taken a
> >course in time delay estimation.
>
> Hello,
> This sounds really confusing to me. I think it doesnt matter from where
> the sound is coming as far as there will be a difference in the arrival and
> difference in the position of the peak when i plot the wave file in matlab.
> I have captured sound from a position between the 4 mics and I can see the
> difference in the peak.
> lets not consider noise at all because I have taken the readings in a
> nosie free environment. can i find the time difference of arrival using
> "xcorr"? if yes, How can i do that?
>
>

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.
```
```On Aug 25, 5:04&#2013266080;pm, 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.  I hope I&#2013266066;m not adding to the guy&#2013266066;s confusion, but cross
correlation isn&#2013266066;t the easiest thing for a beginner to figure out.  I
started writing a response to his last question (obviously, I&#2013266066;m a
little late), and rather than throw it away, I&#2013266066;ll 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.  Consider
a pure sinusoidal signal.  If the peak is displaced by 5 points to the
right of the 0 point, it says that one waveform is delayed by 5 sample
times from the other.  If the peak is displaced 5 points to the left
of the 0 point (it&#2013266066;s in the upper half of the inverse FFT outputs), it
says that the other waveform is delayed by 5 sample times.  So (for an
FFT of even N), if the peak is between points 0 and N/2, then that&#2013266066;s
your time delay in sample times.  If 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.  Perhaps you're being overly confused by the
sound speed, sensor displacement, etc.  The sensor displacement would
come into play if they are, say, a multiple number of wavelengths
apart.  In that case, the actual physical delay would be the
displacement of the peak plus some multiple of N sample times.  And if
you&#2013266066;re 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).

```
```>On Aug 25, 5:04=A0pm, 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.  I hope I=92m not adding to the guy=92s confusion, but cross
>correlation isn=92t the easiest thing for a beginner to figure out.  I
>started writing a response to his last question (obviously, I=92m a
>little late), and rather than throw it away, I=92ll 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.  Consider
>a pure sinusoidal signal.  If the peak is displaced by 5 points to the
>right of the 0 point, it says that one waveform is delayed by 5 sample
>times from the other.  If the peak is displaced 5 points to the left
>of the 0 point (it=92s in the upper half of the inverse FFT outputs), it
>says that the other waveform is delayed by 5 sample times.  So (for an
>FFT of even N), if the peak is between points 0 and N/2, then that=92s
>your time delay in sample times.  If 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.  Perhaps you're being overly confused by the
>sound speed, sensor displacement, etc.  The sensor displacement would
>come into play if they are, say, a multiple number of wavelengths
>apart.  In that case, the actual physical delay would be the
>displacement of the peak plus some multiple of N sample times.  And if
>you=92re 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.

```
```>>On Aug 25, 5:04=A0pm, 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.  I hope I=92m not adding to the guy=92s confusion, but cross
>>correlation isn=92t the easiest thing for a beginner to figure out.  I
>>started writing a response to his last question (obviously, I=92m a
>>little late), and rather than throw it away, I=92ll 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.  Consider
>>a pure sinusoidal signal.  If the peak is displaced by 5 points to the
>>right of the 0 point, it says that one waveform is delayed by 5 sample
>>times from the other.  If the peak is displaced 5 points to the left
>>of the 0 point (it=92s in the upper half of the inverse FFT outputs),
it
>>says that the other waveform is delayed by 5 sample times.  So (for an
>>FFT of even N), if the peak is between points 0 and N/2, then that=92s
>>your time delay in sample times.  If 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.  Perhaps you're being overly confused by the
>>sound speed, sensor displacement, etc.  The sensor displacement would
>>come into play if they are, say, a multiple number of wavelengths
>>apart.  In that case, the actual physical delay would be the
>>displacement of the peak plus some multiple of N sample times.  And if
>>you=92re 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
>try and explain with a code. Thank you.
>
Also lets say for eg,

x=rand(1000,1);
y=rand(1000,1);
x(500)=40; %peak
y(200)=35; %peak
z=xcorr(x,y);
plot(z)

You will see a peak at 1300. Is this the delay = 1300 - length of data
i.e. delay between the two signals = 300. is this the right way?
```
```On Aug 27, 6:53&#2013266080;am, "maz_p5" <maz...@hotmail.com> wrote:
> >>On Aug 25, 5:04=A0pm, 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. &#2013266080;I hope I=92m not adding to the guy=92s confusion, but cross
> >>correlation isn=92t the easiest thing for a beginner to figure out. &#2013266080;I
> >>started writing a response to his last question (obviously, I=92m a
> >>little late), and rather than throw it away, I=92ll 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. &#2013266080;Consider
> >>a pure sinusoidal signal. &#2013266080;If the peak is displaced by 5 points to the
> >>right of the 0 point, it says that one waveform is delayed by 5 sample
> >>times from the other. &#2013266080;If the peak is displaced 5 points to the left
> >>of the 0 point (it=92s in the upper half of the inverse FFT outputs),
> it
> >>says that the other waveform is delayed by 5 sample times. &#2013266080;So (for an
> >>FFT of even N), if the peak is between points 0 and N/2, then that=92s
> >>your time delay in sample times. &#2013266080;If 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. &#2013266080;Perhaps you're being overly confused by the
> >>sound speed, sensor displacement, etc. &#2013266080;The sensor displacement would
> >>come into play if they are, say, a multiple number of wavelengths
> >>apart. &#2013266080;In that case, the actual physical delay would be the
> >>displacement of the peak plus some multiple of N sample times. &#2013266080;And if
> >>you=92re 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
> >try and explain with a code. Thank you.
>
> Also lets say for eg,
>
> x=rand(1000,1);
> y=rand(1000,1);
> x(500)=40; %peak
> y(200)=35; %peak
> z=xcorr(x,y);
> plot(z)
>
> You will see a peak at 1300. Is this the delay = 1300 - length of data
> i.e. delay between the two signals = 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] = Rxy[m-N], m=1, 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 = 40 and y = 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.
```