Телефон обычно описывают через то, что он делает: звонки, фото, приложения. Но давайте вместо этого опишем то, что в нём содержится: достаточно откалиброванный микрофон с частотой дискретизации 48 kHz, две или три камеры, яркий светодиодный фонарик, вибромотор, акселерометр и экран, способный мерцать с точной частотой. Это не телефон. Это целая мини-лаборатория с сенсорным экраном.
Большинство приложений используют только одну из этих деталей за раз и по прямому назначению. Самые интересные измерения начинаются тогда, когда вы используете их не по назначению и в комбинации: фонарик как источник света для камеры, вибромотор как возбудитель для акселерометра, а второй телефон как вторую половину эксперимента. Этот пост — карта этой территории, разделенная на три уровня по возрастанию сложности.
Уровень 1: один датчик, пассивное прослушивание
Простейшие инструменты направляют один датчик на внешний мир и анализируют то, что возвращается обратно:
- Спектр звука — запишите аудио, рассчитайте спектр и посмотрите, как распределяется энергия. Это универсальная рабочая лошадка: моторы, гул, дребезжание, звон ударяемых объектов.
- Акустический тест постукиванием — постучите по фрукту или материалу и проанализируйте затухание: доминирующий резонанс и скорость его угасания скажут о внутреннем состоянии гораздо больше, чем громкость звука. (Подробнее в посте про акустический тест.)
- Вибрация — положите телефон на стиральную машину, компрессор или 3D-принтер, и акселерометр запишет профиль вибрации.
- Цвет и свет камеры — точечное измерение цвета, определение мерцания и частоты мерцания дисплеев и светодиодного освещения, освещенность, подсчет повторяющихся объектов, считывание показаний аналоговых приборов, оценка размеров.
Объединяющий принцип: запись данных должна осуществляться в максимально «сыром» виде, насколько это позволяет платформа. На Android это означает запрос необработанного аудиоканала микрофона (без автоматической регулировки усиления и шумоподавления, которые искажают тот самый сигнал, который вы хотите измерить), а также фиксацию автоэкспозиции и баланса белого камеры, когда измерение зависит от неизменности уровня освещенности.
Уровень 2: телефон создает возбуждение, а затем измеряет свой собственный отклик
В телефоне также есть актуаторы, и сочетание актуатора с датчиком превращает пассивное прослушивание в активный инструмент:
- Фонарик + отражательная способность камеры — сделайте пару кадров с выключенным и включенным фонариком; разница позволяет изолировать то, как поверхность отражает известный источник света, практически полностью исключая фоновое освещение комнаты из результатов.
- Фонарик как осветитель: пульс и полупрозрачность — прижмите кончик пальца к камере при включенном фонарике, и камера превратится в фотодетектор, фиксирующий изменение объема крови с каждым ударом сердца. Та же оптика позволяет измерить, насколько полупрозрачен материал.
- Вибромотор + акселерометр + микрофон — телефон вибрирует, соприкасаясь с объектом, и одновременно записывает его механический и акустический отклик. Пустотелая и сплошная панели ответят по-разному.
Активные инструменты обладают свойством, которого нет у пассивных: стимул известен. Когда вы контролируете возбуждение, вы можете строить функции на основе соотношений и откликов, а не абсолютных уровней. Именно это позволяет сравнивать результаты на разных моделях телефонов без необходимости калибровки каждого устройства.
Уровень 3: два телефона, один эксперимент
Некоторые величины по своей природе требуют измерений с двух сторон: сколько звука задерживает стена или сколько света пропускает окно. Один телефон не может находиться с двух сторон одновременно, но два телефона могут — а в большинстве домов найдется как раз два аппарата.
Трюк, который позволяет обойтись без лабораторного оборудования, заключается в использовании соотношения данных одного приемника. Телефон-излучатель воспроизводит легко распознаваемый стимул — ступенчатый частотный свип или мерцание экрана с фиксированной частотой. Телефон-измеритель делает запись дважды: сначала по прямой видимости до излучателя (опорный сигнал), затем сквозь стену или окно. В качестве итогового ответа используется только соотношение этих двух записей, сделанных на один и тот же микрофон или камеру. Громкость излучателя, чувствительность приемника, влияние помещения — все это взаимно уничтожается. Таким образом, двум телефонам не требуется синхронизация времени, кабели или взаимная калибровка. (Подробное руководство читайте в посте о звукоизоляции.)
Главное правило проектирования для всех трех уровней: никогда не доверяйте абсолютным уровням. Микрофоны и камеры разных моделей телефонов отличаются друг от друга; в то же время резонансы, скорости затухания, порядковые паттерны и соотношения данных одного приемника практически неизменны. Функции, построенные на относительных величинах, легко переносятся на другие устройства; функции же, основанные на абсолютных значениях, всегда будут требовать калибровки для каждого конкретного устройства.
От единичных показаний к каталогу
Само по себе показание мало о чем говорит. Показания становятся знаниями, когда они привязываются к конкретным вещам: этой дыне, этому колесу, этой стене, измеренным сегодня и еще раз на следующей неделе. Поэтому каждое измерение можно записать в каталог под определенным объектом — Категория → Объект → Сценарий → Измерение — а любому измерению можно задним числом присвоить фактическую метку: вы постучали по дыне, затем разрезали ее и записали то, что обнаружили. Этот замкнутый цикл, повторяемый множеством пользователей для множества объектов, позволяет обучать классификаторы акустического теста на реальных фруктах, а не на лабораторных образцах.
А для решения конкретных задач, а не просто снятия показаний — будь то настройка велосипедного колеса или проверка изоляции комнаты — пошаговые активности объединяют несколько инструментов в нужной последовательности и подсказывают, что делать между измерениями, записывая результаты в тот же каталог. Первой из них посвящен пост о настройке спиц.
К чему мы идем
Список инструментов продолжает расти, а архитектура спроектирована так, что добавление нового инструмента происходит по аддитивному принципу: это просто новая запись в реестре, не требующая переделки уже сохраненного. Всё работает непосредственно на устройстве в автономном режиме, а результаты выдаются менее чем за секунду; в посте об автономной работе объясняется, почему это ограничение является несущей конструкцией, а не просто галочкой в списке характеристик.