Как измерять ответ резонатора
Самая опасная часть таких экспериментов - это моё любимое: “О!! на глаз вроде работает”. Поле движется, визуализация красивая, звук есть, и далее мозг додумывает то, чего ещё нет.
Если я хочу честно исследовать резонатор, мне нужны метрики. МНОГО МЕТРИК, Я СЕРЬЁЗНО.
Что можно измерять
Внутри поля уже есть несколько полезных величин:
- глобальная синхронизация;
- локальная синхронизация;
- средний и минимальный метаболит;
- след активности;
- активность отдельных регионов;
- реакция output-региона относительно поведения по умолчанию.
Отдельно считаются региональные метрики для упомянутых мною в прошлой части input, assoc и output.
Благодаря этому можно смотреть как на всё поле сразу, так и на маршрут сигнала: от входа до выхода.
Проверка распространения
Первый тест - распространение импульса.
Сценарий простой:
- прогреть поле несколько шагов;
- измерить baseline;
- подать фазовый импульс в input-регион;
- смотреть, как меняются input, assoc и output;
- сохранить CSV, JSON summary и график.
Здесь важны задержки и пики. Если output-регион вообще не реагирует, значит текущая конфигурация поля плохо проводит сигнал. Если реагирует мгновенно и слишком сильно, возможно, вход просто пробивает всю среду насквозь. Интереснее всего промежуточная зона: сигнал доходит, но не уничтожает локальную динамику поля.
Голос VS тишина: FIGHT
Второй тест - сравнить голос с тишиной такой же длины.
Это очень полезная проверка против самообмана. Если поле “реагирует” на голос, но почти так же реагирует на нулевой WAV, значит я измеряю не реакцию на аудио, а внутренний дрейф или красивую генерацию.
Поэтому прогоняем два сценария:
- настоящий WAV с голосом;
- тишина с такой же длиной и форматом.
Потом сравниваются пики output-активности, событийный счётчик, скорость ответа и общий дрейф. Это всё ещё не доказывает понимание, но сильно помогает не повестись на то, что мы получаем от обычной динамики поля.
Повторяемость и слабая память
Третий тест - проиграть один и тот же сигнал два и более раз через одно поле.
Я задал вопрос: будет ли второй ответ похож на первый, или среда после первого прохода заметно изменилась?
В проекте для этого есть специальный скрипт. Он прогревает поле, проигрывает сигнал, делает паузу, проигрывает сигнал второй раз и сравнивает:
- корреляцию ответов;
- RMSE (Root Mean Square Error, среднеквадратичная ошибка) между повторениями;
- изменение пиков;
- скорость ответа;
- событийный счётчик.
Можно назвать это “слабой памятью”, потому что это не память в человеческом смысле. Корректнее: поле может сохранять след предыдущего воздействия, и этот след способен менять реакцию на повторный вход.
Где легко допустить ошибку
Вообще, тут много подводных камней:
- Можно перепутать реакцию на вход с естественным дрейфом поля;
- Можно слишком сильно настроить управляющий сигнал и получить грубый удар по фазам осцилляторов;
- Несколько раз, увы, я принимал красивую визуализацию за доказательство ранее выдвинутой гипотезы;
- Можно подобрать конфиг под один удачный пример и зациклиться на нём;
- Можно начать говорить слишком громкие слова раньше времени.
Последнее чаще всего было проблемкой, ибо мне хочется, чтобы проект оставался исследованием, а подобное часто манит своей красотой. (Я купился :(. НО ЗАФИКСИЛ!)
Что дальше
Я хочу собрать несколько одинаково описанных запусков:
- синтетический импульс;
- отличие тишины от поступающего голоса;
- повторение голоса;
- разные уровни управляющего сигнала.