如何匹配相同数据集的lomb-scargle和FFT图?

Den*_*alo 2 python psd fft units-of-measurement

我正在做一些工作,比较一段时间内某些气体浓度的插值fft,其中不均匀采样,使用相同数据的lomb-scargle周期图.我正在使用scipy的fft函数来计算傅里叶变换,然后将其模数平方以得到我认为的功率谱密度,以十亿分之一(ppb)平方为单位.

我可以得到lomb-scargle图几乎与FFT的精确模式相匹配,但从不相同的幅度,FFT功率谱密度总是更高,即使我认为lomb-scargle功率是功率谱密度.现在我正在使用的lomb代码:http://www.astropython.org/snippet/2010/9/Fast-Lomb-Scargle-algorithm,将数据集标准化,取消平均值并除以数据方差的2倍,因此,我以相同的方式对FFT数据进行了归一化,但幅度仍然不匹配.

因此我做了一些更多的研究,发现标准化的坟墓疤痕能力可以无法完成,因此我不能将这些情节匹配.这引出了我的两个问题:

  1. 什么单位(如果有的话)是标准化的lim-scargle perioogram的功率谱密度?

  2. 在幅度和模式方面,我如何将我的fft情节与我的lomb-scargle情节相匹配?

谢谢.

And*_*our 5

一系列傅里叶变换的平方模数定义为能谱密度(ESD).您需要将ESD除以系列的长度,以转换为功率谱密度(PSD)的估计值.

单位

PSD的单位是[单位]**2/[频率],其中[单位]表示原始系列的单位.

正常化

为了检查正确的归一化,可以数字地积分白噪声的PSD(具有已知的方差).如果积分频谱等于系列的方差,则归一化是正确的.但是,因子2(太低)不是不正确的,并且可能表明PSD被标准化为双面的 ; 在这种情况下,只需乘以2,你就可以得到一个正确标准化的单面PSD.

使用numpy,randn函数生成高斯分布的伪随机数.例如

10 * np.random.randn(1, 100)
Run Code Online (Sandbox Code Playgroud)

产生1乘100的数组,其中mean = 0且方差= 100.如果采样频率为1-Hz,理论上单面 PSD在200个单位**2/Hz,从[0,0.5] Hz开始是平坦的; 因此,综合频谱将为10,等于系列的方差.

更新

我修改了您链接的python代码中包含的示例,以演示正态分布的长度为20的系列的规范化,方差为1,采样频率为10:

import numpy
import lomb
numpy.random.seed(999)
nd = 20
fs = 10
x = numpy.arange(nd)
y = numpy.random.randn(nd)
fx, fy, nout, jmax, prob = lomb.fasper(x, y, 1., fs)
fNy = fx[-1]
fy = fy/fs
Si = numpy.mean(fy)*fNy
print fNy, Si, Si*2
Run Code Online (Sandbox Code Playgroud)

这给了我:

5.26315789474 0.482185882163 0.964371764327
Run Code Online (Sandbox Code Playgroud)

它向您展示了一些东西:

  1. 要求的"奈奎斯特"频率实际上是采样频率.
  2. 结果需要除以采样频率.
  3. 对于双面PSD,输出被归一化,因此乘以2使得积分频谱接近1.