Matlab 或 Python 中的节拍检测

信息处理 matlab Python
2022-01-28 14:54:29

尝试确定音频信号中每个“节拍”的开始时间和持续时间(在下图中圈出)。这看起来像一个简单的问题,python 或 Matlab 应该有工具箱/功能来做到这一点,只是找不到它们。我尝试了低通滤波和频率分析,但都没有奏效。在此处输入图像描述

2个回答

您要询问的区域称为“起始检测”,这在整个信号处理过程中都使用,但大多数烤箱用于音乐信息检索以识别音符的开始和停止。

开始的音乐样本

虽然有很多方法可以实现这一点,但让我们考虑两种:能量域和频域。

能量:我们知道,当信号出现尖峰时,信号的能量会显着增加。您可以简单地创建采样窗口并通过跟踪曲线下的面积来计算窗口的平均绝对能量。当您看到大幅增加时,这意味着您已达到峰值(或足够接近发病)

频率:我们知道,在时域中,如果信号幅度高且时间短,它将在频域中广泛传播,其中大部分内容位于频谱的高端。(狄拉克函数就是一个很好的例子)

您可以将信号切割成小窗口,计算 FFT 并检测高频内容何时发生较大变化。

这两种方法在理论上是相同的,但是您的实现会导致不同的准确性。

这是一个关于许多发病检测算法的教程。

节拍非常突然,并且包含相当大的信号功率。低通滤波和小波变换后的功率阈值是不错的选择。

如果您更具体并附上一些代码,我们将能够提供更好的帮助。