从Android麦克风获取分贝

时间:2010-11-24 22:11:28

标签: android microphone decibel

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

我发现的几个线程和文章讨论过它将它视为所以显然是任何人都应该能够做到的,并且更关心的是让他们的转换算法正确。

有谁知道怎么做?

3 个答案:

答案 0 :(得分:12)

在处理其他相关应用程序和进行研究时,我遇到了一些对于正在研究此类问题的人有用的信息。

你知道,Android手机上的麦克风将返回0到+ - 32,400之间的值。在大多数情况下,2000以上的任何东西都非常响亮,例如音乐会,俱乐部或机械噪音。 “相对沉默”大约是30.但是,这些值的含义是相对的,并且在不同手机之间会有所不同。由于其中的麦克风,几个彼此相邻的设备将返回不同的值。值可以稍微不同,或者 lot

刚刚在我的办公室测试了几款不同的Android手机,我发现有些设备在相同的情况下会返回10倍于其他设备的值。这就是为什么没有人刚刚说过“是的,你可以得到分贝值,这里有一些示例代码:”因为实际上并没有真正可靠(简单)的方法。

如果您将其上传到一台设备上,则可以获得30 dB,但另一台设备将返回300 dB。显然,如果没有大量耳朵保护,没有人会处于300 dB的环境中。必须将这些值作为相对值;它们如何相互关联。如果您想获得可以使用的值,“校准”,无论是动态的还是其他的,都是必须的。必须有一个既定的基线,不能来自你,必须与你的价值进行比较。例如,如前所述,相对沉默应该在30左右。

如果手机在相对静音的环境中返回456,那么只需将你的手机(30)与他们分开(456),你就有了一个因子来调整手机返回的值,使它们与你的手机相匹配期待看到,这些价值观可以用于某种程度的可靠性。

这正是我过去几个月所发现的​​,我希望它对某人有帮助。

答案 1 :(得分:5)

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

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

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

然后,您有两种选择如何应用更正。

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

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

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

答案 2 :(得分:2)

开源应用程序NoiseTube执行此操作,包括支持特定于设备的校准。源代码可用here。如果您可以访问它,我强烈建议您阅读他们的文章参与式噪声映射工作!评估参与式传感作为环境监测标准技术的替代方案available for pay)。

来源的一些亮点: