音频信号的起始检测

信息处理 fft 声音的 信号分析 stft mfcc
2022-02-19 09:00:53

我在理解作者如何获得本文中音频歌曲的起始信封时遇到问题

下面引用了有问题的整个部分:

首先将输入声音重新采样到 8 kHz,然后我们使用 32 ms 的窗口和帧之间的 4 ms 提前计算短期傅里叶变换 (STFT) 幅度(频谱图)。然后通过频谱图值的加权求和映射到 40 个 Mel 波段,将其转换为近似的听觉表示 [Ellis, 2005]。我们使用听觉频率尺度来平衡每个频带的感知重要性。梅尔谱图转换为 dB,并在每个频带中计算沿时间的一阶差分。负值设置为零(半波整流),然后在所有频带上对剩余的正差值求和。该信号通过一个截止频率约为 0.4 Hz 的高通滤波器,使其局部为零均值,并通过与大约 20 ms 宽的高斯包络进行卷积来平滑。这给出了一个作为时间函数的一维起始强度包络,它响应于在近似听觉频带上总和的能量的成比例增加

我对程序第一部分的过程的理解是,我们的 44.1KHz 音频信号被重新采样到 8KHz,然后我们对其执行重叠的寡妇 STFT 操作,因此我们得到傅立叶变换系数。

但我真的不知道程序的第二部分发生了什么:

我认为我们然后改变这些系数,使新的傅立叶变换系数现在在感知上得到平衡(即系数现在是人的耳朵所感知的)。然后转换所谓的合成“梅尔谱图”到dB,并在每个频带中计算沿时间的一阶差。然后将负值设置为零(半波整流),然后将剩余的正差在所有频带上求和。

为什么以及如何计算一阶差分?这有什么用?我对 Mel 量表没有广泛的了解,它是所谓的“频带”,所以这部分很难理解。

该信号通过一个截止频率约为 0.4 Hz 的高通滤波器,使其局部为零均值,并通过与大约 20 ms 宽的高斯包络进行卷积来平滑。这给出了一个作为时间函数的一维起始强度包络,它响应于在近似听觉频带上总和的能量的成比例增加

为什么我们需要信号是局部零均值的?

1个回答

首先,您的问题的标题具有误导性,因为起始检测与包络检测非常不同。起音检测功能不会告诉你一个音符弹了多长时间或它的起音有多慢……包络会。如果您尝试解决的问题是包络检测,您可能会从起始检测文献中获得灵感,但在某些时候方法会有所不同。起始检测提取包络的“卡通”版本,其中强调所有突然的变化以使其检测容易。

我认为我们然后以这样一种方式改变这些系数,使得新的傅立叶变换系数现在在感知上得到平衡(即,系数现在是人的耳朵所感知的)

这是通过将 FFT 在 mel 标度定义的 40 个频率范围内的能量(平方幅度)相加来完成的 - 通常使用三角形来强调不同的中心频率。

检查我对这个问题的回答的第 4 点。

为什么以及如何计算一阶差分?

这是1z1筛选。

因此,一阶差分只是时间 t 时给定 Mel 带中的能量减去时间 t-1 时相同 Mel 带中的能量。

我们对检测发病感兴趣。发作的主要特征是整个光谱的能量突然上升。一阶差分的正值表示能量在一个频带中上升。当对所有频段求和时,当有音符开始时,这给出的值很可能很高。

我们在 40 个频带上而不是在时域中进行这种检测,以检测在时域中会被响亮的声音掩盖的事件。例如,想象一个录音,在一个响亮的、嗡嗡作响的贝司合成器上播放高钹的声音。在时域中,信号的包络线将是一条实线,在播放高镲时只有微小的摆动,因为最主要的声音是低音。但在频域中,低音只占据最低频率,很容易注意到高镲声音的起音,从中频延伸到高频。

为什么我们需要信号是局部零均值的?

它使通过阈值检测更容易检测发病。高通滤波器(或减中值,这是另一种常用的去趋势方法)将使检测函数中的尖峰更加突出。