我想开发一个 android 应用程序来测量声压级,但我不确定如何实现时间加权。目前我的算法工作如下:
- 录制 20 毫秒的音频(160 个样本 @ 8000Hz)
- 计算 RMS
- 计算 SPL
- 更新显示值并重新开始
在这里你可以看到算法的主要部分:
// 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 毫秒以获得快速加权结果还是我完全错了?
谢谢你的支持