scipy.signal.

lombscargle#

scipy.signal.lombscargle(x, y, freqs)[source]#

计算 Lomb-Scargle 周期图。

Lomb-Scargle 周期图由 Lomb [1] 开发,并由 Scargle [2] 进一步扩展,用于在非均匀时间采样下查找和检验弱周期信号的显著性。

normalize 为 False(默认)时,计算的周期图是未归一化的,对于具有幅度为 A 的谐波信号,在足够大的 N 时,它的值为 (A**2) * N/4

normalize 为 True 时,计算的周期图会根据数据围绕常数参考模型(为零)的残差进行归一化。

输入数组应为 1-D,并将被转换为 float64。

参数:
xarray_like

样本时间。

yarray_like

测量值。

freqsarray_like

输出周期图的角频率。

precenterbool,可选

通过减去均值来预先居中测量值。

normalizebool,可选

计算归一化周期图。

返回值:
pgramarray_like

Lomb-Scargle 周期图。

引发:
ValueError

如果输入数组 xy 的形状不同。

参见

istft

逆短时傅里叶变换

check_COLA

检查是否满足恒定重叠加法 (COLA) 约束

welch

使用 Welch 方法计算功率谱密度

spectrogram

使用 Welch 方法计算频谱图

csd

使用 Welch 方法计算交叉谱密度

备注

此子例程使用 Townsend [3] 的一个略微修改的算法来计算周期图,该算法允许仅对每个频率进行一次遍历输入数组就可以计算周期图。

对于大量样本和频率,算法运行时间大致按 O(x * freqs) 或 O(N^2) 缩放。

参考文献

[1]

N.R. Lomb“非均匀间距数据的最小二乘频率分析”,天体物理学和空间科学,第 39 卷,第 447-462 页,1976 年

[2]

J.D. Scargle“天文时间序列分析研究。II - 非均匀间距数据谱分析的统计方面”,天体物理学杂志,第 263 卷,第 835-853 页,1982 年

[3]

R.H.D. Townsend,“使用图形处理单元快速计算 Lomb-Scargle 周期图。”,天体物理学杂志增刊,第 191 卷,第 247-253 页,2010 年

示例

>>> import numpy as np
>>> import matplotlib.pyplot as plt
>>> rng = np.random.default_rng()

首先定义信号的一些输入参数

>>> A = 2.
>>> w0 = 1.  # rad/sec
>>> nin = 150
>>> nout = 100000

随机生成样本时间

>>> x = rng.uniform(0, 10*np.pi, nin)

针对选定的时间绘制正弦波

>>> y = A * np.cos(w0*x)

定义要计算周期图的频率数组

>>> w = np.linspace(0.01, 10, nout)

计算 Lomb-Scargle 周期图

>>> import scipy.signal as signal
>>> pgram = signal.lombscargle(x, y, w, normalize=True)

现在绘制输入数据的图

>>> fig, (ax_t, ax_w) = plt.subplots(2, 1, constrained_layout=True)
>>> ax_t.plot(x, y, 'b+')
>>> ax_t.set_xlabel('Time [s]')

然后绘制归一化周期图

>>> ax_w.plot(w, pgram)
>>> ax_w.set_xlabel('Angular frequency [rad/s]')
>>> ax_w.set_ylabel('Normalized amplitude')
>>> plt.show()
../../_images/scipy-signal-lombscargle-1.png