1

我想开发一个 android 应用程序来测量声压级,但我不确定如何实现时间加权。目前我的算法工作如下:

  1. 录制 20 毫秒的音频(160 个样本 @ 8000Hz)
  2. 计算 RMS
  3. 计算 SPL
  4. 更新显示值并重新开始

在这里你可以看到算法的主要部分:

// The Google ASR input requirements state that audio input sensitivity
// should be set such that 90 dB SPL at 1000 Hz yields RMS of 2500 for
// 16-bit samples, i.e. 20 * log_10(2500 / mGain) = 90.

double Gain = 2500.0 / Math.pow(10.0, 90.0 / 20.0);


// This method is called every 20ms:
@Override
public void processAudioFrame(short[] audioFrame) {

  // Compute the RMS value.
  double rms = 0;
  for (int i = 0; i < audioFrame.length; i++) {
    rms += audioFrame[i]*audioFrame[i];
  }
  rms = Math.sqrt(rms/audioFrame.length);

  final double rmsdB = 20.0 * Math.log10(rms / Gain) + refSPL;
  // refSPL is obtained by calibration with a professional spl meter
}

我知道声级计的等级可以是快速、慢速或脉冲时间加权。但我不确定在我的算法中如何以及在何处实现这个时间加权。

问:时间加权是否意味着在什么时间之后我会更新测量的 dB 值?

问:我应该简单地将更新间隔更改为 125 毫秒以获得快速加权结果还是我完全错了?

谢谢你的支持

4

1 回答 1

0

与大多数仪器一样,最初创建声级计时,数字技术并不容易获得,读数通过模拟显示器呈现给用户。在声级计的情况下,这是一根在刻度上来回移动以给出读数的指针。因此,这些时间权重仅提供本评论中讨论的“米弹道” 。由于不同的制造商生产不同规格的针,这些针的一个主要问题很快就暴露出来了。由于噪音很少保持在恒定水平,因此针始终处于恒定运动状态。更长和更短的需求会以不同的速度对相同数量的声音做出反应,从而产生不同的结果。

创建了一组称为时间加权的标准。这些加权指定了针必须移动的速度。这确保了不同的声级计可以根据这些权重进行校准,从而使测量值彼此可比。

因此,快速和慢速时间加权对应于(在数字域中)具有时间常数 $\tau = RC$ 的等效低通滤波器。这里讨论了这是一个低通滤波器以及为什么需要它。

于 2017-08-28T13:54:33.237 回答