如何最好地确定信号的音量?

时间:2012-01-26 13:27:40

标签: android audio rms audio-processing

我想确定音频信号的音量。

我找到了两个选项:

  1. 计算振幅的均方根平方
  2. 找到最大幅度
  3. 使用#1或#2是否有优势?

    以下是我要做的事情:  我希望我的Android能够分析麦克风的音频。我希望设备检测到很大的噪音。输入是短[]。

2 个答案:

答案 0 :(得分:2)

如果您使用最大幅度(2),那么您的音量水平将由单个样本(您甚至可能听不到)确定。在计算与您对声音响度的印象相关的值时,例如声压级或声功率级,您需要使用RMS(1)。

由于您的耳朵对所有频率都不是同样敏感,因此可以通过在信号上使用A-weighting来更好地关联您的感知。以八度音阶分割(滤波)信号,计算每个频段的RMS并应用A加权。

答案 1 :(得分:1)

如果你想检查音量,只需计算其dB值(我假设信号是标准化的,即1 ==最大电平):

level[n] = - 20 x log(1/signal[n]); 

但是,检测音频噪音并非易事。最常见和最简单的技术是使用称为NoiseGate的算法,它基本上将信号电平与某个dB阈值进行比较 - 如果信号电平高于阈值,则输出归零。但它在实践中无法使用;平滑阈值必须有一些攻击和释放时间,否则它也会影响真实信号(音乐,语音)并产生某种削波。

检查Google,它会为您提供有关NoiseGate算法和噪音消除技术的大量资源:

http://en.wikipedia.org/wiki/Noise_gate

http://www.developer.com/java/other/article.php/3599661/Adaptive-Noise-Cancellation-using-Java.htm