首页 > 解决方案 > 了解 Python 3 matplotlib.plot.cohere 和 scipy.signal.coherence 函数

问题描述

我试图理解为什么在 Python 3.7.3 中使用这些一致性代码会得到一些奇怪的结果。

因此,如果我理解正确,如果两个信号具有相同的频率和幅度,但相位相同,那么它们之间的相干性应该为 1(100%)。为了测试这一点,我编写了一些代码:

import numpy as np
import matplotlib.pyplot as plt
from scipy import signal as sig

samp = 1000 
freq = 5
x = np.arange(samp)
y = np.sin(2*np.pi*freq*x/samp) # first signal
y2 = np.cos(2*np.pi*freq*x/samp) # second signal, phased .5 pi radians

# First attempt at testing coherence:

ff, Cxy = sig.coherence(y, y2)
plt.semilogy(ff, Cxy)
plt.show()

这给了我一个图,显示在频率 0 和频率 0.5 处的相干性约为 1,两者之间的相干性值较低。

第一个情节

然后我尝试了这个:

plt.cohere(y, y2)
plt.show()

它给了我一个在 ~ 频率 0、0.5 和 1 处相干性为 1 的图,两者之间的相干性较低。

第二个情节

好的,那么,我现在该如何解释呢?我的目标是用它来衡量某些频率区间的相干性,例如 1-5 Hz、5-12 Hz 等……我假设为此目的我会平均每个数据点的相干系数在这些频率边界之间。但是,如果信号频率为 5,我不明白为什么我的相干值的输出在 0-0.5 和 0-1.0 之间。这是否意味着我应该将图形的频率轴乘以信号频率? 我非常感谢一些帮助更好地理解这个输出。

标签: pythonnumpymatplotlib

解决方案


推荐阅读