TXLevel и RXLevel: уровень модуляции MMDVM

Категория: КалибровкаСложность: ★★★~9 мин

Хотспот прекрасно работает до первого внимательного взгляда в лог — а там 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 для обоих параметров.

Глобальные и режимные уровни В MMDVM.ini существуют и режимные параметры: DMRTXLevel, DStarTXLevel, YSFTXLevel и т.д. Они переопределяют глобальный TXLevel для конкретного режима. Если используете только DMR — достаточно глобального параметра. Закомментированный DMRTXLevel означает, что будет использован TXLevel.

Почему уровни важны: девиация и 4FSK

DMR использует модуляцию 4FSK (четырёхпозиционная частотная манипуляция с фильтром). Каждый символ передаётся одним из четырёх уровней девиации: ±1,944 кГц и ±0,648 кГц относительно несущей. Если отклонение не соответствует стандарту, приёмник на другом конце (другой хотспот, репитер, рация) начинает делать ошибки при декодировании символов — растёт BER.

Стандарт DMR предписывает полное отклонение ±2,75 кГц для максимального символа. Именно к этому нужно привести TXLevel хотспота. Слишком малый TXLevel — недодевиация, рации плохо декодируют хотспот. Слишком большой — передевиация, соседние символы «наезжают» друг на друга, BER тоже растёт.

Аналогично для приёма: если RXLevel слишком мал — сигнал с рации не «добирает» до порогов АЦП, декодер ошибается. Слишком велик — АЦП перегружается и клиппирует сигнал.

TXLevel — не мощность Параметр не регулирует мощность RF-передатчика хотспота. Мощность определяется аппаратно (чипом СС1101, ADF7021 и т.п. в паре с PA-каскадом или без него). TXLevel влияет только на форму и амплитуду модулирующего сигнала на входе передатчика, то есть на девиацию.

Признаки неверных уровней

Настройка TXLevel через MMDVMCal

MMDVMCal — консольная утилита калибровки, входящая в состав Pi-Star и WPSD. В образе RadioStar доступ к ней — через панель (раздел калибровки) или через SSH. Процедура для DMR-девиации:

  1. Остановить MMDVMHost:
    sudo systemctl stop mmdvmhost
  2. Запустить MMDVMCal, указав порт платы:
    sudo MMDVMCal /dev/ttyAMA0
    (порт может быть /dev/ttyUSB0 — зависит от платы).
  3. В интерфейсе MMDVMCal нажать D для входа в режим DMR Deviation, затем T для начала непрерывной TX-тестовой посылки.
  4. Принять сигнал на SDR-приёмник (RTL-SDR + SDR#/GQRX) или анализатор спектра. На экране будет виден спектр 4FSK — четыре «горба» по две полосы.
  5. Клавишами + / - изменять TXLevel в MMDVMCal, добиваясь правильного расстояния между линиями 4FSK (±1,944 кГц и ±0,648 кГц — итого полное отклонение ±2,75 кГц).
  6. Зафиксировать найденное значение и записать его в MMDVM.ini:
    [Modem]
    TXLevel=62
    (пример — реальное значение зависит от конкретной платы).
  7. Запустить MMDVMHost обратно:
    sudo systemctl start mmdvmhost
Метод без анализатора Если SDR-приёмника нет — передавайте с рации голос или нажмите PTT без речи и следите за BER в логе. Снижайте или поднимайте TXLevel с шагом 5, перезапуская MMDVMHost после каждой правки. Минимальный стабильный BER при неизменном расстоянии — ваша цель (<1%, в идеале <0,5%).

Настройка RXLevel

RXLevel настраивается по приёму: хотспот должен уверенно декодировать сигнал рации с BER ниже 1%. Порядок действий:

  1. Установить рацию рядом с хотспотом на фиксированное расстояние (например, 1–2 метра).
  2. Передавать тестовый сигнал с рации (PTT + речь или непрерывный тон через MMDVMCal — режим R).
  3. Наблюдать BER в реальном времени:
    tail -f /var/log/pi-star/MMDVM-*.log | grep BER
  4. Изменять RXLevel в MMDVM.ini с шагом 5, каждый раз перезапуская MMDVMHost. Цель — минимальный BER при данном расстоянии.
  5. После нахождения оптимума отодвинуть рацию на рабочее расстояние и убедиться, что BER остался приемлемым.

На некоторых платах аппаратный потенциометр RX уже выставлен верно на заводе, и программный RXLevel=50 работает хорошо. Если же потенциометр недоступен или не подписан — программный параметр становится единственным инструментом.

Связка RXOffset + RXLevel Сначала выставляйте частотное смещение (RXOffset/TXOffset) — от него зависит, попадает ли сигнал в полосу декодера. Только после того, как частота точна, регулируйте RXLevel. Если делать наоборот — оптимум уровня окажется ложным и уйдёт после правки частоты.

Уровни, BER и данные сети DMRhub

В голосовом режиме небольшой BER (1–3%) воспринимается как лёгкие артефакты — на практике разговор ещё возможен. Но DMRhub работает не только с голосом: регистрация хотспота, передача идентификаторов, приватные вызовы, синхронизация контакт-листов — всё это данные. Для передачи данных DMR использует те же физические символы, но требует значительно меньшего BER: ошибка в одном байте пакета заголовка может сорвать всю транзакцию.

Правильно выставленные TXLevel и RXLevel в паре с точной частотой (смещение в RXOffset/TXOffset) обеспечивают стабильный BER ниже 0,5% и надёжную работу хотспота с сервером сети. В образе RadioStar параметры уровней доступны в веб-панели без редактирования конфигурационного файла вручную.

Типичные значения и ориентиры

Универсального «правильного» числа нет — каждая плата имеет свой ЦАП/АЦП и тракт. Тем не менее:

Важно Не копируйте значения TXLevel/RXLevel из чужих конфигов без проверки BER на своей плате. Даже одинаковые модели плат могут разниться по допускам компонентов. Чужое значение — только ориентир для начала, а не окончательная настройка.

Ровный уровень — надёжная связь с сетью

После калибровки TXLevel и RXLevel хотспот будет стабильно регистрироваться в DMRhub, а передача данных (приватные вызовы, приложение) пройдёт без ошибок. В образе RadioStar параметры уровней редактируются прямо из панели — без SSH и ручной правки конфигов.

Источники

  1. VK4PK — MMDVMCal DVM Calibration: процедура TX-девиации и RX-уровня — lyonscomputer.com.au
  2. N4IRS MMDVM-Install Wiki — MMDVM Calibration: шаги MMDVMCal, нулевая точка Бесселя — github.com/N4IRS/MMDVM-Install
  3. N4IRS MMDVM.ini reference — параметры TXLevel/RXLevel/DMRTXLevel по умолчанию — github.com/N4IRS/MMDVM-Install
  4. juribeparada MMDVM_HS README — калибровка для HS-плат (ADF7021) — github.com/juribeparada/MMDVM_HS