如何计算对数间隔的功率谱?


20

我想计算一个功率频谱,其中频率以对数间隔分布。

韦尔奇(Welch)的方法中,要在所得功率谱的频率分辨率和平均值(即结果误差)之间进行权衡。我希望这种权衡是动态的,即对低频点进行较少的平均值计算,以便在低频下获得更好的分辨率。

有标准的方法吗?

我想一种方法是首先pwelch以非常高的分辨率(较低的平均数)进行处理,然后使用对数合并重新合并结果频谱。


2
我通常会计算常规频谱,然后简单地将数据绘制成对数刻度。我不确定是否可能直接不使用DFT的修改后的定义,但是我很想知道是否确实有办法。
声子

OP的相关SO问题供有兴趣的人使用。
Lorem Ipsum

:在SO另一个相关的问题stackoverflow.com/questions/9849233/...
nibot

Answers:


9

我找到了一篇论文,直接解决了这个问题:

本文的前几幅图很好地说明了该算法解决的问题,并且参考文献中包含其他方法的有用参考书目(恒定Q变换,回火傅立叶变换,调查文章等)。

他们的方法不是重新组合现有基于FFT的功率谱估计的输出,而是仅在感兴趣的(对数间隔)频率上计算离散傅立叶变换。对于要估计的每个频率,它们基本上实现了韦尔奇算法,但是具有为每个频率专门选择的变换长度(因此还有平均次数)。每个频点的计算使用整个时间序列,但分段方式不同。结果具有令人满意的性质,即分辨率(箱宽)是频率的平滑函数,并且可以将结果校准为功率谱密度或功率谱。

Matlab实现在这里:https : //github.com/tobin/lpsd

在此处输入图片说明 披露:本文的作者与我位于同一机构。


1
以这种方式计算频谱有什么好处?这种方法的动机是什么?
Spacey 2012年

1
它可能比使用FFT计算功率谱然后在某些情况下重新合并更快。
nibot 2012年

我开始了一个Python实现:github.com/rudolfbyker/lpsd它仍然需要测试。欢迎捐款。
rudolfbyker '18

1

在这种情况下,我将使用 最小二乘法来计算某些已知值列表的频率。最常见的方法是Lomb方法。它的工作原理与FFT或DFT十分相似,但是它只会计算每个确定频率下的频率,如果有问题,它可以处理丢失的数据。这个想法如下:

  1. w要计算),以适合您要采样的所需频带。
  2. wŤĴXĴ

PXω=1个2[ĴXĴcosωŤĴ-τ]2Ĵcos2ωŤĴ-τ+[ĴXĴωŤĴ-τ]2Ĵ2ωŤĴ-τ

请注意,这不会像FFT那样好缩放,因此,只有在所需频率的数量比收集所有数据所需的FFT低得多的情况下,我才这样做。

否则,可以执行插值方法或对FFT或DFT进行任何其他重新采样。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.