根据我的理解,当使用cpsd函数时:
[Pxy,f] = cpsd(x,y,window,Ns,NFFT,Fs);
matlab将时间序列数据切割成具有您指定大小的较小窗口。并且窗口被Ns数据点移动。最终[Pxy, f]
是从每个窗口获得的结果的平均值。如果我对这个过程有误,请纠正我。
我的问题是,如果我在特定频率使用angle(Pxy)
,比如34Hz。这是否给出了频率为34Hz的信号x
和y
之间的相位差?
我对此有疑问,因为如果Pxy
是每个窗口之间的平均值,并且因为每个人都被窗口偏移所抵消,那么这并不意味着平均Pxy
& #39; s阶段受窗口偏移的影响?
我试图通过确保窗口偏移对应于对应于34Hz的全相位差的整数来纠正这一点。这是对的吗?
关于我在做什么的一点背景:
我基本上在1000Hz的采样率下有超过60秒的时间序列压力测量。
功率谱分析表明每个信号的峰值频率为34 Hz。 (平均所有窗口)
我想比较每个信号与34Hz峰值对应的相位差。
单个窗口的FFT分析显示该峰值频率四处移动。所以我不确定cpsd是否是正确的方法。
我目前正在考虑尝试使用xcorr来计算信号之间的总时滞,然后计算相位差。我也听说过希尔伯特变换,但我不知道它是如何工作的。
答案 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。