SDR СПЕКТРАЛЬНИЙ АНАЛІЗ
ВИЯВЛЕННЯ ВОРОЖОГО РЧ ДРОНІВ
Використання програмно-визначеного радіо для виявлення та аналізу РЧ-сигнатур ворожих дронів. SDR обладнання та обробка сигналів.
Від сирого спектру до дієвої розвідки
Утиліта rtl_power зметає діапазон 140–600 МГц приблизно за 2 секунди, створюючи CSV-файл з вимірюваннями потужності в бінах по 100 кГц. При 4 600 частотних бінах на зметання дані формують спектрограму, що розкриває кожен активний передавач у діапазоні. Нормальний фон: тепловий шум на -110 дБм по всіх бінах. Вузькосмуговий глушник з\'являється як різкий пік (+30–50 дБ вище шуму) на конкретній частоті.
Заградительний глушник з\'являється як піднятий рівень шуму по сотнях бінів одночасно. MANET-сигнал зі стрибками частоти з\'являється як короткі мерехтіння по випадкових каналах — значно важче побачити, але виявляється через статистичний аналіз патернів зайнятості каналів.
Lisa 26 обробляє спектрограму автоматично: будь-який постійний сигнал вище рівня шуму плюс 20 дБ, що не відповідає відомим дружнім випромінюванням, класифікується як потенційна загроза. Система корелює виявлення в часі — сигнал, що постійно присутній більше 30 секунд на тій самій частоті, ймовірно є глушником або ворожим радіо, а не перехідним перешкодженням. Пеленг до джерела оцінюється за рівнем сигналу, якщо антена SDR має спрямовані характеристики, або через тріангуляцію, якщо доступні дві SDR-станції.
Тріангуляція — визначення позиції глушника
Дві SDR-станції, розділені відстанню 500+ метрів, можуть тріангулювати позицію глушника. Кожна станція вимірює пеленг до сигналу, використовуючи або спрямовану антену (обертати для максимального сигналу), або амплітудне порівняння між двома фіксованими антенами. Перетин двох пеленгів дає оцінку позиції з точністю, що залежить від базової лінії, точності пеленгу та геометрії.
При базовій лінії 500 м з точністю пеленгу ±5°: точність позиції глушника ±50–100 м на дальності 5 км. Цього достатньо для ураження FPV (пілот FPV може обшукати 100-метрову зону за 10 секунд) або для артилерійської вогневої задачі (100 м CEP знаходиться в радіусі ефективності артилерії).
Оператор глушника стикається з нерозв\'язною дилемою: щоб глушити ефективно, глушник мусить передавати на великій потужності. Передача на великій потужності робить глушник тривіально виявлюваним пасивним SDR. Після визначення місцезнаходження глушник знищується FPV або артилерією. Заміна глушника займає години-дні. Асиметрія витрат драматична: SDR за €25 знаходить глушник за €50 000, який потім знищується FPV-дроном за €270.
Саме тому радіоелектронна боротьба зрештою працює на користь оборонця, який може виявляти, визначати місцезнаходження і знищувати глушники швидше, ніж супротивник може їх розгортати.
Безперервний моніторинг спектру
Безперервний спектральний моніторинг трансформує картину РЕБ з реактивної на проактивну. Без спектрального аналізу бригада дізнається про ворожу дію глушіння лише коли зв\'язок відмовляє — на той момент оперативна шкода вже завдана. З спостереженням спектру в реальному часі Lisa 26 СПРОЄКТОВАНА виявляти активацію глушника протягом секунд і рекомендувати контрзаходи до того, як глушіння впливе на операції (проєктна мета, не валідовано у польових умовах). Спектральна картина настільки ж важлива, як картина рельєфу.
Для кожної бригадної позиції рекомендується мінімум дві SDR-станції з розділенням 500+ метрів. Кожна станція — RTL-SDR V3 донгл (€25), підключений до Jetson Orin Nano або Raspberry Pi 4, з спрямованою антеною (патч або Yagi, €20–50). Повна вартість двох тріангуляційних станцій: менше ніж €200. Ці станції працюють безперервно, пасивно, без випромінювання. Ворог ніколи не дізнається, що його прослуховують, доки FPV-дрон не прилетить на його позицію.
Реалізація
# SDR Spectrum Sweep — RTL-SDR at 300 MHz Military Band
import subprocess, csv, io
def sweep_spectrum(start_mhz=140, end_mhz=600, bin_khz=100):
"""Sweep military band and return power measurements."""
cmd = f"rtl_power -f {start_mhz}M:{end_mhz}M:{bin_khz}k -1 -"
result = subprocess.run(cmd.split(), capture_output=True, text=True)
detections = []
noise_floor = -110 # dBm typical
threshold = noise_floor + 20 # 20 dB above noise
reader = csv.reader(io.StringIO(result.stdout))
for row in reader:
freq_hz = float(row[2])
power_dbm = float(row[6])
if power_dbm > threshold:
detections.append({
"freq_mhz": freq_hz / 1e6,
"power_dbm": power_dbm,
"snr_db": power_dbm - noise_floor,
"type": classify_signal(power_dbm, freq_hz)
})
return detections
def classify_signal(power, freq):
"""Classify detected signal by characteristics."""
if power > -60: return "BARRAGE_JAMMER"
elif power > -80: return "SPOT_JAMMER"
else: return "UNKNOWN_EMITTER"
Пов'язані розділи
Джерела
Специфікації RTL-SDR V3 (rtl-sdr.com). Документація rtl_power (Keenerd, 2023). Публічні звіти про українські C-UAS/C-EW операції 2022–2025 (ISW, RUSI, відкрита аналітика) — FSG-A не має власних спектральних вимірювань. ITU-R радіорегуляції.