负功率谱

时间:2017-11-13 01:02:02

标签: python fft spectrum

我有一套超过65年的780个月温度异常,我想分析一下驱动异常的频率。我已经使用了光谱包来做这个,我在分析之前和之后都包含了该系列的图片。

from spectrum import *

p = Periodogram(anomalies, sampling=1/12)
p.run()
plt.title('Power Spectrum of Monthly Temperature Anomalies')
p.plot(marker='.')
plt.show()

由此产生的光谱有几个明显的负峰值。现在我明白Db中的负值实际上并不是负绝对值,但为什么会发生这种情况呢?这是否意味着我的数据中缺少某些特定频率?因为正峰值意味着存在一个。

另外,为什么大多数频率显示为负数? Db的参考值是什么??

我的一部分认为我应该采用这种光谱的绝对值,但我想理解为什么会出现这种情况。此外,我将采样值作为1/12,因为数据点是每月一次,所以希望频率标准是每年?

非常感谢,这是我在这里的第一篇文章,所以如果我需要更清楚地知道任何事情,请告诉我。

负能量

正在分析的系列

1 个答案:

答案 0 :(得分:1)

如图所示,在y轴上,单位为dB(分贝,https://en.wikipedia.org/wiki/Decibel)。所以看到的不是原始数据(在频域中),而是类似10 * log10(数据)。这解释了负值的存在并且完全正常。

这里有正值和负值,但一般来说,你会将数据标准化(最大值),以便所有值都为负值,最高值设置为0.这可以使用:

p.plot(norm=True)

您可以绘制原始数据(没有日志功能),但您需要使用原始数据(在频域中)。例如,为了重现p.plot函数的行为,您可以使用:

from pylab import plot
plot(p.frequencies(), 10*log10(p.psd/p.psd.max())

因此,如果您不想使用分贝单位,请使用:

from pylab import plot
plot(p.frequencies(), p.psd)
免责声明:我是Spectrum(http://pyspectrum.readthedocs.io/)的主要作者。