如何在SPL仪表中实现时间加权?

时间:2014-10-07 12:14:40

标签: android decibel weighting

我想开发一个Android应用来测量声压水平,但我不知道如何实现时间加权。 目前我的算法的工作原理如下:

  1. 录制20ms的音频(160个样本@ 8000Hz)
  2. 计算RMS
  3. 计算SPL
  4. 更新显示值并重新开始
  5. 在这里你可以看到算法的主要部分:

    // 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毫秒以获得快速加权结果,还是我完全错误?

    感谢您的支持

1 个答案:

答案 0 :(得分:0)

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

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

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