Open Source проект по мониторингу воздушного пространства на SDR

Зачем вообще делать радар из телевизора?

Традиционные радиолокационные системы (РЛС) — это огромные антенны, киловатты мощнос��и, разрешения на частоты и бюджеты уровня «военного отдела». Нам же хотелось видеть небо, не нарушая ни законов физики, ни законодательства.

Так родилась идея собрать пассивную когерентную локацию (PCL) — систему, которая ничего не излучает, а просто слушает уже существующие сигналы в эфире.
FM-радио, LTE, цифровое ТВ — всё это мощные «осветители», которые и так покрывают территорию. Почему бы не использовать их?

Мы выбрали сигнал DVB-T2 (546 МГц) — стабильный, мощный, и что особенно приятно — с известной структурой (OFDM).

Результат? Получился радар без передатчика, который можно запустить хоть на балконе. И да, всё это — на полностью open source стеке.

Архитектура: что мы собрали

Чтобы превратить ТВ-сигнал в радар, нам понадобилось не так уж много железа, но с хитростью.

  1. Capture Unit (RPi 5 + KrakenSDR)
    Снимает IQ-потоки с 5 приёмных каналов, синхронизированных по PPS и GPSDO.

  2. Processing Server
    Получает UDP-потоки, вычисляет CAF (Cross-Ambiguity Function) и CFAR-детекции, объединяет треки с помощью Kalman Filter и Hungarian algorithm

  3. WebSocket 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 или просто хотите помочь улучшить алгоритмы — будем рады вашей помощи.

Комментарии (7)


  1. MAXH0
    13.11.2025 10:37

    Интересно. Если действительно утыкать все многоэтажки такими пассивными антеннами то можно дроны пеленговать?..


  1. REPISOT
    13.11.2025 10:37

    Нам же хотелось видеть небо, не нарушая ни законов физики

    "Нарушают законы физики" - только какие-нибудь альтернативщики с рентв. Как вы можете нарушить законы физики?


    1. IgDem
      13.11.2025 10:37

      Незнание законов физики не освобождает от ответственности за их нарушение :)


  1. iliasam
    13.11.2025 10:37

    Так а результаты-то какие-то есть?


    1. polearnik
      13.11.2025 10:37

      плюсики за статью считаются?



  1. VO_Obsidian
    13.11.2025 10:37

    Задумка на 5, реализация на непонятно сколько, описание на двоечку. Что от статьи что от репозитория и документов в нем настолько пахнет чатгпт, плюс никаких результатов не опубликовано, что я даже затрудняюсь оценить техническую сторону проекта. Поэтому пожалуй прокомментирую по статье:

    1. Теория. Если всё же почитать статью не по диагонали, то оказывается там не описано как работает радар, соответственно непонятно что вы делаете. Идет описание архитектуры, а потом сразу пайплайн. Что вся это штука делает в общем - непонятно.

    2. Наглядные материалы. Вам сложно было стырить пару схематических картинок по запросу passive coherent location radar? Если у вас в репозитории есть че-то сказано про визуализацию, то что, сложно было показать пример этой вашей "тепловой карты"?

    3. Терминология. Как говорили великие: "Ты - чудовище" и "это полный пи****". Статья вызовет кринж не то что у студента радиоэлектроники, а у любого кто читал хоть какие-то материалы по радио на русском языке. Какой, к чёрту, антенный массив? CFAR, CAF, MTI имеют устоявшиеся переводы. Оставлять почему-то фильтр Калмана без перевода, где он как раз дословный, ну это просто пушка.

    Пока я всё это проверял, потому что не особо верил своим глазам, заметил ещё одну большую проблему. У вас в статье нигде не сказано, каким же образом вы используете кракена. Вы сделали антенную решётку на 5 элементов или всё же, как нормальные люди, на 4, а пятый канал принимает чистный сигнал от передатчика DVB-T2/LTE, вместо отраженных?

    Про проблему синхронизации тоже не понял. Источник фактически точечный, что вы там хотите синхронизировать то?