phase shift using xcorr

23 Ansichten (letzte 30 Tage)
ZIYI LIU
ZIYI LIU am 17 Mai 2022
Bearbeitet: ZIYI LIU am 17 Mai 2022
Dear all, I have a question really need your help. I have two functions, and I want to know their phase shift based on the period, but not the lags.
Here is the code: (I just modified the code from other questions)
t = 1 :0.1: 20;
phaseshift= pi/2;
s1 = sin (2*t);
s2 = sin (2*t+ phaseshift);
figure(1); clf;
plot (t,s1,'r', t,s2,'k');
figure;
[c,lag] = xcorr(s1,s2);
plot(lag,c)
[c,lags]=xcorr(s1,s2);
[~,iLag]=max(c(find(lags==0):end))
s3=circshift(s2,[0 iLag]);
figure;
plot(t,s1,t,s3)
I know the lags, but how do I get the phase shift based on 2*pi? (eg. the phase shift betweenthese two lines is pi, 1/2 period, because 2*t)
Thank you very much!
BEST,
zIYI

Antworten (1)

VBBV
VBBV am 17 Mai 2022
t = 1 :0.1: 20;
phaseshift= pi/2;
s1 = sin(2*t);
s2 = sin(2*t+ phaseshift);
figure(1); clf;
plot (t,s1,'r', t,s2,'k');
figure;
[c,lag] = xcorr(s1,s2);
plot(lag,c)
[c,lags]=xcorr(s1,s2);
[~,iLag]=max(c(find(lags==pi):end)) % compare with pi
iLag = 1×0 empty double row vector
s3=circshift(s2,[0 iLag]);
figure;
plot(t,s1,t,s3)
  1 Kommentar
ZIYI LIU
ZIYI LIU am 17 Mai 2022
Bearbeitet: ZIYI LIU am 17 Mai 2022
Hi VBBV,
Yes, I got the lags of the max c is around 8, but how do I connect the x with phase shift?
For example, we don't know the phase shift, we only have two data like the lines, and want to know the phase shift between these two lines. Now, we have the lags is 8, how do we know the phase shift is pi/2(or 1/4 period)?
Thanks!

Melden Sie sich an, um zu kommentieren.

Community Treasure Hunt

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

Start Hunting!

Translated by