我有两个信号,一个对另一个有反应,但有一定的相移。
现在我想计算相干性或归一化互谱密度,以估计输入和输出之间是否存在因果关系,从而找出这种相干性出现在哪个频率上。
例如,请参见该图像(来自here),该图像在频率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()
.
.
编辑:
不管有什么价值,我已经补充了一个答案,也许是对的,也许是错的。我不确定。。
让我试着回答我自己的问题,也许有一天它可能对其他人有用,或者作为(新的)讨论的起点:
首先计算两个信号的功率谱密度
导致:
其次计算互谱密度,即互相关函数的傅里叶变换:
它给出:
比使用交叉谱密度,我们可以计算相位,我们可以计算相干性(这将破坏相位)。现在我们可以把一致性和高于95%置信水平的峰值结合起来
结果:
综上所述:在10分钟周期内,最相干峰的相位为~1度(s1导联s2)(假设
dt
是一个分钟测量值)—>;(10**-1)/dt
但是一个专业的信号处理可能会纠正我,因为我有60%的把握如果我做得对的话
我已经准备了一个Jupyter Notebook来解释交叉光谱分析,包括它的不确定性。
截图:
我不确定,相位变量是在哪里计算的,答案是@Mattijn。
你可以从实数和 交叉谱密度的虚部。
要关联的两个信号的功率谱密度:
两个信号的相干性和相位(放大到10赫兹):
这里是真实的和想象的(!)部分交叉光谱密度:
相关问题 更多 >
编程相关推荐