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
如果输入数组 x 和 y 的形状不同。
参见
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()