ELINTIR ML/RF MAPPER

s.Link — власний радіолінк

Фізичний і канальний рівень ми пишемо самі. s.Link зв'язує станцію з оператором точка-точка: телеметрія пеленгів туди, команди назад — без ретрансляторів і без інтернету.

Не один режим, а драбина

Кожне окреме використання радіо в нас — окремий іменований профіль зі своїм бюджетом і своїми тестами, а не «налаштування» сусіднього. Вузькосмугові три відрізняються рівно одним важелем: чим повільніші символи, тим вужча шумова смуга приймача — і тим далі чути.

ПрофільСимволів/сСмугаЩо даєСтан
Спільний зі свіпом240 000≈250 кГц Модем живе в апаратному профілі станції 30,72 МВідл/с: поділ рівно ×32 у ЦОС, без дробового ресемплера й дрейфу таймінгу, який той приносить. єдиний, що дав виявлення на спільному тракті
Дальній25 00026 кГц Шумова смуга вдесятеро вужча: −10 дБ, тобто ×3,2 дальності. Лінк везе 11 байтів раз на 15 с — швидкість тут просто нема на що витрачати. розгорнутий, за замовчуванням
Половинний12 500≈13 кГц Ще вдвічі вужче. Теорія обіцяє 10·log₁₀2 = 3,01 дБ, зміряно 2,7–3,0. Один повільний кадр замість двох швидких — слот не рухається. запуск є; ефір — петлею, не полем
4K-відео15 360 00019,2 МГц 1024 байти за 0,557 мс — 14,7 Мбіт/с корисних, усередині 20 МГц стелі AD9363. Окремий профіль, а не «розгін» вузькосмугового. поза ефіром
Профіль — властивість обох кінців
Приймач, налаштований на дальній профіль, бачить сплеск половинного як вісім відліків на символ, а шукає чотири — тож дальній не декодує половинний, і навпаки. Перемкнути один кінець означає покласти лінк в обидва боки. Приймач, який слухав би обидва профілі одразу, цього не рятує: він на ~3 дБ глухіший, тобто віддає рівно те, що профіль заробляє. Це зміряно й відкинуто, а не припущено.
Третього ділення не буде — і винні кварци, а не розклад
Розбіг опорних генераторів двох плат зміряно: 5,01 ppm, тобто 4,4 кГц на 872 МГц. GMSK терпить ≈40 % символьної швидкості, і допуск падає разом зі швидкістю, а розбіг — ні: 12,5 ксимв/с має 5 кГц і ще перекриває розбіг, 6,25 має 2,5 кГц і замість обіцяних +5,9 дБ віддає −4,8, 3,125 не декодує взагалі. Спільна дисципліна годинника — той самий GPS/PPS, що потрібен для стрибків частоти, — відкриває цю драбину назад.

Смуги вузькосмугових профілів — GMSK BT=0.5, ≈1,04 від темпу символів (те саме правило, що дає 26 кГц на 25 ксимв/с). 19,2 МГц для 4K — константа з коду.

ЗміряноЗначенняКоли
Даунлінк станція → оператор, вікно 29,6 хв777 із 803 пакетів = 96,8 %, SNR-медіана 38,5–40,7 дБ05.09 · ефір
Аплінк оператор → станція, 2 хв21 з 21 = 100 %, недекодованих 005.09 · ефір
Втрати після захоплення, s.Link 1.1 проти 1.02,0 % спійманої енергії замість 10,8 %05.09 · ефір
Поріг декодування в ефірі+2.27 дБ15.08 · ефір
Половинний профіль 12,5 ксимв/с, виграш~3 дБ на реальному РЧ-захопленні (+2,7…2,8 у симуляції)01.09 · РЧ-петля
Чутливість приймача, приріст+3.47 дБ узгодженим фільтром16.08 · симуляція AWGN
Швидкість передавача, приріст×10.2, сигнал бітово незмінний17.08 · вимір
Розбіг опорних генераторів двох плат5,01 ppm — 4 369 Гц на 872 МГц12.08 · вимір
Ретюн AD9361 — основа ППРЧ≤0,133 мс осідання, 28 із 28 переходів24.08 · вимір
Стійкість до завади: GMSK проти чирпаGMSK гине від глушника на 1…4 дБ тихішого за себе, чирп тримає +13…+28 дБ06.09 · симуляція
s.Link, безперервний сеанс5 год 20 хв, 4863 кадристенд
s.Link, відмови автентифікації0 з 4863стенд
s.Link, шпаруватість віддаленої станції2,3 % — 83 с ефіру за годинувимір
s.Link, шпаруватість оператора0 % у спокоїконстанта коду
Відео 640×480 крізь увесь ланцюг60 з 60 кадрів побайтово22.08 · стенд

