【问题标题】:Negative power spectrum负功率谱
【发布时间】:2017-11-13 01:02:02
【问题描述】:

我收集了 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,因为数据点是每月一次,所以希望频率范围是每年?

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

负能量

正在分析的系列

【问题讨论】:

    标签: python fft spectrum


    【解决方案1】:

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

    这里有正值和负值,但一般情况下,您会标准化数据(按最大值),这样所有值都是负值,最大值设置为 0。这可以使用:

    p.plot(norm=True)
    

    您可以绘制原始数据(没有 log 函数),但您需要使用原始数据(在频域中)。例如,要重现 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/) 的主要作者。

    【讨论】:

      猜你喜欢
      • 2017-07-28
      • 2013-12-03
      • 1970-01-01
      • 1970-01-01
      • 2017-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多