2
$\begingroup$

I am working with real-valued baseband time series amplitude data, $x_n$, which is acoustic data (sound pressure converted to a voltage by the hydrophone) from ocean-based directional hydrophones, with a spectrum typically in the 100 - 2000Hz range. My typical sampling frequency ($f_s$) is 10kHz.

I want to use a few seconds of data ($N$ data values) at one hydrophone to determine if other hydrophones have received the same signal (say, the movement of a whale through the water) by cross-correlation to determine the time lag and thus the time difference of arrival.

The directional data of the hydrophones allow me to calculate a rough motion for the whale, which gives me an estimate of the range rate between the whale and each hydrophone. Together with the known speed of sound in sea water ($c$), I can calculate the expected Doppler shift at any particular frequency of interest ($f_0$) as: $$\Delta f = f_0 \left( \frac{c}{c+R'} - 1 \right)$$

As an example, then, say I'm trying to cross correlate data that I suspect has energy in the frequency range 400 - 600 Hz, so it seems reasonable to set $f_0$ = 500Hz.

Here's the signal processing part of my question... Before cross-correlating, I want to create a Doppler-shifted/scaled replica of the data ($\bar{x_n}$) on the nearest hydrophone (I know which is nearest because of the rough motion estimate from directional data), with respect to each other hydrophone (to account for the possible Doppler shift at each hydrophone location, since each may have a different relative range rate). Currently, I'm creating this replica by multiplying each data value by a complex phasor, $P$, defined as:

$$a = \frac{\Delta f}{Nf_s}$$ $$\Delta P = e^{i 2\pi a}$$ $$P = 1$$

Then I iterate through the data samples to produce the replica: $$\bar{x_n} = x_n P$$ $$P = P \Delta P$$

Is this procedure valid? I figured we're in baseband (no carrier frequency), so I don't have to first do a Hilbert transform.

I understand that what's happening is a time-compression (for negative range rate, motion toward a hydrophone), so I'll have $\bar{x_n}$ with $N$ values, but their $\Delta t$ will be different from the original data samples. When I then do a cross correlation with data from another hydrophone, won't that imply two different sampling rates?

My goal is to take the $\bar{x_n}$ shifted samples, and use them as a kernel in a cross-correlation to a larger collection (say, $4N$) of data samples from another hydrophone to calculate time lag, and thus time difference of arrival.

Thanks for any help - I'm clearly not a DSP engineer, but find myself having to solve this problem, and want to make sure my process is valid.

$\endgroup$

1 Answer 1

2
$\begingroup$

The easiest way to correct for known constant doppler shift is IMO sampling rate conversion. For example, if you expect 500Hz and get 520Hz you simply convert by $\frac{520}{500} = 1.04$ without changing the nominal sample rate. This brings all signals back to the source clock domain, which you need for cross correlation anyway.

This may or may not the right thing to do in your case. You have the three different clock domains. Source, Media and Receiver (Whale, water & microphone). The whale may be moving against the water, the water may move against your coordinate system (currents) and your microphone may move with respect to the media (if it's on a boat). In addition sea water is occasionally not very homogeneous: there are local variations in pressure, temperature, salinity, flow rate and direction, etc. which all impact the speed of propagation.

Depending on how the signals are generated (e.g. reflections vs generated by the whale) and what exactly you need to calculate, you need to chose the correct clock domain and the respective clock domain transformations.

$\endgroup$
4
  • 1
    $\begingroup$ Thanks! My clock is driven by the hydrophones, which are buoys with GPS location/timestamps. We measure water temperature at various depths in a general area of operation, so typically can get a good estimate of prop loss. $\endgroup$ Commented Dec 24, 2024 at 16:14
  • $\begingroup$ Regarding the resampling... my understanding is that I would insert (using your example) 520 - 1 = 519 zeroes between each sample, do a lowpass filter at 500 / 2 = 250Hz, and then take every 500th sample? $\endgroup$ Commented Dec 24, 2024 at 16:17
  • 1
    $\begingroup$ Given the the Doppler Shifts can be rather small, I would go for an asynchronous (or irrational) sample rate converter. Doing a rational one will be quite cumbersome for ratios close to 1. $\endgroup$ Commented Dec 24, 2024 at 18:02
  • $\begingroup$ Great, thanks! I'll give that a search and see what sticks. $\endgroup$ Commented Dec 24, 2024 at 18:56

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.