Радиолюбителски цифров модем

LZ16: текстови съобщения през къси вълни — дори когато сигналът е под шума

Като SMS, но без мобилна мрежа, без интернет и без ретранслатори. Само две радиостанции, антена и компютър — и съобщението стига от единия край на страната до другия, а при добро прохождение и много по-далеч.

Проект на LZ2DVD и LZ1XM

Какво е LZ16?

LZ16 е програма, която превръща текст в звук, а звука — обратно в текст. Компютърът „пее“ съобщението в микрофонния вход на радиостанцията, тя го излъчва, а отсрещната станция го чува и нейният компютър го разчита. За потребителя всичко изглежда като обикновен чат: пишеш, натискаш Изпрати и виждаш дали съобщението е доставено.

Най-важното: LZ16 е направен да работи при много слаби сигнали — толкова слаби, че ухото изобщо не ги чува в шума. Затова е подходящ за малка мощност (QRP), за прости антени и за връзки, когато няма мобилна мрежа или интернет.

Ако сте работили FT8 или JS8Call, ще разпознаете идеите: тесни тонове, силна защита от грешки, работа под нивото на шума. Разликата е в целта. FT8 е направен за бърз обмен на позивна, локатор и рапорт. LZ16 е направен за истински съобщения — свободен текст на български, с гаранция, че е стигнал, и с няколко хитрини, които помагат точно когато връзката е на ръба. За тях е по-голямата част от тази статия.

✉️Свободен текстНа кирилица и латиница, до 600 знака. Не са нужни готови шаблони.
✅ПотвърждениеПолучателят автоматично връща „получих“. Липсващите части се пращат отново.
🐢Пет скоростиКогато е шумно — по-бавно и по-сигурно. Програмата сама избира скоростта.
📡ОбявиСтанцията периодично казва „тук съм“ — виждаш кой те чува и колко силно.

Как изглежда в ефира?

Ако отворите водопада на някой приемник (например онлайн SDR в браузъра), сигналът на LZ16 изглежда като верига от кратки тонове, които скачат по честота. Тоновете са 16 — всеки носи 4 бита информация. Колкото по-бавна е скоростта, толкова по-тесен е сигналът и толкова по-дълго трае всеки тон.

Водопад с два сигнала на LZ16: тесен бавен сигнал вляво и по-широк бърз сигнал вдясно
300 Hz10001500200025002900 Hz
Истински изглед на сигнали на LZ16, пресметнат от програмата. Вляво — бавното ниво 3 (тясно, 125 Hz), вдясно — бързото ниво 1 (500 Hz). Времето тече отгоре надолу, честотата е хоризонтално.

Защо работи „под шума“?

На късите вълни винаги има шум — съскането, което чувате между станциите. Силата на сигнала спрямо шума се мери в децибели (dB). LZ16 приема съобщения дори при −19.5 dB, което означава, че сигналът е около 90 пъти по-слаб от шума в обичайната лента на приемника.

Шумът в приемника Сигналът на LZ16 на границата (−19.5 dB) ≈ 1/90 от шума — ухото не го чува изобщо Тайната: тесни тонове, дълго слушане и защита от грешки. Приемникът „слуша“ само там, където може да е тонът, и събира енергията му за цялото време на символа.

Как е възможно? Шумът е разпръснат по цялата лента, а тонът на LZ16 е тесен и трае дълго. Приемникът не слуша „всичко наведнъж“, а проверява всеки от 16-те възможни тона поотделно и събира енергията му. После специален код за защита от грешки поправя сгрешените битове. Подобно правят и популярните режими като FT8, но LZ16 носи свободен текст, а не готови кратки съобщения.

Пет скорости — като да говориш по-бавно, когато е шумно

Когато в стаята е тихо, говорим бързо. Когато е шумно — бавно и ясно. LZ16 има пет нива на скоростта. Всяко по-бавно ниво е два пъти по-бавно, но чува около 3 dB по-слаби сигнали.

Най-слабият сигнал, който всяко ниво приема (по-дълга лента = по-чувствително) Ниво 0 62.5 бода · 1000 Hz −8.5 dB Ниво 1 31.3 бода · 500 Hz −11.5 dB Ниво 2 15.6 бода · 250 Hz −14.5 dB Ниво 3 7.8 бода · 125 Hz −17.0 dB Ниво 4 3.9 бода · 62.5 Hz −19.5 dB Стойностите са измерени при бял шум за един пълен пакет; на реален ефир зависят от замиранията и смущенията.
НивоСкоростШиринаПълен пакетПриема до
0 — бързо62.5 бода1000 Hz≈ 4 s−8.5 dB
131.3 бода500 Hz≈ 8 s−11.5 dB
2 — обичайно15.6 бода250 Hz≈ 16 s−14.5 dB
37.8 бода125 Hz≈ 31 s−17 dB
4 — най-бавно3.9 бода62.5 Hz≈ 62 s−19.5 dB

Един пълен пакет носи около 70 букви на кирилица. Кратките съобщения се побират в един пакет.

Пътят на едно съобщение

Ето какво се случва от момента, в който натиснете Изпрати, до момента, в който отсреща се появи текстът:

⌨️ТекстПишете съобщението като в чат.
🗜️КомпресияЧестите български букви (о, а, е, и…) се записват с по-малко битове.
✂️ПакетиДългият текст се дели на пакети, всеки с номер.
🛡️ЗащитаДобавя се код, който поправя грешки, и проверка за цялост.
🎵ТоновеБитовете стават последователност от 16 тона.
📻ЕфирРадиото ги излъчва; отсреща всичко става в обратен ред.

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

Всеки пакет има три части. Първо идва сигнал за синхронизация — кратка мелодия от 8 тона, по която приемникът разбира „тук започва пакет“ и точно на коя честота е. След това идва заглавието — кой праща, кое съобщение и кой пакет поред. Накрая — самият текст.

Пакет с данни Синхр. 8 тона Заглавие 32 тона · 5 байта + проверка Данни (текст) до 204 тона · до 48 байта + проверка Заглавието отблизо (байт по байт) Подател кратък знак Вид иска ли ✓ № съобщение 0–255 Пакет № от общо Дължина на данните Проверка CRC, 2 байта Данните отблизо — първият пакет носи и двете позивни, следващите само кратък знак за получателя От позивна До позивна Текст компресиран Край CRC До кратък знак Текст продължение Край CRC синхронизация заглавие данни проверка за цялост (CRC) Заглавието и данните са защитени отделно с код, който поправя грешки, и проверка (CRC). Така дори при развален текст приемникът знае кой праща и кой пакет липсва.
Размерите в тонове са за най-дългия пакет. Кратките съобщения са по-къси.

Другите два вида пакети

Потвърждение — само синхронизация и заглавие (много кратко) Синхр. За кого подателя Вид ✓ № съобщ. Карта приети пакети SNR при него CRC Обява — „тук съм“ Синхр. Заглавие: „обява“ Позивна + локатор (KN13…) CRC Картата на приетите пакети казва на подателя точно кои части да изпрати отново.

Без часовник и без цикли

FT8 и FT4 работят на строги цикли от 15 и 7.5 секунди. Часовникът на компютъра трябва да е точен до около секунда, затова всички пускат синхронизация по интернет или GPS. На терен, без мрежа, това е първото нещо, което се разваля.

LZ16 няма цикли. Пакет може да тръгне във всеки момент. Приемникът на всеки 3 секунди преглежда последните няколко десетки секунди звук и търси сигнала за синхронизация навсякъде — по всяко време и на всяка честота между 300 и 2700 Hz. Часовникът на компютъра служи само за показване на часа.

FT8 цикли по 15 s часовникът трябва да е точен до около секунда — всеки предава само в своя прозорец LZ16 без цикли съобщ. 77 друга станция съобщ. 77 ↻ копията се сумират приемникът проверява на всеки 3 s — по всяко време и на всяка честота 0 s 30 s 60 s 90 s 120 s
Горе: при FT8 всеки предава само в своя прозорец. Долу: при LZ16 пакетите идват когато и да е — дори копия на едно и също съобщение, пратени през минути, се намират и се сумират.
🕰️Не трябва точен часБез NTP, без GPS. Компютърът може да е с грешен часовник с минути.
↩️Отговор веднагаНе се чака следващият цикъл — потвърждението тръгва секунди след последния пакет.
🧲Копията се събиратПовторение след минута или след десет — приемникът го свързва с предишното.

