我有两个信号,我希望其中一个对另一个做出响应,但有一定的相移。
现在我想计算相干性或归一化交叉谱密度,以估计输入和输出之间是否存在任何因果关系,以找出这种相干性出现在哪些频率上。
例如,请参阅此图像(来自此处),它似乎在频率 10 处具有高相干性:
现在我知道我可以使用互相关来计算两个信号的相移,但是如何使用相干性(频率为 10)来计算相移?
图像代码:
"""
Compute the coherence of two signals
"""
import numpy as np
import matplotlib.pyplot as plt
# make a little extra space between the subplots
plt.subplots_adjust(wspace=0.5)
nfft = 256
dt = 0.01
t = np.arange(0, 30, dt)
nse1 = np.random.randn(len(t)) # white noise 1
nse2 = np.random.randn(len(t)) # white noise 2
r = np.exp(-t/0.05)
cnse1 = np.convolve(nse1, r, mode='same')*dt # colored noise 1
cnse2 = np.convolve(nse2, r, mode='same')*dt # colored noise 2
# two signals with a coherent part and a random part
s1 = 0.01*np.sin(2*np.pi*10*t) + cnse1
s2 = 0.01*np.sin(2*np.pi*10*t) + cnse2
plt.subplot(211)
plt.plot(t, s1, 'b-', t, s2, 'g-')
plt.xlim(0,5)
plt.xlabel('time')
plt.ylabel('s1 and s2')
plt.grid(True)
plt.subplot(212)
cxy, f = plt.cohere(s1, s2, nfft, 1./dt)
plt.ylabel('coherence')
plt.show()
.
.
编辑:
对于它的价值,我已经添加了一个答案,也许是对的,也许是错的。我不确定..