手机通常因其功能而被定义——通话、拍照、应用。相反,不妨从它所包含的部件来认识它:一个采样率为 48 kHz 且经过足够校准的麦克风、两到三个摄像头、一个高亮 LED 手电筒、一个振动马达、一个加速度计,以及一个能以精确频率闪烁的屏幕。那不是一部手机,那是一个配有触摸屏的微型实验室。

大多数应用在同一时间只使用其中一个部件,并用于其预设的用途。而有趣的测量则始于你不按常规并组合使用它们:将手电筒用作摄像头的光源,将振动马达用作加速度计的激励源,将第二部手机用作实验的另一半。这篇文章就是对这一领域的探索路线图,分为三个由浅入深的进阶阶段。

第一阶段:单个传感器,被动监听

最简单的工具将单个传感器指向外部世界,并分析传回的信号:

一个统一的原则是:信号捕获必须尽可能保持平台所允许的原生状态。在 Android 上,这意味着请求未处理的麦克风路径——没有自动增益控制,没有会改写你要测量的信号的噪声抑制——并且每当测量依赖于保持真实的光照水平时,都需要锁定相机的自动曝光和白平衡。

第二阶段:手机施加激励,然后测量自身的激励响应

手机还配有执行器,将执行器与传感器配对,就能将单纯的被动监听转变为主动式测量仪器:

主动工具拥有被动工具所不具备的特性:刺激源是已知的。当你能够控制激励时,就可以根据比例和响应(而不是绝对水平)来构建特征——这使得无需对每台设备进行校准,就能让不同手机型号之间的结果具有可比性。

第三阶段:两部手机,一个实验

有些物理量的测量本质上需要兼顾两端:例如墙壁能阻挡多少声音,窗户能透射多少光线。一部手机无法同时处于两侧——但两部手机可以,而且大多数家庭都有两部手机。

在没有实验室设备的情况下让这一切可行的诀窍在于同接收器比例。发射手机播放一段可自识别的刺激信号——例如步进扫频音,或者以固定频率闪烁的屏幕。测量手机进行两次捕获:一次是在与发射源之间无阻挡的路径上(参考值),另一次是透过墙壁或窗户。最终仅使用在同一个麦克风或摄像头上捕获的这两个数值的比例作为结果。发射器的音量、接收器的灵敏度、房间的影响——所有这些都会被抵消。因此,两部手机不需要时钟同步、不需要连接线,也无需相互校准。(详细步骤请参阅关于隔音测量的文章。)

这三个阶段背后的设计原则是:永远不要相信绝对水平。不同型号手机的麦克风和摄像头存在差异;而共振、衰减率、阶次域模式和同接收器比例则基本不受影响。基于相对量构建的特征适用于各种设备;而基于绝对量构建的特征则需要对每台设备进行永久校准。

从单次读数到目录

孤立的读数只是琐碎的信息。当读数与具体物体关联时,它们就变成了知识:今天测量了这个西瓜、这个车轮、这面墙,下周再次测量。因此,每次测量都可以归入目录中的某个物体之下——类别 → 物体 → 使用场景 → 测量——并且任何测量都可以在事后获得一个真实标签(ground-truth):你先敲击了西瓜,接着把它切开,然后记录下你的发现。这种闭环在许多用户和许多物体上不断重复,正是敲击测试分类器如何基于真实水果而非实验室样本进行训练的方法。

而对于具体的任务而非单纯的读数——例如调整自行车车轮、检查房间的隔音——引导式活动将几种工具按正确的顺序串联起来,并指导你在两次测量之间该做什么,然后将结果写入同一个目录中。关于辐条调音的文章详细介绍了首个此类活动。

未来发展方向

工具列表在不断增加——而且其架构在设计上使得添加工具是累加式的:只需在注册表中增加一个新条目,而绝不需要对已保存的内容进行重构。所有程序都在设备上离线运行,在不到一秒的时间内即可得出结果;关于离线优先的文章解释了为什么这一限制是支撑系统运转的基石,而不仅仅是一个用于宣传的功能勾选项。