Сумиране на счупените пакети

Това е най-силната страна на LZ16 и си струва да се разбере добре.

Меко, а не твърдо

Обикновеният декодер решава за всеки бит „0“ или „1“ и забравя колко е бил сигурен. Ако пакетът не мине проверката, той се изхвърля. LZ16 пази за всеки бит колко е сигурен — число, което в техническата литература се нарича „меко решение“ (LLR). Голямо положително число значи „почти сигурно 0“, голямо отрицателно — „почти сигурно 1“, число близо до нулата — „не знам“.

Така един счупен пакет не е боклук. Той е лист с битове, повечето от които са „почти сигурни“, а няколко — „съмнителни“ или грешни. Когато дойде второ копие, шумът в него е друг, но сигналът е същият. Сигурностите се събират: верните битове се засилват, грешните се „изправят“, защото в другото копие са били верни и уверени.

Копие 1 4 грешни бита — проверката не минава Копие 2 3 грешни бита — проверката не минава Сума (1 + 2) 0 грешни — пакетът е приет ✓ черта нагоре — „0“, надолу — „1“; височината е сигурността; червено — грешен бит
24 бита от един пакет. Всяка черта е сигурността на бита: нагоре — „0“, надолу — „1“. Червените са грешни. Всяко копие поотделно има грешки и не минава проверката; сумата е изцяло вярна.

Какво се пази и колко дълго

Приемникът пази всеки неприет пакет:

Колко дълго приемникът пази счупените копия Ниво 0 1.3 мин Ниво 1 2.6 мин Ниво 2 5.2 мин Ниво 3 10 мин Ниво 4 20 мин Около 20 пълни пакета време — за да има шанс повторението да хване първото копие.
Паметта е по-дълга при бавните нива, защото там едно повторение трае повече.

Откъде идват копията

↻Бутонът „повтори“Изпраща същото съобщение със същия номер. Приемникът сумира новото копие със старите.
⌨️Същият текст, написан нановоНомерът се смята от подател, получател и текст. Еднакъв текст — еднакъв номер — копията се сумират.
✖️Сляпо ×2 … ×5Няколко копия в едно предаване — удобно за CQ и бюлетини.
🔁Автоматичното повторениеПри съобщение с потвърждение липсващите пакети се пращат пак — и се сумират с предишните опити, дори на друго ниво.

Всеки слушател сумира сам за себе си. При CQ или бюлетин станция, която е чула две счупени копия, може да сглоби съобщението, без някой да ѝ го праща специално.

Защо това е изгодно

🕰️Без синхронизация във времетоКопията не трябва да са в определен прозорец. Важно е само да са в паметта.
🌊Срещу замиранияКопия в различно време попадат в различни замирания — едното в дъно, другото на връх. Заедно минават там, където едно копие не би минало.
♻️Нищо не се губиВсеки опит, дори неуспешен, приближава следващия до успеха.
🪶Без допълнителни битовеСумирането не струва нищо в ефира — същите пакети, по-умен приемник.
Пример от симулация. Един пакет на ниво 2, бял шум, SNR −16 dB. Едно копие се приема в 0 % от опитите; две копия, сумирани — в 32 %; четири — в 68 %. При замирания разликата е по-голяма: при −14 dB едно копие минава в 28 % от случаите, две — в 45 %, четири — в 80 %.

Сумирането работи, но печалбата е по-малка от теоретичните 3 dB на удвояване. Причината: за да се сумира, всяко копие първо трябва да бъде намерено — сигналът за синхронизация трябва да се види в шума. При много слаб сигнал част от копията изобщо не се забелязват. Затова сумирането е най-ценно не дълбоко под прага, а на ръба — когато пакетът „почти“ минава, когато липсва един пакет от три или когато замиране е изяло част от предаването.

С потвърждение или без

