我已经搜索了很长一段时间,但我一直无法找到一种方法来从 Android 上的麦克风实际获取 SPL/db 值。
我发现讨论它的少数线程和文章将其视为如此明显的事情,以至于任何人都应该能够做到这一点,并且更关心使他们的转换算法正确。
有谁知道如何做到这一点?
最佳答案
您必须首先禁用任何自动电平控制。我假设您要么知道,要么知道在哪里可以找到如何在没有 ALC 的情况下从麦克风录制样本。
从那时起,基本上都是关于校准和对数幅度。本质上,您将乘以或卷积与频率相关的校准,然后在所有或部分频率范围内取 10 * 对数幅度。
然后,您必须进行一些校准测量,例如对受控的已知 spl 实验室源进行频率扫描,并记录产生的幅度与频率的关系(如果您缓慢扫描,则基本上与幅度与时间的关系相同),否则您将用宽带伪脉冲(例如 Spark 、起动手枪等)击中它,您也在辐射对称位置使用良好的实验室设备进行频率测量,或者作为最后的手段,您使用某些已知的物理特性估计 SPL 的来源,并希望它在感兴趣的频率上足够平坦。
然后,您有两种选择如何应用更正。
一种选择是反转传递函数,计算时域脉冲响应,然后将其与输入信号卷积以应用频率平坦度校正,将其用作数字滤波器。然后,您可以采用每单位时间结果的对数幅度来确定宽带 spl。
或者,您可以对输入数据进行 FFT 以生成频谱,然后将其乘以频率响应的倒数,然后取感兴趣的任何(和)bin 的对数幅度。
不幸的是,几乎没有理由假设设备与设备之间的粗略一致性,即使是同一型号。