<p>让我试着回答我自己的问题,也许有一天它可能对其他人有用,或者作为(新的)讨论的起点:</p>
<p>首先计算两个信号的功率谱密度</p>
<pre><code>subplot(121)
psd(s1, nfft, 1/dt)
plt.title('signal1')
subplot(122)
psd(s2, nfft, 1/dt)
plt.title('signal2')
plt.tight_layout()
show()
</code></pre>
<p>导致:<img src="https://i.stack.imgur.com/XbZ7k.png" alt="enter image description here"/></p>
<p>其次计算互谱密度,即互相关函数的傅里叶变换:</p>
<pre><code>csdxy, fcsd = plt.csd(s1, s2, nfft, 1./dt)
plt.ylabel('CSD (db)')
plt.title('cross spectral density between signal 1 and 2')
plt.tight_layout()
show()
</code></pre>
<p>它给出:</p>
<p><img src="https://i.stack.imgur.com/RdMkK.png" alt="enter image description here"/></p>
<p>比使用交叉谱密度,我们可以计算相位,我们可以计算相干性(这将破坏相位)。现在我们可以把一致性和高于95%置信水平的峰值结合起来</p>
<pre><code># coherence
cxy, fcoh = cohere(s1, s2, nfft, 1./dt)
# calculate 95% confidence level
edof = (len(s1)/(nfft/2)) * cxy.mean() # equivalent degrees of freedom: (length(timeseries)/windowhalfwidth)*mean_coherence
gamma95 = 1.-(0.05)**(1./(edof-1.))
conf95 = np.where(cxy>gamma95)
print 'gamma95',gamma95, 'edof',edof
# Plot twin plot
fig, ax1 = plt.subplots()
# plot on ax1 the coherence
ax1.plot(fcoh, cxy, 'b-')
ax1.set_xlabel('Frequency (hr-1)')
ax1.set_ylim([0,1])
# Make the y-axis label and tick labels match the line color.
ax1.set_ylabel('Coherence', color='b')
for tl in ax1.get_yticklabels():
tl.set_color('b')
# plot on ax2 the phase
ax2 = ax1.twinx()
ax2.plot(fcoh[conf95], phase[conf95], 'r.')
ax2.set_ylabel('Phase (degrees)', color='r')
ax2.set_ylim([-200,200])
ax2.set_yticklabels([-180,-135,-90,-45,0,45,90,135,180])
for tl in ax2.get_yticklabels():
tl.set_color('r')
ax1.grid(True)
#ax2.grid(True)
fig.suptitle('Coherence and phase (>95%) between signal 1 and 2', fontsize='12')
plt.show()
</code></pre>
<p>结果:</p>
<p><img src="https://i.stack.imgur.com/Xd5U5.png" alt="enter image description here"/></p>
<p>综上所述:在10分钟周期内,最相干峰的相位为~1度(s1导联s2)(假设<code>dt</code>是一个分钟测量值)—>;<code>(10**-1)/dt</code></p>
<p>但是一个专业的信号处理可能会纠正我,因为我有60%的把握如果我做得对的话</p>