Matlab:使用cpsd找到相位差

时间:2015-05-14 02:49:11

标签: matlab fft phase

根据我的理解,当使用cpsd函数时:

[Pxy,f] = cpsd(x,y,window,Ns,NFFT,Fs); 

matlab将时间序列数据切割成具有您指定大小的较小窗口。并且窗口被Ns数据点移动。最终[Pxy, f]是从每个窗口获得的结果的平均值。如果我对这个过程有误,请纠正我。

我的问题是,如果我在特定频率使用angle(Pxy),比如34Hz。这是否给出了频率为34Hz的信号xy之间的相位差?

我对此有疑问,因为如果Pxy是每个窗口之间的平均值,并且因为每个人都被窗口偏移所抵消,那么这并不意味着平均Pxy& #39; s阶段受窗口偏移的影响?

我试图通过确保窗口偏移对应于对应于34Hz的全相位差的整数来纠正这一点。这是对的吗?

关于我在做什么的一点背景:

  • 我基本上在1000Hz的采样率下有超过60秒的时间序列压力测量。

  • 功率谱分析表明每个信号的峰值频率为34 Hz。 (平均所有窗口)

  • 我想比较每个信号与34Hz峰值对应的相位差。

  • 单个窗口的FFT分析显示该峰值频率四处移动。所以我不确定cpsd是否是正确的方法。

  • 我目前正在考虑尝试使用xcorr来计算信号之间的总时滞,然后计算相位差。我也听说过希尔伯特变换,但我不知道它是如何工作的。

1 个答案:

答案 0 :(得分:0)

是的,cpsd有效。 您可以通过设置两个输入信号来测试结果,例如:

t=[0:0.001:5];
omega=25;
x1=sin(2*pi*omega*t);
x2=sin(2*pi*omega*t+pi/3);

您可以检查cpsd计算的相移是否为pi / 3。