TXLevel и RXLevel: уровень модуляции MMDVM
Хотспот прекрасно работает до первого внимательного взгляда в лог — а там BER 3%, 5%, иногда больше. Рация слышит хотспот с хрипами, или наоборот: хотспот не декодирует рацию. Частота выверена, Color Code верный, а ошибок много. Виновник в большинстве случаев — неверно выставленные параметры TXLevel и RXLevel в файле MMDVM.ini. Разберём, что это такое, как они работают и как их правильно настроить.
Что такое TXLevel и RXLevel
В секции [Modem] файла конфигурации MMDVM.ini (или эквивалентных настройках Pi-Star/WPSD) находятся два ключевых параметра:
[Modem]
TXLevel=50
RXLevel=50
TXLevel — программное масштабирование уровня сигнала, который MMDVMHost подаёт на ЦАП (DAC) платы хотспота. Чем выше значение, тем больше амплитуда сигнала на входе передатчика платы, а значит — больше девиация (FM-отклонение) в эфире.
RXLevel — программное масштабирование уровня сигнала, поступающего с выхода дискриминатора приёмника платы на АЦП (ADC) микроконтроллера. Регулирует чувствительность тракта приёма со стороны программы.
Оба параметра принимают целочисленные значения. Фактический рабочий диапазон зависит от прошивки платы: для большинства MMDVM_HS-плат (ZUMspot, MMDVM_HS_Hat, Nano_hotSPOT) значимый диапазон — от 0 до 100 (единицы близки к процентам от максимума), но в файле конфигурации допустимы значения и выше. Значение по умолчанию — 50 для обоих параметров.
Почему уровни важны: девиация и 4FSK
DMR использует модуляцию 4FSK (четырёхпозиционная частотная манипуляция с фильтром). Каждый символ передаётся одним из четырёх уровней девиации: ±1,944 кГц и ±0,648 кГц относительно несущей. Если отклонение не соответствует стандарту, приёмник на другом конце (другой хотспот, репитер, рация) начинает делать ошибки при декодировании символов — растёт BER.
Стандарт DMR предписывает полное отклонение ±2,75 кГц для максимального символа. Именно к этому нужно привести TXLevel хотспота. Слишком малый TXLevel — недодевиация, рации плохо декодируют хотспот. Слишком большой — передевиация, соседние символы «наезжают» друг на друга, BER тоже растёт.
Аналогично для приёма: если RXLevel слишком мал — сигнал с рации не «добирает» до порогов АЦП, декодер ошибается. Слишком велик — АЦП перегружается и клиппирует сигнал.
Признаки неверных уровней
- BER стабильно выше 1–2% при хорошем уровне сигнала (RSSI нормальный).
- Рация слышит хотспот с «хрипами», цифровые артефакты в голосе.
- Хотспот не декодирует рацию: в логе MMDVMHost.log видны строки invalid SYNC или непрерывный шум RSSI без декодирования.
- BER меняется от передачи к передаче непредсказуемо, хотя расстояние не меняется.
- После правки частотного смещения (RXOffset/TXOffset) BER улучшился, но остался выше нормы.
Настройка TXLevel через MMDVMCal
MMDVMCal — консольная утилита калибровки, входящая в состав Pi-Star и WPSD. В образе RadioStar доступ к ней — через панель (раздел калибровки) или через SSH. Процедура для DMR-девиации:
- Остановить MMDVMHost:
sudo systemctl stop mmdvmhost - Запустить MMDVMCal, указав порт платы:
(порт может быть /dev/ttyUSB0 — зависит от платы).sudo MMDVMCal /dev/ttyAMA0 - В интерфейсе MMDVMCal нажать D для входа в режим DMR Deviation, затем T для начала непрерывной TX-тестовой посылки.
- Принять сигнал на SDR-приёмник (RTL-SDR + SDR#/GQRX) или анализатор спектра. На экране будет виден спектр 4FSK — четыре «горба» по две полосы.
- Клавишами + / - изменять TXLevel в MMDVMCal, добиваясь правильного расстояния между линиями 4FSK (±1,944 кГц и ±0,648 кГц — итого полное отклонение ±2,75 кГц).
- Зафиксировать найденное значение и записать его в MMDVM.ini:
(пример — реальное значение зависит от конкретной платы).[Modem] TXLevel=62 - Запустить MMDVMHost обратно:
sudo systemctl start mmdvmhost
Настройка RXLevel
RXLevel настраивается по приёму: хотспот должен уверенно декодировать сигнал рации с BER ниже 1%. Порядок действий:
- Установить рацию рядом с хотспотом на фиксированное расстояние (например, 1–2 метра).
- Передавать тестовый сигнал с рации (PTT + речь или непрерывный тон через MMDVMCal — режим R).
- Наблюдать BER в реальном времени:
tail -f /var/log/pi-star/MMDVM-*.log | grep BER - Изменять RXLevel в MMDVM.ini с шагом 5, каждый раз перезапуская MMDVMHost. Цель — минимальный BER при данном расстоянии.
- После нахождения оптимума отодвинуть рацию на рабочее расстояние и убедиться, что BER остался приемлемым.
На некоторых платах аппаратный потенциометр RX уже выставлен верно на заводе, и программный RXLevel=50 работает хорошо. Если же потенциометр недоступен или не подписан — программный параметр становится единственным инструментом.
Уровни, BER и данные сети DMRhub
В голосовом режиме небольшой BER (1–3%) воспринимается как лёгкие артефакты — на практике разговор ещё возможен. Но DMRhub работает не только с голосом: регистрация хотспота, передача идентификаторов, приватные вызовы, синхронизация контакт-листов — всё это данные. Для передачи данных DMR использует те же физические символы, но требует значительно меньшего BER: ошибка в одном байте пакета заголовка может сорвать всю транзакцию.
Правильно выставленные TXLevel и RXLevel в паре с точной частотой (смещение в RXOffset/TXOffset) обеспечивают стабильный BER ниже 0,5% и надёжную работу хотспота с сервером сети. В образе RadioStar параметры уровней доступны в веб-панели без редактирования конфигурационного файла вручную.
Типичные значения и ориентиры
Универсального «правильного» числа нет — каждая плата имеет свой ЦАП/АЦП и тракт. Тем не менее:
- Значение по умолчанию 50 — разумная стартовая точка для большинства плат.
- Для плат на базе ADF7021 (ZUMspot, MMDVM_HS_Hat) типичный рабочий диапазон TXLevel — 40–70.
- Для СС1101-плат (например, Nano_hotSPOT) значения могут отличаться; ориентируйтесь только на BER и спектр, а не на чужие цифры.
- Если оба уровня нужно поднимать выше 80, скорее всего, проблема аппаратная — стоит проверить аналоговый тракт и потенциометры.
Ровный уровень — надёжная связь с сетью
После калибровки TXLevel и RXLevel хотспот будет стабильно регистрироваться в DMRhub, а передача данных (приватные вызовы, приложение) пройдёт без ошибок. В образе RadioStar параметры уровней редактируются прямо из панели — без SSH и ручной правки конфигов.
Источники
- VK4PK — MMDVMCal DVM Calibration: процедура TX-девиации и RX-уровня — lyonscomputer.com.au
- N4IRS MMDVM-Install Wiki — MMDVM Calibration: шаги MMDVMCal, нулевая точка Бесселя — github.com/N4IRS/MMDVM-Install
- N4IRS MMDVM.ini reference — параметры TXLevel/RXLevel/DMRTXLevel по умолчанию — github.com/N4IRS/MMDVM-Install
- juribeparada MMDVM_HS README — калибровка для HS-плат (ADF7021) — github.com/juribeparada/MMDVM_HS