zero lag when using xcorr on 2 near-similar, shifted timeseries

6 vues (au cours des 30 derniers jours)
Jos Muller
Jos Muller le 22 Sep 2023
Modifié(e) : dpb le 26 Sep 2023
Hi all,
I try to cross correlate two signals which are from 2 different instruments.
I use xcorr to find the lag between signal A (blue) and signal B (red). However, I keep getting 0 lag which should not be the case. As can be seen from the figure, the lag should be around ~ 110 where it gives a quit nice fit.
Attached are the signals A & B.
I'm using xcorr as the following:
[c,lags] = xcorr(A,B);
Thanks in advance for you help.
Kind regards,
Jos
  2 commentaires
Adam Danz
Adam Danz le 22 Sep 2023
load A.mat
whos
Name Size Bytes Class Attributes PIV_mag_test 1x623 2492 single ans 1x30 60 char cmdout 1x33 66 char
load B.mat
whos
Name Size Bytes Class Attributes ADV_sampled 1x623 4984 double PIV_mag_test 1x623 2492 single ans 1x30 60 char cmdout 1x33 66 char
Which variables are A and which are B?
Jos Muller
Jos Muller le 26 Sep 2023
Hi Adam,
Thanks for you comment. This was a bit messy from my side. Indeed as below, it is PIV_mag_test for A.mat and ADV_sampled for B.mat.
Sorry for the inconvenience.
Best,
Jos

Connectez-vous pour commenter.

Réponses (1)

dpb
dpb le 22 Sep 2023
Modifié(e) : dpb le 26 Sep 2023
load A, load B
whos
Name Size Bytes Class Attributes ADV_sampled 1x623 4984 double PIV_mag_test 1x623 2492 single ans 1x30 60 char cmdout 1x33 66 char
subplot(2,1,1)
plot(ADV_sampled)
hold on
plot(PIV_mag_test)
xlim([300 inf])
subplot(2,1,2)
plot(ADV_sampled)
hold on
plot(PIV_mag_test)
xlim([1 200])
legend('B','A','location','northwest')
The two are perfectly in phase over almost 90% of the total signal length; that the lag between the two is zero is what I would expect. From about sample 80 on, the peaks align almost perfectly.
Only the ramp up stage of B before any regular fluctuating behavior was achieved won't correlate highly, and there there simply isnt any significant similar behavior yet to even try to compare. I suppose B is somehow driven by A and you're trying to find where the two become phase locked, maybe?
The only area that appears to have a small phase shift is that A seems to lag B some in that initial startup section between 100 and 200+ samples, but other than within that small segment of the overall signal, there's simply so little lag that a lag shift by even one sample would appear to make the overall worse -- which is what xcorr() is telling you.
A subset section might show something...
  2 commentaires
Jos Muller
Jos Muller le 26 Sep 2023
Modifié(e) : Jos Muller le 26 Sep 2023
Hi DPB,
Thanks for your comment and effort.
The signals are from 2 different instruments measuring the same sinusodial pattern and then made absolute. There is a spinup time indeed. Signal A was started logging a bit earlier (indeed ~100 samples) than signal B. So indeed i'm looking for this lag of signal A to B of expected ~100 samples.
Should I try cross-correlating this spinup period of both signals instead of the full series, to help xcorr finding a more distinct difference?
Best,
Jos
dpb
dpb le 26 Sep 2023
Modifié(e) : dpb le 26 Sep 2023
There simply isn't a phase lag to speak of anywhere there's a defined sinsoidal component so I don't think correlation is the tool that will help.
Making the best first match to the amplitude of the initial peak in A by subsequent peaks in B, might serve to give a way to align them; that might then need a bit of a lag adjustment after the initial guess.
With some creativity, it should be possible to use lsqnonlin to minimize the error between the two traces by adjusting the offset of B relative to A as the parameter to solve for -- the error function would have to account for the changing length for B as it is shifted in some manner; updating the indices to match lengths between the two as pieces are lopped off the front of B.

Connectez-vous pour commenter.

Produits


Version

R2022a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by