我想计算一个功率谱,在该功率谱中频率以对数间隔分布。结果)。我希望这种权衡是动态的,即低频点的平均值较少,以便在低频下具有更好的分辨率。

是否有标准方法可以做到这一点? />
我想一种方法是首先以非常高的分辨率(平均数较少)来进行pwelch,然后使用对数合并重新合并所得到的光谱。

评论

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

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

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

#1 楼

我找到了一篇直接解决此问题的论文:


MichaelTröbs和Gerhard Heinzel,“改进了对数频率轴上数字化时间序列的频谱估计
”,

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

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

此处的Matlab实现:https ://github.com/tobin/lpsd


披露:本文的作者和我在同一机构。

评论


$ \ begingroup $
用这种方法计算频谱有什么好处?这种方法的动机是什么?
$ \ endgroup $
–太空
2012年4月19日在22:14

$ \ begingroup $
在某些情况下,它比使用FFT计算功率谱然后重新绑定要快。
$ \ endgroup $
– nibot
2012年7月24日在11:43

$ \ begingroup $
我开始了Python实现:github.com/rudolfbyker/lpsd它仍然需要测试。欢迎捐款。
$ \ endgroup $
–rudolfbyker
18年4月30日在9:43

#2 楼

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


确定要计算的频率列表($ w $),这些列表适合您要采样的所需频带。
给出频率$ w $,对其采样的时间$ t_j $和值$ X_j $,找到频率的幂,如下所示:

$ P_x(\ omega) = \ frac {1} {2}
\ left(
\ frac {\ left [\ sum_j X_j \ cos \ omega(t_j-\ tau)\ right] ^ 2}
{\ sum_j \ cos ^ 2 \ omega(t_j-\ tau)}
+
\ frac {\左[\ sum_j X_j \ sin \ omega(t_j-\ tau)\ right] ^ 2}
{\ sum_j \ sin ^ 2 \ omega(t_j-\ tau)}
\ right)$

请注意,这不能像FFT那样很好地缩放,所以只有在所需频率的数量远小于FFT的情况下,我才这样做需要收集所有数据。

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