LZ16 има два начина на изпращане. Програмата избира сама (настройка „Авто“): до конкретна станция — с потвърждение, до CQ, QRZ или ALL — без. Може и ръчно.

✅С потвърждение — до една станция Началната скорост се избира по последния SNR, с който сте чули станцията (ако не сте — ниво 2). След всеки опит получателят връща потвърждение с карта на приетите пакети и SNR, с който ви чува. Повтарят се само липсващите. До 8 пакета.
📢Без потвърждение — до всички Вие избирате нивото и броя повторения (×1 до ×5). Всеки слушател приема и сумира сам. Никой не ви казва дали е стигнало — затова при слаб сигнал е добре да има повторение или по-бавно ниво. До 16 пакета.

Как работи потвърждението

LZ2DVD LZ1XM време → 1 2 3 ниво 1 (бързо) ✗ шум / замиране ✓ 1 и 3 „получих 1 и 3“ 2 само липсващият, ниво 2 (по-бавно) ✓ всички ДОСТАВЕНО На екрана виждате всичко това като етикет до съобщението: „чака потвърждение“ → „доставено“. До всички (CQ) се праща без потвърждение — има кой да чуе, но няма кой да отговори на всеки пакет.

По-бавно или повече пъти?

Ако връзката е слаба, имате два начина да „купите“ чувствителност с време в ефира:

🐢По-бавно нивоДва пъти по-дълго предаване, около 3 dB повече чувствителност.
✖️Повторение ×2Също два пъти по-дълго. Сумирането дава до 3 dB — ако приемникът намери и двете копия.

На хартия цената е еднаква. На практика има разлика и затова пуснахме симулации с истинския приемник на програмата: един пакет от 45 байта, хиляди опити при различен шум.

