2

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

我找到了两个选择:

  1. 计算幅度的均方根
  2. 找到最大幅度

使用#1 或#2 有优势吗?

这是我想要做的:我希望我的 Android 分析来自麦克风的音频。我希望设备检测到很大的噪音。输入是一个短 []。

4

2 回答 2

2

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

因为您的耳朵对所有频率都不是同样敏感,所以可以通过对信号使用A 加权来更好地关联您的感知。拆分(过滤)倍频带的信号,计算每个频带的 RMS 并应用 A 加权。

于 2012-01-26T16:31:52.773 回答
1

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

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

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

检查谷歌,它会给你很多关于 NoiseGate 算法和噪声去除技术的资源:

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

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

于 2012-01-26T16:40:04.310 回答