试图理解 Welch 方法的 nperseg 效果

信息处理 功率谱密度
2022-02-03 08:23:28

我是 DSP 的新手,我喜欢计算正确的 PSD。

我有一个以 256Hz 采样的 2s 信号

在此处输入图像描述

我计算 psd

freqs, psd = signal.welch(data, fs=256, nperseg=128, scaling='spectrum')

我选择了不同的 nperseg, 128, 256, ... 以及后来更大的数据。

我计算了 PSD,结果如下:

在此处输入图像描述

如果我增加 nperseg 长度,PSD 会减小(显示 Y 轴),尽管在 X 轴上会出现一些功率箱,因为频率分辨率会增加。

在此处输入图像描述

此外,如果我增加数据长度,例如增加到 4 秒,X 轴的功率会更明显,如下图所示。

在此处输入图像描述

我的目标是分析功率在不同频率下的行为,因此我认为大数据将为 mi 工作提供更好的结果,但是我的数据样本会减少。

我的问题是,计算 PSD 重叠数据是否有效(例如 2 秒的数据块,但重叠 1 秒)?

1个回答

可以在Solomon的这份报告中找到有关 Welch 功率谱密度 (PSD) 估计方法性能的良好参考。

Welch 的方法涉及对可能重叠的数据段中的多个周期图(PSD 估计值)进行平均。这种方法是有益的,因为来自多个周期图的噪声被“平均化”了,尽管在较短的段长度降低频率分辨率的权衡下。(每段的样本数)越大nperseg,可以采用的段或平均值越少,获得的频率分辨率越高。相反,越小nperseg,您获得的噪声抑制越好,但频率分辨率较低。

正如所罗门报告中提到的,当被平均的周期图彼此独立时,降噪效果最有效如果您选择较小的noverlap参数signal.welch(例如 1),则两个相邻的周期图将高度相关,因此不是很独立。

来自所罗门报告的第 8 页:

理想情况下S( noverlap) 应该是最小的值,使得Xk(ν)Xk+1(ν)几乎不相关。这个值S将节省算术运算,但提供最大的平滑量。段之间的转换,S, 通常在0.4MSM.

在哪里M=npersegXk(ν)是离散傅里叶变换值k段。所以回答你的问题:

计算 PSD 重叠数据是否有效(例如 2 秒的数据块,但重叠 1 秒)?

是的,使用重叠段执行 PSD 估计是有效的。您应该使用多少段之间的重叠取决于您的数据在时间上的相关程度。默认情况下,Scipy 设置noverlap=nperseg // 2是因为通常使用 50% 的重叠,并且可能足以解决大多数问题,但不能说这一定是您的案例的理想重叠。如果您知道您的数据可以建模为移动平均模型,那么您最大的相关滞后就是该模型的阶数。

如果您对数据一无所知,50% 的重叠可能是一个合理的估计,但请注意,这只是一个估计,可能与真正的 PSD 不同。对于 0% 重叠,也可以提出相同的论点。确保选择的段长度nperseg能够为您的分析提供足够的频率分辨率。