最简单快速的音频活动检测方法?

psi*_*lia 8 c embedded algorithm audio signal-processing

给定是320个元素(int16)的数组,其表示持续时间为20ms的音频信号(16位LPCM).我正在寻找一种最简单,最快速的方法,它应该决定这个数组是否包含有效音频(如语音或音乐),而不是噪音或静音.我不需要非常高质量的决定,但它必须非常快.

我首先想到添加元素的所有正方形或绝对值,并将它们的总和与阈值进行比较,但是这种方法在我的系统上非常慢,即使它是O(n).

Mar*_*n B 6

你不会比平方和方法快得多.

到目前为止,您可能没有做的一个优化是使用总计.也就是说,在每个时间步骤中,不是对最后n个样本的平方求和,而是保持运行总计并使用最新样本的平方更新.为了避免您的总计不断增长和增长,请添加指数衰减.在伪代码中:

decay_constant=0.999;  // Some suitable value smaller than 1
total=0;
for t=1,...
    // Exponential decay
    total=total*decay_constant;

    // Add in latest sample
    total+=current_sample;

    if total>threshold
        // do something
    end
end
Run Code Online (Sandbox Code Playgroud)

当然,您必须调整衰减常数和阈值以适合您的应用.如果这还不够快,无法实时运行,那么你的DSP就会严重不足......

  • 不要忘记添加一个简单的滤波器来消除所有高频噪声.低通滤波器可以像"记住"前一个样本一样简单,并将其与电流平均,并使用它代替原始样本.非常快速且非常有效 (3认同)