Чого в цій таблиці нема — дальності. Польового прогону на дистанцію не було жодного, тож усі кілометри в наших розрахунках — бюджет лінка, а не вимір. Ефірні числа 05.09 зняті на робочому лінку станція ↔ оператор; порівняння 1.1 проти 1.0 стоїть на вікнах 29,6 і 131 хв — напрям однозначний, точність числа ні.

Це не плани й не наміри: код написаний, ланцюг замикається на стенді, тести зелені. Бракує рівно одного — прогону в ефірі.

Відеоканал 640×480
Увесь ланцюг з'єднано вперше: H.265 → фрагментер → зовнішній код Ріда–Соломона → PHY → і назад. 60 із 60 кадрів побайтово, ffmpeg програв результат. Радіо ще не задіяне.
Керування дроном через s.Link
Стиснена підмножина MAVLink, ~72 біт/с у дальнобійному режимі. Код готовий і протестований, в ефірі ще не був.
s.Link4k — кореневий меш під 4K-відео
Ретрансляція відео без довіри до ретранслятора: він пересилає автентифікований пакет 1024 Б не розбираючи H.265 і не розшифровуючи. Маршрут і слоти роздає наземний приймач, флудинг заборонений за конструкцією — кожен дублікат з'їв би повний сплеск на кожному наступному прольоті. Раніше за інші рядки цього списку: формат, модель місткості й пакетний FEC уже реалізовані поза ефіром — живого радіотракту ще нема. Далі — симулятор планувальника.

Чому «поставити ват» не додає дальності

Найочевидніша відповідь на дальність — підсилювач. Ми її порахували й перевірили, і вона виявилась переважно пасткою. Публікуємо, бо це та частина інженерії, за якою видно, чи людина працювала з залізом.

+20…+23 дБм +12 дБ → ×2 2 Вт → ×4,7 вільний простір біля землі 0 +15 дБ +30 дБ ×1 ×5 приріст дальності від доданої потужності
Біля землі показник 4, а не 2
У двопроменевій моделі дальність росте значно повільніше за потужність: 2 Вт (+27 дБм) дають лише ×4,7, а не ×22. Подвоєння дальності коштує 12 дБ, а не 6. Солодка точка — +20…+23 дБм, а не ват.
Незатворений підсилювач глушить власний приймач
Він тримає підняту шумову підлогу постійно, бо гетеродин не встигає вимикатись між сплесками. Рознесення антен 1 м коштує −4,8 дБ власної чутливості, 0,5 м — −9,5 дБ. Малошумний підсилювач робить це гіршим, а не кращим. Висновок: затвор треба комутувати разом зі сплеском.
Головний блокер — власна решітка
Потужний передавач поруч кладе KrakenSDR у кліп, і відстань не рятує. Маяк одиниць міліват уже це робить. Потрібне бланкування решітки на час сплеску й обмежувач — без них кожен кадр пеленга забруднений.
~9 дБ лежать безкоштовно
Цифрова шкала передавача стоїть на −12 дБ від повної. GMSK має сталу обвідну, тож такого запасу їй не треба — +8…+9 дБ можна взяти без жодного заліза. Зворотний бік того самого факту: рядок бюджету «+6 дБм» імовірно завищений на ті ж 12 дБ, тому розрахунок дальності може бути оптимістичним удвічі. Перший вимір — потужність на роз'ємі.
Цінність LNA — не шум-фактор, а фідер
За шум-фактором він дає лише ~3,6 дБ. Але він знімає з розрахунку втрати кабелю, а вони й вирішують: щогла 10 м дає +14 дБ, тоді як RG58 на 866 МГц з'їдає 6 дБ на десяти метрах і 26 дБ на сорока чотирьох.
Асиметрія ролей уже в коді
Консоль оператора не має бути знайденою ніким, тому вона шле лише те, що оператор свідомо надіслав. Звідси й розподіл: підсилювач потужності — тільки на станції, малошумний — на операторі. Підсилювач на боці оператора був би найгіршою з чотирьох комбінацій.