При какъв SNR минава половината пакети (по-надясно = по-добре) -10 dB -12 dB -14 dB -16 dB -18 dB -20 dB -22 dB Ниво 2 15 s в ефира Ниво 2, бял шум: 50 % при -15.4 dB -15.4 Ниво 2, замирания: 50 % при -12.5 dB -12.5 Ниво 2 ×2 30 s в ефира Ниво 2 ×2, бял шум: 50 % при -15.7 dB -15.7 Ниво 2 ×2, замирания: 50 % при -13.7 dB -13.7 Ниво 3 31 s в ефира Ниво 3, бял шум: 50 % при -18.3 dB -18.3 Ниво 3, замирания: 50 % при -15.7 dB -15.7 Ниво 2 ×4 60 s в ефира Ниво 2 ×4, бял шум: 50 % при -16.3 dB -16.3 Ниво 2 ×4, замирания: 50 % при -15.2 dB -15.2 Ниво 3 ×2 62 s в ефира Ниво 3 ×2, бял шум: 50 % при -18.7 dB -18.7 Ниво 4 62 s в ефира Ниво 4, бял шум: 50 % при -21.4 dB -21.4 бял шум (равен сигнал) замирания (QSB, около 3 s)
Всяка точка е SNR-ът, при който се приемат половината пакети (40 опита на точка; бял шум — кръг, замирания — квадрат). Повторенията дават около 0.4–0.9 dB, по-бавното ниво — около 3 dB.
Бял шум (равен сигнал) 0% 50% 100% -13 -15 -17 -19 SNR, dB → Ниво 2: 0 % при -18 dB Ниво 2: 0 % при -17 dB Ниво 2: 0 % при -16 dB Ниво 2: 78 % при -15 dB Ниво 2: 100 % при -14 dB Ниво 2 ×2: 0 % при -19 dB Ниво 2 ×2: 0 % при -18 dB Ниво 2 ×2: 5 % при -17 dB Ниво 2 ×2: 32 % при -16 dB Ниво 2 ×2: 100 % при -15 dB Ниво 3: 0 % при -20 dB Ниво 3: 5 % при -19 dB Ниво 3: 70 % при -18 dB Ниво 3: 100 % при -17 dB Ниво 3: 100 % при -16 dB Ниво 3: 100 % при -15 dB Замирания (QSB) 0% 50% 100% -7 -10 -13 -16 SNR, dB → Ниво 2: 28 % при -14 dB Ниво 2: 58 % при -12 dB Ниво 2: 78 % при -10 dB Ниво 2: 92 % при -8 dB Ниво 2 ×2: 15 % при -16 dB Ниво 2 ×2: 45 % при -14 dB Ниво 2 ×2: 78 % при -12 dB Ниво 2 ×2: 88 % при -10 dB Ниво 3: 45 % при -16 dB Ниво 3: 80 % при -14 dB Ниво 3: 88 % при -12 dB Ниво 3: 90 % при -10 dB Ниво 2 Ниво 2 (15 s) Ниво 2 ×2 Ниво 2 ×2 (30 s) Ниво 3 Ниво 3 (31 s)
Еднакво време в ефира: ниво 2 ×2 (30 s) срещу ниво 3 ×1 (31 s). Бавното ниво печели и при равен шум, и при замирания. Задръжте мишката върху точка за стойността.
Всички резултати (таблица)
ВариантКаналПриети пакети при SNR
Ниво 2бял шум-14 dB: 100%, -15 dB: 78%, -16 dB: 0%, -17 dB: 0%, -18 dB: 0%
Ниво 2замирания-8 dB: 92%, -10 dB: 78%, -12 dB: 58%, -14 dB: 28%
Ниво 2 ×2бял шум-15 dB: 100%, -16 dB: 32%, -17 dB: 5%, -18 dB: 0%, -19 dB: 0%
Ниво 2 ×2замирания-10 dB: 88%, -12 dB: 78%, -14 dB: 45%, -16 dB: 15%
Ниво 3бял шум-15 dB: 100%, -16 dB: 100%, -17 dB: 100%, -18 dB: 70%, -19 dB: 5%, -20 dB: 0%
Ниво 3замирания-10 dB: 90%, -12 dB: 88%, -14 dB: 80%, -16 dB: 45%
Ниво 2 ×4бял шум-16 dB: 68%, -17 dB: 2%, -18 dB: 0%, -19 dB: 0%, -20 dB: 0%
Ниво 2 ×4замирания-12 dB: 92%, -14 dB: 80%, -16 dB: 30%, -18 dB: 0%
Ниво 3 ×2бял шум-17 dB: 100%, -18 dB: 98%, -19 dB: 25%, -20 dB: 0%, -21 dB: 0%
Ниво 4бял шум-17 dB: 100%, -18 dB: 100%, -19 dB: 100%, -20 dB: 95%, -21 dB: 78%, -22 dB: 2%
Ниво 4замирания-12 dB: 100%, -14 dB: 92%, -16 dB: 88%, -18 dB: 75%
Изводът. При същото време в ефира по-бавното ниво е по-изгодно от повторенията: ниво 3 приема половината пакети при −18.3 dB, а ниво 2 ×2 — едва при −15.7 dB; ниво 4 стига до −21.4 dB, а ниво 2 ×4 — до −16.3 dB. При замирания картината е същата: −15.7 dB за ниво 3 срещу −13.7 dB за ниво 2 ×2, а ниво 4 приема 75 % от пакетите дори при −18 dB.

Защо тогава повторения? Защото не винаги може по-бавно: най-бавното ниво може да е заето като ширина или да е твърде дълго за прохождението, а при съобщение с няколко пакета повторението праща само липсващите. Сумирането прави всеки неуспешен опит полезен, вместо да го изхвърля. Затова LZ16 прави и двете: скоростната кутия слиза по-бавно, а всичко, което вече е чуто, се сумира.

Симулациите са с истинския приемник на програмата (синхронизация, декодиране, сумиране), един пакет от 45 байта, бял шум в лента 2500 Hz; замиранията са рейлиеви, около 3 s. На реален ефир числата ще са различни, но съотношенията се запазват.

Съвети при слаба връзка

