我有两个这样的信号:
每个信号的长度为500年,每年有一个数据点。
从信号来看,预期的相干性应该在0.01
,因为从时域可以看出,两个信号的主频都是100年。但是,使用scipy相干函数如下:
from scipy import signal
f, Cxy = signal.coherence(y1, y2, fs=1.0, nperseg=500)
plt.semilogy(f, Cxy)
plt.xlabel('frequency [1/year]')
plt.ylabel('Coherence')
plt.show()
结果是:
我不了解图表的一些方面:
我认为你对连贯性的期望和scipy的连贯性函数不匹配
相干性度量线性系统中从输入到输出的功率。当我看你们的图时,0.01似乎是周期,但信号的周期并不意味着它是相干性,因为相干性是由功率谱密度组成的比率。因此,在使用相干性之前,请尝试检查自相关&;与它们直接相关的互相关序列
所以,峰值意味着更可能(不)将功率从输入传输到输出,但我不知道信号之间的关系
Scipy的相干函数通过两个信号的PSD估计相干度,而不是通过Welch的周期图方法对信号本身进行傅里叶变换。因此,如果您在计算中确定,请始终检查窗口功能和采样率
希望这有帮助
连贯性是一个统计量。它是通过对同一信号的多个实现进行平均(集合平均)得到的。在实践中,通过对信号进行切片,并假设它们都是等效的,即假设信号是静止的,从而获得这些实现
通过选择nperseg=500,这是信号的大小,您基本上只使用1个实现,而不进行任何平均。因此,所有频率的相干性均为1(近似值)。选择nperseg=50这样的值来平均10次信号的实现,您应该会得到预期的结果
相关问题 更多 >
编程相关推荐