Куди лінк росте далі

А оце вже плани, і ми їх так і підписуємо. Що вже реалізовано поза ефіром — сказано прямо; число, якого бракує до ефіру, — назване.

ППРЧ — стрибки частоти за ключем
Порядок стрибків виводиться з уже спільного ключа і спільного такту: в ефір не передається нічого, і без ключа наступний канал не вгадується. Набір каналів спершу фільтрується за частотним планом — ключ переставляє лише порядок, не місце. Широкий набір дає до ~28 дБ виграшу обробки проти загороджувальної завади. Чесне обмеження: стелю темпу стрибків тримає синхронізація годинників, а не радіо. Саме радіо вже зміряне — ретюн осідає за ≤0,133 мс (28 із 28 переходів), тож стрибок на кожен слот влазить у бюджет із семикратним запасом; а от розбіг годинників під штатним timesyncd станції дозволяє лише ~0,3 с між стрибками, і лише спільний такт (розкид ~10 мс) робить стрибок на слот законним. Тому першим кроком іде дисципліна часу. Код порядку і плану стрибків уже в дереві й покритий тестами; в ефірі не вмикався.
Меш — s.Link4k, кореневий ретранслятор під 4K
Керований меш, не флудинг: маршрут і TDMA-слоти рахує наземний приймач, а ретранслятор пересилає автентифікований пакет 1024 Б, не розшифровуючи його і не розбираючи H.265. Прямий маршрут за моделлю місткості несе 2160p30; кожен одночастотний реліт ділить ефір. Стан: формат кадру, модель місткості й пакетний FEC реалізовані поза ефіром — зовнішній код стирань Коші-Ріда-Соломона над символами 992 Б, решта пакета до 1024 Б це тег автентифікації. Живого радіотракту ще нема. Далі — симулятор планувальника: HDL і передавач свідомо не починаються, доки він не зелений.
Відео
Ланцюг 640×480 уже зімкнуто на стенді — 60 із 60 кадрів побайтово, лишився ефір. Швидкісний відеопрофіль буде окремим іменованим профілем PHY зі своїм бюджетом і своїми тестами, а не «наладкою» вузькосмугового s.Link; 4K їде через меш вище.
Завадостійкість PHY
Перемежовувач над згортковим кодом — прямий виграш проти імпульсних завад, він не чекає ні на що інше і йде першим. Далі чирп: стенд модуляцій (8 038 прогонів, 06.09, симуляція на справжніх модуляторах і декодерах дерева) показав розрив, якого не закриває жоден профіль GMSK — 15–33 дБ за стійкістю до завади. Будь-який GMSK гине від глушника, слабшого за власний сигнал на 1…4 дБ; чирп тримає +13…+28. Звуження смуги купує чутливість і не купує завадостійкості: вузькосмуговий глушник звужується разом із тобою. У тому самому 43-мс бюджеті чирп ще й на 4,3–4,7 дБ чутливіший за розгорнутий GMSK. CSS-ядро з тестами вже в дереві; в ефірі його не було.
Живучість оператора
Оператор не має бути запеленгованим. У спокої його випромінювання нуль — виміряно. Далі: мінімальна достатня потужність команд за телеметрією станції, випадковий момент випромінювання в межах слота, і відновлення втраченого лінка без фіксованого каналу зустрічі — передає лише станція, оператор тільки слухає.
Дальність 30 км
Порядок робіт порахований: спрямовані антени на обох кінцях (+8…12 дБі — допомагають обом напрямкам одразу), потім локальний шум консолі — виміряні ~29 дБ над власною підлогою приймача, — і лише потім підсилювач. Усі наявні числа зняті на одному майданчику; польовий прогін на 1–3 км передує будь-яким витратам на дальність.

Показати лінк у роботі можемо особисто. Повний технічний вікі і специфікація протоколу — у дата-румі.