Phase shift correction between 2 signals using cross-correlation

107 Ansichten (letzte 30 Tage)
Sebsatien
Sebsatien am 18 Feb. 2015
Kommentiert: dpb am 17 Mai 2022
Hello
I'm in need of some help if you please.
I have 2 sinsoidal signals with a phase shift of 2Pi/3 between them. Basically, I need to eliminate the phase shift and obtain 2 signals with the same phase. I'm looking forward to use the cross-correlation, that represents the differnce between both signals (the phase shift, in our case), to do so.
My problem is to know how to use the cross-correlation to "correct" the shifted signal by eliminating the phase shift indiquated by the cross-correlation. Which operation to use to do so?
Here is a portion of the code for further understanding :
t = 1 : 1000;
phaseshift= 2*pi/3;
s1 = sin (2*pi*t/500);
s2 = sin (2*pi*t/500+ phaseshift);
figure(1); clf;
plot (t,s1, t,s2);
Axis_x = [-length(s1)+1 : 1 : length(s1)-1];
cross_corr = xcorr(s1,s2,'coeff');
figure(2); clf;
plot( Axe_x, coss_corr,'r');
Thanks in advance

Akzeptierte Antwort

dpb
dpb am 18 Feb. 2015
Bearbeitet: dpb am 18 Feb. 2015
[c,lags]=xcorr(s1,s2); % compute cross correlation; keep lags vector
[~,iLag]=max(c(find(lags==0):end)); % find the max in one-sided
s3=circshift(s2,[0 iLag]); % correct for the shift
For your case I get
>> [~,iLag]=max(c(1000:end))
iLag =
162
>> 2*pi*iLag/500
ans =
2.0358
>> phaseshift
phaseshift =
2.0944
This isn't perfect; illustrates even with pure sine
  8 Kommentare
ZIYI LIU
ZIYI LIU am 17 Mai 2022
Hi dpb,
What if I don't know the functions of these two lines, but only two set of data like these two lines. Then I can have the lags, how do I know the phase shift? Thanks!
dpb
dpb am 17 Mai 2022
You know the number of lags and the sampling time, don't you?

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Sebsatien
Sebsatien am 19 Feb. 2015
Thanks a lot dpb. I tried to keep the lags vector before and I haven't succeded doing so. Now Thanks to you, it's clear. I shall therefore test the code.

Community Treasure Hunt

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

Start Hunting!

Translated by