Блогер разработал систему геолокации по фоновому шуму самолетов в видеороликах с точностью до 100 метров

Ютубер colsto, который специализируется на геолокации по фото и видео, показал, как определить место съемки по звуку пролетающих самолетов. Ему хватило записи с камеры видеонаблюдения, где в кадре ничего не меняется. Из исходных данных были только дата съемки, 8 сентября, и то, что видео снято где-то на континентальной территории США.

Раньше блогер уже пробовал геолокацию по раскатам грома. Гром слышно издалека, звук хорошо проходит сквозь стены, но точность того метода составила около 5 км – этого хватает разве что на город и примерный район. Новый подход сохраняет те же плюсы, а зону поиска сужает до сотни метров.

https://www.youtube.com/watch?v=UytYrhYLOKI

Ключом стал эффект Доплера. На записи пролет самолета почти не слышен, но на спектрограмме, где по горизонтали время, а по вертикали частота, после увеличения нужного диапазона проступает характерная доплеровская кривая. В записи с камеры нашлись две такие кривые от винтовых самолетов с интервалом в 920 секунд.

Честно предупреждаю, это безумно мощная штука, но она требует много сложной работы. На ее создание ушли месяцы, более 5000 строк кода. Я работал с Parquet-файлами по 50 ГБ, 3D-моделированием физики, цифровыми моделями рельефа целой страны и много чем еще.

Основой поиска стали данные ADS-B. Их транслируют практически все самолеты в небе – координаты, скорость, высоту и другие параметры. Блогер несколько часов выгружал через Python все полеты над США за 8 сентября, а потом по таблице типов воздушных судов ICAO отсеял известные реактивные модели – звук на записи явно принадлежал винтовому самолету.

Дальше вокруг каждой траектории строилась сетка точек с шагом 200 метров в радиусе 10 км. Для каждой точки рассчитывалось время максимального сближения с самолетом, когда он звучит громче всего. Учитывалась и задержка звука – до наблюдателя он идет несколько секунд, причем по наклонной дистанции, а не по горизонтали.

Здесь всплыла еще одна тонкость. ADS-B передает высоту над уровнем моря, а не над землей, так что для расчета реального расстояния потребовалась цифровая модель рельефа с высотой каждой точки сетки. Только после этого получилось искать места, где самолет был слышен, а через 920 секунд пролетел второй.

Даже на тестовом участке площадью менее 0,05% территории континентальных США такому условию соответствовали около 35 тысяч точек.

Сузить поиск помогла форма доплеровских кривых. При равномерном прямолинейном движении ее определяют всего два параметра:

  • скорость самолета задает величину падения частоты

  • расстояние до наблюдателя в точке сближения задает, насколько резко происходит это падение

Для первого пролета скорость составила около 100 м/с. После фильтрации по скорости и дистанции осталось около 73 тысяч точек, но большинство скопилось возле аэропортов, где плотный трафик повышает шанс случайного совпадения.

Полезной оказалась и тишина. Между двумя пролетами на записи почти 15 минут не слышно ни одного самолета, а рядом с крупным аэропортом такого не бывает. Фильтр по отсутствию других пролетов сократил число кандидатов примерно до 15 тысяч.

На этом простые признаки закончились, и блогер перешел к главному. Реальные кривые на записи не совпадали с идеальной формой, потому что самолеты меняют курс, ускоряются, замедляются и меняют высоту. Вместо попытки восстановить траекторию по спектрограмме colsto смоделировал, какую доплеровскую кривую услышал бы каждый кандидат при реальной геометрии каждого полета.

Для модели нужна радиальная скорость – скорость движения самолета прямо к наблюдателю или от него. Если самолет летит прямо на человека, радиальная скорость равна полной, а если проходит строго сбоку, она почти нулевая и эффекта Доплера нет. Эту величину подставляют в формулу Доплера вместе со скоростью звука и основной частотой источника.

Блогер отметил ошибку, которая полностью сорвала бы поиск. Частоту, которую наблюдатель слышит в конкретный момент, определяет скорость самолета не в этот момент, а в тот, когда был издан дошедший до наблюдателя звук. Простой сдвиг кривой по времени не помогает – неверный подход дает кривую совсем другой формы.

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

Для точной оценки сетку пришлось уплотнить до 100 метров – при шаге 200 метров правильная точка могла оказаться в 141 метре от узла и получить слабый результат. Расчеты для 30–40 тысяч точек потребовали огромных вычислительных ресурсов, и без предварительной фильтрации провести их по всей территории США за целые сутки было бы невозможно.

Лучший кандидат получил 20,48 балла против примерно 15 у ближайшего конкурента, а его модельные кривые полностью перекрыли реальные на спектрограмме. У других вариантов первый пролет еще совпадал неплохо, но второй заметно расходился.

Затем блогер провел второй эксперимент. Он взял всего одну минуту записи с едва различимой кривой, которую не слышно даже при прослушивании с прицелом, и указал только время съемки, 20:37 по UTC. Поиск снова охватывал все США, и на первое место с заметным отрывом вышла та же точка с широтой 40,8735.

По словам colsto, достаточно, чтобы хорошим был хотя бы один из параметров. В первом случае место и время съемки были неизвестны, зато было два пролета, а во втором пролет был один, но время известно точно. Если же известен хотя бы город, а это около 0,01% площади США, требования ко времени резко снижаются, и знать минуту, час или даже день съемки уже не нужно.

Финальную проверку блогер провел в Google Street View. Расчетная точка оказалась на берегу водоема, и по характерному силуэту линии деревьев с V-образной кроной удалось найти нужный ракурс. На вершине столба в этом месте висела та самая камера видеонаблюдения.

Блогер проверил и способы защиты – большинство очевидных вариантов не сработали. Фильтр высоких частот вырезает заметную часть человеческого голоса, ведь частоты доплеровских кривых почти совпадают с речевыми. Кроме того, после экспорта такой записи в MP3 и усиления всех частот кривая снова проявилась на спектрограмме.

Заглушить сигнал разговором тоже не вышло. Во время записи colsto 15 секунд говорил на фоне колонки JBL, которая в другом конце комнаты воспроизводила доплеровскую кривую, и та сохранилась на спектрограмме. Кривая пережила и телефонный звонок, несмотря на сжатие аудио и шумоподавление.

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

Реально помогают только монтажные склейки, которые лишают анализ временного интервала между пролетами, а также дополнительное шумоподавление. При этом блогер отметил, что панику сеять не пытается – вероятность того, что кто-то сможет и решит провести такой анализ, невелика, а найти человека можно сотней более простых способов.

Главное практическое применение метода colsto видит в расследованиях, где запись вообще не содержит визуальных подсказок.

По словам разработчика, видео носит образовательный характер и опирается на открытые данные, а код и инструменты блогер публиковать не стал.

Больше статей на Shazoo
Тэги:

Об авторе

Эксперт по Fallout
Главный редактор
Более 16 лет в индустрии освещения видеоигр, кино, сериалов, науки и техники. Особенно разбираюсь в серии Fallout, ценитель The Elder Scrolls. Поклонник Arcanum и Fallout Tactics. Больше всего играю в Civilization, Old World и градостроители. Изучаю ИИ и загадки космоса.