【问题标题】:How to best determine volume of a signal?如何最好地确定信号的音量?
【发布时间】:2012-01-26 13:27:40
【问题描述】:

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

我找到了两个选择:

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

使用#1 或#2 有什么好处吗?

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

【问题讨论】:

  • 什么样的音频信号?为什么需要音量? (不只是惹你生气,我真的相信在不知道的情况下很难回答你的问题)
  • 我调整了问题。

标签: android audio rms audio-processing


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    如果你想检查音量,只需计算它的 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-28
      • 2011-02-26
      • 1970-01-01
      • 2017-09-11
      • 2016-12-23
      相关资源
      最近更新 更多