在分析弹拨吉他弦时使用 PSD 是否合适?

信息处理 fft Python 音乐
2022-02-15 20:26:47

我正在使用 python 2.7 来比较吉他刺痛的音调差异。

我发现在 matplotlib 中,有一些很棒的内置功能,例如 matplotlib.mlab.magnitude_spectrummatplotlib.mlab.psd

幅度谱函数似乎很简单,因为它是信号的 FFT,显示每个特定的谐波。然而,在比较各种吉他弦时,很难确定每个峰值进行比较。PSD 函数提供了非常漂亮的平滑图形,非常适合进行明显的视觉比较。

我的理解是 PSD 对随机信号很有用,但不一定对已知信号有用。这是真的?有什么理由我不应该使用 PSD 来比较吉他弦吗?

这是 PSD 和幅度谱图的样子:

请注意,这些是同一弦的弹奏,而不是不同的弦。在比较各种字符串之前,我试图确保我的弹奏是一致的。

PSD 幅度谱

2个回答

我真的建议进行短时傅立叶变换,例如:matplotlib.mlab.specgram它为您提供频谱随时间的变化,并且可以使用 PSD 或幅度谱进行计算。

我推荐这个的原因是你的吉他信号在频谱上不是固定的。您的图表只是某个时间点的快照。给你的吉他弦带来音调差异的原因是上面显示的所有谐波随音符长度而变化的方式。

这里这里对 PSD 与 FFT 幅度进行了很好的总结

根据PSD @tobassist 提供链接的描述中提供的描述,PSD 不是比较吉他弦拨弦的合适方法。这是因为 PSD“仅对广义平稳过程有效,因为它的自相关函数只是时间滞后 τ 的函数,而不是绝对时间 t 的函数……”

最终,PSD 似乎只应用于幅度不随时间变化的信号。虽然我只在很短的时间内使用 PSD(500 毫秒或 1 秒),但它可能仍然不合适,尤其是与 FFT / STFT 相比时。