psi*_*lia 8 c embedded algorithm audio signal-processing
给定是320个元素(int16)的数组,其表示持续时间为20ms的音频信号(16位LPCM).我正在寻找一种最简单,最快速的方法,它应该决定这个数组是否包含有效音频(如语音或音乐),而不是噪音或静音.我不需要非常高质量的决定,但它必须非常快.
我首先想到添加元素的所有正方形或绝对值,并将它们的总和与阈值进行比较,但是这种方法在我的系统上非常慢,即使它是O(n).
你不会比平方和方法快得多.
到目前为止,您可能没有做的一个优化是使用总计.也就是说,在每个时间步骤中,不是对最后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就会严重不足......