为了确定声音的丰富程度,我想确定音乐样本中的谐波数量。为此,我正在使用处理和 Minim 库,它为我提供了一个带有 FFT 的完整频谱。我想知道如何计算 FFT 产生的频谱中的所有峰值,我甚至不对基频感兴趣。
答案 0 :(得分:3)
根据您的需要,有很多方法可以实现这一目标。
如果你想计算每个峰值,那么你应该遍历频谱中的所有频率,记住强度是增加还是减少。每当您注意到方向从增加到减少的变化时,您都会增加峰值计数器。但请注意,这将包括非常微弱的峰值,这可能是您需要的也可能不是。您可以对要注册的峰值的增加和减少量进行最小限制。
或者,您可以找到信号强度的基线(在最简单的情况下使用平均值),然后计算正离群值的数量(与基线的一些可配置的最小偏差)。如果您修改此方法以使用频率相关基线,则可能会获得更好的结果,并且最小值可以解决更高频率下强度逐渐下降的问题(同样,这取决于您的特定信号并且需要这是否有用)。这样做的一个简单方法是将频谱划分为频段(小到足以在每个频段内承担或多或少的平坦能量分布),并为每个频段使用不同的基线和最小值。