Смартфон в радар?

Постоянно мучает вопрос "Во что можно превратить свой телефон на уровне кода без root"
У меня смартфон Samsung Galaxy S24+, исследуя некоторые его возможности я понял что могу использовать ультра звук + Wifi RTT

Смартфон в радар?

Примерно выглядит так

Приложение, которое превращает обычный Samsung в радар. Реально работающий радар. Ну, почти.
Телефон издаёт звук на частоте 19 килогерц - это выше, чем слышит человек, но микрофон ловит нормально. Звук отражается от всего вокруг: стен, мебели, людей. И возвращается обратно чуть изменённым.
Вот тут начинается физика. Если объект движется к телефону - частота отражённого звука немного выше. Если от телефона - ниже. Это называется эффект Доплера.
Анализируя эти изменения частоты, можно понять: что-то движется. И куда.

Но одного звука мало

Проблема акустического радара - он работает на 1-2 метра максимум. И в тишине. Включи музыку или телевизор - всё, привет.
Я добавил ещё два источника данных:
Wi-Fi радар. Современные роутеры умеют измерять расстояние до устройства с точностью до метра (технология называется RTT). Плюс сила сигнала меняется, когда между роутером и телефоном кто-то проходит. Работает сквозь стены, на расстоянии до 100 метров. Но точность так себе.
Датчики движения телефона. Акселерометр, гироскоп, компас. Они показывают, как телефон двигается и поворачивается. Это нужно, чтобы понимать, откуда пришёл сигнал.
Три источника данных. Каждый со своими плюсами и минусами. Идея - объединить их и получить что-то более надёжное, чем каждый по отдельности.

Начинка и внутренности

CSA архитектруа

Клиент:
генерирует синусоиду 19 кГц, захватывает PCM с микрофона (48 кГц, 16-bit mono) и гонит по UDP на сервер. Параллельно собирает Wi-Fi RTT через MethodChannel в нативный код и IMU данные через sensors_plus. Всё это упаковывается в JSON и летит на сервер с частотой 10 Гц.

Сервер:

  • FFT анализ через JTransforms. Размер окна 4096 сэмплов, частотное разрешение ~11.7 Гц. Этого хватает, чтобы ловить движение от 10 см/с. Окно Ханна для борьбы со спектральной утечкой.
  • Kalman Filter для fusion IMU и Wi-Fi. Вектор состояния [x, y, vx, vy, θ, ω]. Prediction step на основе акселерометра, correction через триангуляцию Wi-Fi (когда есть 3+ роутера).
  • RANSAC для детекции стен из облака точек. 200 итераций, порог inliers 15 см, минимальная длина стены 0.5 м.
  • ZUPT (Zero Velocity Update) - если IMU показывает покой больше секунды, обнуляем скорость. Иначе дрейф съедает всё за минуту.
  • Virtual Threads для UDP пакетов. Producer-Consumer с очередью на 100 пакетов.

Веб-интерфейс на Chart.js + WebSocket показывает спектр в реальном времени и карту помещения

Что работает сейчас

Детекция движения - да. Машешь рукой перед телефоном, система видит. Определяет направление: к телефону или от него. Точность - ну 80% в тихой комнате.
Построение карты - с натяжкой. Если медленно ходить по комнате, что-то похожее на план появляется. Стены детектируются, но не всегда там, где они есть.
Wi-Fi часть работает стабильнее, но требует роутер с поддержкой 802.11mc. У меня такой один.

Что не работает

Гипсокартон вибрирует от ультразвука и даёт ложные срабатывания. Пришлось добавить счётчик стабильности - если точка появляется 5+ раз на одном месте, это стена. Костыль, но работает.
IMU дрейфует несмотря на все фильтры. Калибровка помогает, но через 5 минут позиция уже не та.
В шумной комнате акустика бесполезна. Только Wi-Fi спасает.

Зачем это нужно?

Вообще хз, просто хотелось сделать то, что ещё никто не делал

Может, для умного дома - детекция присутствия без камер. Приватность, все дела. Может, для охраны - Wi-Fi радар видит сквозь стены. Может, для распознавания жестов - теоретически можно различать «влево» и «вправо».Или это просто способ узнать, что кот опять на столе.MVP готов. Код работает. Дальше - посмотрим.

Все исходники есть на Github, кому будет интересно - пишите.

3
Начать дискуссию