Open Source проект по мониторингу воздушного пространства на SDR
Зачем вообще делать радар из телевизора?
Традиционные радиолокационные системы (РЛС) — это огромные антенны, киловатты мощности, разрешения на частоты и бюджеты уровня «военного отдела». Нам же хотелось видеть небо, не нарушая ни законов физики, ни законодательства.
Так родилась идея собрать пассивную когерентную локацию (PCL) — систему, которая ничего не излучает, а просто слушает уже существующие сигналы в эфире.
FM-радио, LTE, цифровое ТВ — всё это мощные «осветители», которые и так покрывают территорию. Почему бы не использовать их?
Мы выбрали сигнал DVB-T2 (546 МГц) — стабильный, мощный, и что особенно приятно — с известной структурой (OFDM).
Результат? Получился радар без передатчика, который можно запустить хоть на балконе. И да, всё это — на полностью open source стеке.
Архитектура: что мы собрали
Чтобы превратить ТВ-сигнал в радар, нам понадобилось не так уж много железа, но с хитростью.
Capture Unit (RPi 5 + KrakenSDR)
Снимает IQ-потоки с 5 приёмных каналов, синхронизированных по PPS и GPSDO.Processing Server
Получает UDP-потоки, вычисляет CAF (Cross-Ambiguity Function) и CFAR-детекции, объединяет треки с помощью Kalman Filter и Hungarian algorithmWebSocket API
Рассылает JSON-треки в реальном времени клиентам — веб-панелям, картам и системам визуализации.
Компонент |
Назначение |
Примечание |
|---|---|---|
KrakenSDR (5 каналов) |
Приём сигналов с антенн |
Многоканальность нужна для фазовых измерений и пеленгации |
Антенный массив (5× Yagi-Uda) |
1 референсная антенна + 4 следящие |
Референсная ловит прямой сигнал DVB-T2, остальные — отражения |
Raspberry Pi 5 |
Вычислительный блок |
Обрабатывает IQ-потоки в реальном (или почти реальном) времени |
Осветитель (Illuminator) |
Сеть DVB-T2 |
Некооперативный, но стабильный источник сигнала |
На практике это выглядит довольно забавно: несколько антенн на крыше, Pi5 с Kraken’ом на столе, и ноутбук с Python’ом, который «слушает телевизор» и находит дроны самолетного типа.
Пайплайн DSP: как из шума извлечь движение
Главная задача — отделить динамические отражённые сигналы от всего остального: земли, домов и гор.
Сырые IQ-потоки проходят через несколько ключевых этапов цифровой обработки.
1. CAF: превращаем эфир в «кадр радара»
Мы вычисляем Cross Ambiguity Function (CAF) — по сути, это двумерная карта, где:
ось задержки (delay) показывает расстояние,
ось Доплера — скорость объекта.
Результат похож на тепловую карту, где почти весь центр — это «статический столб» (clutter).
2. MTI: избавляемся от статики
Чтобы выделить движущиеся объекты, мы применяем MTI-фильтр (Moving Target Indication).
Принцип простой: вычитаем предыдущий кадр из текущего.
# MTI: удаляем статику, оставляем движение
filtered_caf = caf_frame_t - caf_frame_t_minus_1
Если сигнал не изменился — исчезает.
Если что-то движется — появляется всплеск.
После этого “тишина эфира” превращается в живую картину с подвижными точками.
3️3. CFAR + Kalman Filter — из вспышек в устойчивые треки
CFAR (Constant False Alarm Rate) — адаптивный детектор, который ищет цели, не увеличивая ложные срабатывания.
А Kalman Filter помогает связать отдельные кадры в треки и предсказать движение объектов.
Чтобы не путать цели, используем Hungarian algorithm для сопоставления детекций между кадрами.
? Результат: каждая цель получает свой ID и непрерывно отслеживается, даже если сигнал временно пропадает.
Технические вызовы
Сейчас проект активно развивается, и вот с чем мы боремся:
? Фазовая когерентность KrakenSDR.
Как синхронизировать четыре приёмных канала, если источник (DVB-T2) никак с нами не связан? Пока пробуем софтверную компенсацию.
? Оптимизация DSP на Raspberry Pi 5.
Расчёт CAF прожорлив: NumPy и SciPy не всегда успевают.
Пробуем переносить части расчётов на GPU через OpenCL или CUDA.
? Особенности OFDM.
Хотим минимизировать боковые лепестки и артефакты при обработке DVB-T2 — поле для экспериментов и дискуссий.
Open Source и масштабирование
Весь проект — open source.
KrakenSDR и Raspberry Pi 5 стоят не дороже роутера, поэтому можно собирать целые сети пассивных приёмников.
Они могут совместно покрывать территории на сотни километров, естественно там где присутствует FM, LTE,
? Репозиторий:
? github.com/Stanislav-sipiko/passive-sdr-radar
? Присоединяйтесь
Если вы разбираетесь в SDR, цифровой обработке, оптимизации Python или просто хотите помочь улучшить алгоритмы — будем рады вашей помощи.
MAXH0
Интересно. Если действительно утыкать все многоэтажки такими пассивными антеннами то можно дроны пеленговать?..