从Android麦克风获取分贝

我一直在寻找相当长的一段时间,而且我无法找到从Android上的麦克风实际获取SPL / db值的方法.

我发现的几个线程和文章讨论过它对待它的事情非常明显,任何人都应该能够做到这一点,而且更关心的是如何使他们的转换算法正确.

有谁知道如何做到这一点?

最佳答案
您必须先禁用任何自动电平控制.我假设您要么知道,要么知道如何在没有ALC的情况下从麦克风中记录样本.

从那时起,它基本上都是关于校准和对数的大小.基本上,您将通过频率相关校准进行乘法或卷积,然后在全部或部分频率范围内获取10 *对数幅度.

然后你必须进行一些校准测量,例如频率扫描受控制的已知spl的实验室源,并记录得到的幅度与频率的关系(如果你慢慢扫描与振幅与时间基本相同)或你是用宽带伪脉冲(例如电火花,起动手枪等等)击中它,你也在频率上用良好的实验室设备在辐射对称位置进行测量,或作为最后的手段,你使用一些已知的物理属性估计SPL的来源,并希望它在所关注的频率上足够平坦.

然后,您有两种选择来应用更正.

一种选择是反转传递函数,计算时域脉冲响应,然后通过将其与输入信号进行卷积来将其用作数字滤波器以应用频率平坦度校正.然后,您可以获取每单位时间结果的对数幅度,以确定宽带分裂.

或者您可以对输入数据进行FFT以生成频谱,并将其乘以频率响应的倒数,并将任何(总和)bin的对数幅度感兴趣.

不幸的是,没有什么理由假设设备之间的粗略一致性,即使是同一型号也是如此.

转载注明原文:从Android麦克风获取分贝 - 代码日志