如何在音频分类中处理不同长度的音频

信息处理 声音的 频谱图 分类
2022-02-18 20:00:48

目前,我正在尝试使用数据集 UrbanSound8K 来尝试一些音频分类。我已经陷入了预处理步骤。

由于音频的长度不同,比如 4 秒或 0.3 秒,我发现即使在使用 mel-spectrogram/MFCC 进行特征提取之后,也无法直接传递到像 PCA 这样的白化算法中。

所以我的问题是在这种情况下我能做什么。我想知道较短序列末尾的零填充。但它似乎不起作用,也不会产生好的结果。

我看到有些人使用 MFCC 并沿时间轴总结 MFCC,例如均值、方差、峰度、偏度……我认为这在这种情况下会起作用,但我只是想知道是否还有其他方法可以这样做。

4个回答

如果信号具有相同的持续时间但使用不同的采样率获得,因此它们具有不同的样本长度,您可以使用更高的采样率重新采样较短的序列以匹配较长的序列。

我建议你比较相似的东西,不要比较不相似的东西。您可以对“短”、“中”和“长”进行初步分类,然后再进行第二组分类。在持续时间类中,执行所需的拉伸和填充。

另一种可能性是将所有内容分解成最短的片段,提取持续时间短的特征,然后将它们用作序列中的标记。

音频分类有很多问题,例如一个窗口中存在多个类别。

零填充数据的开头和/或结尾是一种很好的方法,它不会导致与原始数据无关的信息。一种有效的选择是进入频域您可以将FFT应用于您的时间序列,并将前 m 个 FFT 系数视为您的新数据。这是一个合理的假设,因为较高的频率通常归因于环境或测量噪声,并且数据的主要部分保存在较低频率的系数中。

我认为您可以尝试“归一化”和“离散化”时间变量:给定通用瞬间“时间”的频率幅度,您计算输入信号的长度(以秒为单位),然后计算相应的 bin norm_time = time/max_time. 请注意,您引入了一个新参数,它是输入信号时间间隔中不重叠的连续子间隔的数量。实际上,您只需将每个声音样本的信号时间间隔划分为,然后在每个这样的时间子间隔内汇总(积分-求和)每个频率级别的幅度。通过考虑的频率间隔(类、箱)的数量表示,每个样本的特征集始终具有 元素。max_timetime_bin=int(norm_time*n_time_bins)n_time_binsn_time_binsn_freqn_freq * n_time_bins