我正在尝试用最少的样本检测音频频谱的窄范围内的音高。这对应于某些机械系统的嘎嘎声。例如,发动机的嗡嗡声。
为此,我希望确定在某个范围内是否存在频率,例如 550hz-555hz。
我与一位博学的人就这个问题进行了交谈,他提到 FFT 有一种变体,它只针对所需的频率范围。这个叫什么?
我希望通过在频域中区分峰值和白噪声来避免幅度(音量)训练期。谁能指出一个可调参数,使我能够确定某个范围是否有峰值?我正在考虑将最大高度与平均值进行比较。
我想知道是否有人知道这样做的好方法。
我正在尝试用最少的样本检测音频频谱的窄范围内的音高。这对应于某些机械系统的嘎嘎声。例如,发动机的嗡嗡声。
为此,我希望确定在某个范围内是否存在频率,例如 550hz-555hz。
我与一位博学的人就这个问题进行了交谈,他提到 FFT 有一种变体,它只针对所需的频率范围。这个叫什么?
我希望通过在频域中区分峰值和白噪声来避免幅度(音量)训练期。谁能指出一个可调参数,使我能够确定某个范围是否有峰值?我正在考虑将最大高度与平均值进行比较。
我想知道是否有人知道这样做的好方法。
它可能是Goertzel 的算法,尽管它着眼于单个频率而不是特定频段。
另一种方法是应用调制技术将您感兴趣的范围的中心频率转移到基带中,也就是“缩放 FFT”。
您对最大平均比率的直觉很好。另一个“峰值”指标是几何平均值与算术平均值的比率。
几点
算法的一个建议
它是这样工作的:您查看信号的频谱,其中心频率周围的带宽为 10Hz 和 100Hz。如果频谱大部分是白色(或音频通常是粉红色),则 100Hz 频带中的能量应该是 10Hz 频带中能量的大约 10 倍。现在,如果您在 10 Hz 频带中有一个非常窄但很强的频谱分量,那么这也将主导 100 Hz 频带中的能量,因此两个频带中的能量将大致相同。
如果您正在寻找“音高”,例如振动周期性,而不是频谱频率(这是两个不同的东西),那么请忘记使用 FFT 或 Goertzel 算法,因为这些仅在周期性信号的基频清晰且总是最强的频谱元素(与所有可能的谐波相反)。对于某些类型的系统“嘎嘎作响”,系统响应可能会比振动脉冲频率更强烈地将一个或多个谐波传递出系统。
对于振动音高,请尝试自相关(或相关的 AMDF 或 ASDF 方法)并在您希望识别的频率的周期性范围内(例如,您的示例中为 1.802 到 1.818 mS)寻找时间滞后的峰值。找到具有这种精度的峰值所需的窗口大小将取决于您的信噪比。
如果您已经对背景噪声进行了表征,则可以根据该噪声的统计数据并根据您所需的错误率,为高于背景的峰值设置一个阈值。