# Time delay estimation in low SNR

So I am interested in finding delay between two noisy narrowband signals,for example, two arterial pulse waveform. I can easily get a correct estimate of delay using cross-correlation method, but it fails in low SNR cases. I know Generalized Cross Correlation (GCC) method is supposed to give better results in these cases, but as I am working with narrowband signals, and also due to incorrect estimates of power spectral densities, GCC is very unstable, and the results are worse than normal cross-correlation. So my question is are there any methods for finding time delay between signals in low SNR and are more accurate than the above 2 mentioned methods?

• Good question; I can't imagine there is anything that can perform better than a true cross-correlation for establishing the best estimate of the delay between two identical signals (are they indeed identical?), assuming the signals are uncorrelated to the noise and you have no further information about the noise. Interested to see what responses you get. Mar 16, 2017 at 21:20
• @DanBoschen maybe with a-priori knowledge on the signals involved? Akash, can you define "low energy cases" in SNR? And, how long is your correlation period? It's perfectly possible you're hitting Cramér-Rao here. Mar 16, 2017 at 22:02
• What would also be interesting would be variance of your estimation error (if you can know that), and the bandwidth and sampling rate, as well your degree of knowledge of the signal's center frequency and bandwidth. Mar 16, 2017 at 22:11
• I am calculating the variance of my estimation error. I have a plot with variance in y-axis and SNR on x-axis. And that is how I observed that GCC has larger variance than simple cross correlation for SNR range of -10 to 10 dB. And also by plotting the Cramer Rao bound, I know its not hitting the lower bound. Mar 16, 2017 at 22:16
• @MarcusMüller yes that is a good thought, if you know the signals involved and you are correlating each to the perfect signal should be better than what you could do relative to each other (3 dB less noise, correct?) Mar 17, 2017 at 0:48

Quite often, performing a time-delay estimation in a transformed domain can help,as long as the signal gets better concentrated, and/or the noise is more spread.

So performing the CC or GCC in a time-frequency or time-scale (wavelet) domain could be useful, as long as you can select the frequency band or the scale in which the correlation will be meaningful.

If the noise characterics are unknown, you can benefit from wavelet whitening capabilities.

You can check for instance:

For Matlab codes:

• Thanks for your answer. I will definitely try this method. Mar 16, 2017 at 23:35
• I have added some Matlab references Mar 16, 2017 at 23:44
• Thank you. Also, can you give me some brief insight into why GCC methods are so unstable? Mar 17, 2017 at 4:08
• The issue of stability probably requires a dedicated question, where properties of your noise and signal are given. A running code would be good too Mar 17, 2017 at 7:06
• I tried the wavelet method and the Matlab code, and this is my observation: Wavelet method certainly performed much better than GCC, but the matlab inbuilt function 'finddelay' performed slightly better than wavelets. Thanks. Mar 18, 2017 at 2:45