手机通常因其功能而被定义——通话、拍照、应用。相反,不妨从它所包含的部件来认识它:一个采样率为 48 kHz 且经过足够校准的麦克风、两到三个摄像头、一个高亮 LED 手电筒、一个振动马达、一个加速度计,以及一个能以精确频率闪烁的屏幕。那不是一部手机,那是一个配有触摸屏的微型实验室。
大多数应用在同一时间只使用其中一个部件,并用于其预设的用途。而有趣的测量则始于你不按常规并组合使用它们:将手电筒用作摄像头的光源,将振动马达用作加速度计的激励源,将第二部手机用作实验的另一半。这篇文章就是对这一领域的探索路线图,分为三个由浅入深的进阶阶段。
第一阶段:单个传感器,被动监听
最简单的工具将单个传感器指向外部世界,并分析传回的信号:
- 声谱 —— 录制音频、计算频谱、观察能量分布在何处。这是最通用的主力工具:马达、嗡嗡声、咔哒声、敲击物体产生的鸣响声。
- 敲击测试 —— 敲击水果或轻敲某种材料并分析其余音衰减:主导共振频率及其衰减速度,比单纯的音量大小更能揭示其内部状况。(更多内容请参阅关于敲击测试的文章。)
- 振动 —— 将手机放在洗衣机、压缩机或 3D 打印机上,加速度计就会记录下其特征振动信号。
- 相机颜色与光线 —— 点颜色测量、显示器与 LED 照明的闪烁/闪烁率检测、照度、重复物体计数、读取指针式仪表、估算尺寸。
一个统一的原则是:信号捕获必须尽可能保持平台所允许的原生状态。在 Android 上,这意味着请求未处理的麦克风路径——没有自动增益控制,没有会改写你要测量的信号的噪声抑制——并且每当测量依赖于保持真实的光照水平时,都需要锁定相机的自动曝光和白平衡。
第二阶段:手机施加激励,然后测量自身的激励响应
手机还配有执行器,将执行器与传感器配对,就能将单纯的被动监听转变为主动式测量仪器:
- 手电筒 + 相机反射率 —— 在手电筒关闭和开启时各捕获一帧图像;两者的差异可以分离出表面对已知光线的反射情况,从而在结果中基本消除房间环境光的影响。
- 手电筒作为光源:脉搏与半透明度 —— 在手电筒开启时将手指按在摄像头上,摄像头就会变成一个光电探测器,观察每次心跳时的血容量变化。相同的光学原理也可以用来测量材料的半透明度。
- 振动马达 + 加速度计 + 麦克风 —— 手机靠在物体上自我震动,同时记录该物体在力学和声学上的响应。空心面板和实心面板的响应截然不同。
主动工具拥有被动工具所不具备的特性:刺激源是已知的。当你能够控制激励时,就可以根据比例和响应(而不是绝对水平)来构建特征——这使得无需对每台设备进行校准,就能让不同手机型号之间的结果具有可比性。
第三阶段:两部手机,一个实验
有些物理量的测量本质上需要兼顾两端:例如墙壁能阻挡多少声音,窗户能透射多少光线。一部手机无法同时处于两侧——但两部手机可以,而且大多数家庭都有两部手机。
在没有实验室设备的情况下让这一切可行的诀窍在于同接收器比例。发射手机播放一段可自识别的刺激信号——例如步进扫频音,或者以固定频率闪烁的屏幕。测量手机进行两次捕获:一次是在与发射源之间无阻挡的路径上(参考值),另一次是透过墙壁或窗户。最终仅使用在同一个麦克风或摄像头上捕获的这两个数值的比例作为结果。发射器的音量、接收器的灵敏度、房间的影响——所有这些都会被抵消。因此,两部手机不需要时钟同步、不需要连接线,也无需相互校准。(详细步骤请参阅关于隔音测量的文章。)
这三个阶段背后的设计原则是:永远不要相信绝对水平。不同型号手机的麦克风和摄像头存在差异;而共振、衰减率、阶次域模式和同接收器比例则基本不受影响。基于相对量构建的特征适用于各种设备;而基于绝对量构建的特征则需要对每台设备进行永久校准。
从单次读数到目录
孤立的读数只是琐碎的信息。当读数与具体物体关联时,它们就变成了知识:今天测量了这个西瓜、这个车轮、这面墙,下周再次测量。因此,每次测量都可以归入目录中的某个物体之下——类别 → 物体 → 使用场景 → 测量——并且任何测量都可以在事后获得一个真实标签(ground-truth):你先敲击了西瓜,接着把它切开,然后记录下你的发现。这种闭环在许多用户和许多物体上不断重复,正是敲击测试分类器如何基于真实水果而非实验室样本进行训练的方法。
而对于具体的任务而非单纯的读数——例如调整自行车车轮、检查房间的隔音——引导式活动将几种工具按正确的顺序串联起来,并指导你在两次测量之间该做什么,然后将结果写入同一个目录中。关于辐条调音的文章详细介绍了首个此类活动。
未来发展方向
工具列表在不断增加——而且其架构在设计上使得添加工具是累加式的:只需在注册表中增加一个新条目,而绝不需要对已保存的内容进行重构。所有程序都在设备上离线运行,在不到一秒的时间内即可得出结果;关于离线优先的文章解释了为什么这一限制是支撑系统运转的基石,而不仅仅是一个用于宣传的功能勾选项。