1. Оставете „Авто“. Скоростната кутия гледа SNR-а, който ви докладва отсрещната станция, и сама слиза или се качва. Ръчно ниво има смисъл главно при CQ.
2. Не пишете различен текст. Ако съобщението не мине, натиснете ↻ повтори или напишете точно същия текст — копията ще се сумират. Нов текст започва от нулата.
3. Пишете кратко. Един пакет побира около 70 букви. Всеки следващ пакет е още време и още риск. Q-кодовете и съкращенията тук са на мястото си.
4. Гледайте „SNR при тях“. След доставка до съобщението пише с какъв SNR ви чуват. Под −12 dB следващия път е по-добре да започнете с ниво 2 или 3.
5. Слаб сигнал — по-бавно ниво, не повече повторения. При еднакво време в ефира бавното ниво печели около 2 dB (виж симулациите горе). Повторението е за случаите, когато някой вече е чул счупено копие.
6. CQ на ръба. Сляпо на ниво 3 вместо ниво 2 ×2. Ако след това никой не отговори, „↻ повтори“ — слушателите ще сумират новото копие със старото.
7. Чист сигнал. USB / DIG-U, ALC почти нула. Претоварен сигнал се разлива по честота, пречи на съседите и разваля собствената ви синхронизация.
8. Проверете, че излизате. С онлайн SDR като вход програмата ви показва „◎ чуто“ до съобщението, ако е хванала собственото ви предаване.

Всеки — на свободно място

В лентата на приемника (около 2.4 kHz) се събират няколко сигнала на LZ16 едновременно. Преди да предава, програмата поглежда какво е заето и избира свободно място — по подразбиране в горната част на лентата. Така няколко двойки могат да си пишат едновременно, без да си пречат. Мястото, където някой очаква потвърждение, се пази свободно, докато отговорът дойде.

Лентата на приемника LZ2DVD → LZ1XM LZ1ABC → CQ обява 300 Hz1500 Hz2700 Hz Сигналите се подреждат от горния край (вдясно) надолу — там хармониците на звука падат извън филтъра на радиото.

Как изглежда програмата

Програмата се отваря в браузъра. Отгоре е водопадът — виждате какво се случва в ефира. В средата е чатът, вдясно — станциите, които ви чуват, и колко силно. Всички настройки (радио, звук, скорости) са в раздела Настройки, без да пипате файлове.

Екранът на LZ16: водопад, чат със съобщения и списък с чути станции
Примерен разговор: общо повикване (CQ), отговор с потвърждение („доставено“) и обратен отговор. Позивните в балончетата се кликат — така отговаряте с едно натискане.

Какво още може

🌐Онлайн SDR като приемникСлушайте през приемник в интернет и вижте дали сигналът ви излиза в ефир.
🔁Чуто собствено предаванеАко приемникът чуе вашия сигнал, съобщението се отбелязва с „◎ чуто“.
⏱️Слуша преди да говориНе предава върху друг — изчаква или избира свободно място.
🧩Мрежов интерфейсДруги програми (ботове, логове, свой интерфейс) могат да пращат и приемат през LZ16.
⚡Бързо ядроДекодирането ползва всички ядра на процесора.
🔒СигурностИнтерфейсът е достъпен само от вашия компютър, освен ако не разрешите локалната мрежа.

Какво ви трябва

📻КВ радиостанцияПроверено с Yaesu FT-897. Предстои QRP Labs QMX — малка QRP станция, удобна за работа на терен.
🔌Звук и управлениеUSB звукова карта към радиото и CAT кабел (за включване на предаването).
💻Компютър с LinuxЛаптоп или настолен с Debian, Ubuntu, Kali или Mint. Инсталира се с една команда.
🍓Raspberry Pi?Още не е изпитан. Непрекъснатото декодиране на всички нива е тежко; на Pi 4/5 вероятно ще трябва по-малко нива (Настройки → Приемане).
🪪Радиолюбителско разрешителноПредаването в любителските обхвати е разрешено само на правоспособни радиолюбители.
Радиото се слага на режим USB / DIG-U, а нивото на звука се настройва така, че ALC да е почти нула — тогава сигналът е чист и не пречи на съседите. В програмата има бутон Тон 5 s точно за тази настройка.

Накъде продължаваме

Следващата стъпка е работа с QRP Labs QMX, а след това — приложение за Android: телефон, малка QRP станция и антена в раницата, за съобщения от планината, където няма покритие. Целта е LZ16 да стане удобен инструмент за връзка, когато другите средства не работят.