理解Scipy相干函数的结果

2024-05-29 05:19:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个这样的信号:

enter image description here

每个信号的长度为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()

结果是:

enter image description here

我不了解图表的一些方面:

  1. scipy是如何创建频率箱的
  2. 为什么在0.01频率下没有预期的峰值
  3. 不同山峰的含义是什么

Tags: 数据函数fromimportsignal信号pltscipy
2条回答

我认为你对连贯性的期望和scipy的连贯性函数不匹配

相干性度量线性系统中从输入到输出的功率。当我看你们的图时,0.01似乎是周期,但信号的周期并不意味着它是相干性,因为相干性是由功率谱密度组成的比率。因此,在使用相干性之前,请尝试检查自相关&;与它们直接相关的互相关序列

所以,峰值意味着更可能(不)将功率从输入传输到输出,但我不知道信号之间的关系

Scipy的相干函数通过两个信号的PSD估计相干度,而不是通过Welch的周期图方法对信号本身进行傅里叶变换。因此,如果您在计算中确定,请始终检查窗口功能和采样率

希望这有帮助

连贯性是一个统计量。它是通过对同一信号的多个实现进行平均(集合平均)得到的。在实践中,通过对信号进行切片,并假设它们都是等效的,即假设信号是静止的,从而获得这些实现

通过选择nperseg=500,这是信号的大小,您基本上只使用1个实现,而不进行任何平均。因此,所有频率的相干性均为1(近似值)。选择nperseg=50这样的值来平均10次信号的实现,您应该会得到预期的结果

相关问题 更多 >

    热门问题