Телефон обычно описывают через то, что он делает: звонки, фото, приложения. Но давайте вместо этого опишем то, что в нём содержится: достаточно откалиброванный микрофон с частотой дискретизации 48 kHz, две или три камеры, яркий светодиодный фонарик, вибромотор, акселерометр и экран, способный мерцать с точной частотой. Это не телефон. Это целая мини-лаборатория с сенсорным экраном.

Большинство приложений используют только одну из этих деталей за раз и по прямому назначению. Самые интересные измерения начинаются тогда, когда вы используете их не по назначению и в комбинации: фонарик как источник света для камеры, вибромотор как возбудитель для акселерометра, а второй телефон как вторую половину эксперимента. Этот пост — карта этой территории, разделенная на три уровня по возрастанию сложности.

Уровень 1: один датчик, пассивное прослушивание

Простейшие инструменты направляют один датчик на внешний мир и анализируют то, что возвращается обратно:

Объединяющий принцип: запись данных должна осуществляться в максимально «сыром» виде, насколько это позволяет платформа. На Android это означает запрос необработанного аудиоканала микрофона (без автоматической регулировки усиления и шумоподавления, которые искажают тот самый сигнал, который вы хотите измерить), а также фиксацию автоэкспозиции и баланса белого камеры, когда измерение зависит от неизменности уровня освещенности.

Уровень 2: телефон создает возбуждение, а затем измеряет свой собственный отклик

В телефоне также есть актуаторы, и сочетание актуатора с датчиком превращает пассивное прослушивание в активный инструмент:

Активные инструменты обладают свойством, которого нет у пассивных: стимул известен. Когда вы контролируете возбуждение, вы можете строить функции на основе соотношений и откликов, а не абсолютных уровней. Именно это позволяет сравнивать результаты на разных моделях телефонов без необходимости калибровки каждого устройства.

Уровень 3: два телефона, один эксперимент

Некоторые величины по своей природе требуют измерений с двух сторон: сколько звука задерживает стена или сколько света пропускает окно. Один телефон не может находиться с двух сторон одновременно, но два телефона могут — а в большинстве домов найдется как раз два аппарата.

Трюк, который позволяет обойтись без лабораторного оборудования, заключается в использовании соотношения данных одного приемника. Телефон-излучатель воспроизводит легко распознаваемый стимул — ступенчатый частотный свип или мерцание экрана с фиксированной частотой. Телефон-измеритель делает запись дважды: сначала по прямой видимости до излучателя (опорный сигнал), затем сквозь стену или окно. В качестве итогового ответа используется только соотношение этих двух записей, сделанных на один и тот же микрофон или камеру. Громкость излучателя, чувствительность приемника, влияние помещения — все это взаимно уничтожается. Таким образом, двум телефонам не требуется синхронизация времени, кабели или взаимная калибровка. (Подробное руководство читайте в посте о звукоизоляции.)

Главное правило проектирования для всех трех уровней: никогда не доверяйте абсолютным уровням. Микрофоны и камеры разных моделей телефонов отличаются друг от друга; в то же время резонансы, скорости затухания, порядковые паттерны и соотношения данных одного приемника практически неизменны. Функции, построенные на относительных величинах, легко переносятся на другие устройства; функции же, основанные на абсолютных значениях, всегда будут требовать калибровки для каждого конкретного устройства.

От единичных показаний к каталогу

Само по себе показание мало о чем говорит. Показания становятся знаниями, когда они привязываются к конкретным вещам: этой дыне, этому колесу, этой стене, измеренным сегодня и еще раз на следующей неделе. Поэтому каждое измерение можно записать в каталог под определенным объектом — Категория → Объект → Сценарий → Измерение — а любому измерению можно задним числом присвоить фактическую метку: вы постучали по дыне, затем разрезали ее и записали то, что обнаружили. Этот замкнутый цикл, повторяемый множеством пользователей для множества объектов, позволяет обучать классификаторы акустического теста на реальных фруктах, а не на лабораторных образцах.

А для решения конкретных задач, а не просто снятия показаний — будь то настройка велосипедного колеса или проверка изоляции комнаты — пошаговые активности объединяют несколько инструментов в нужной последовательности и подсказывают, что делать между измерениями, записывая результаты в тот же каталог. Первой из них посвящен пост о настройке спиц.

К чему мы идем

Список инструментов продолжает расти, а архитектура спроектирована так, что добавление нового инструмента происходит по аддитивному принципу: это просто новая запись в реестре, не требующая переделки уже сохраненного. Всё работает непосредственно на устройстве в автономном режиме, а результаты выдаются менее чем за секунду; в посте об автономной работе объясняется, почему это ограничение является несущей конструкцией, а не просто галочкой в списке характеристик.