Files
SDR-Rover/docs/lab060_current_state.md
2026-09-11 14:13:51 +03:00

6.1 KiB
Raw Permalink Blame History

Lab060 — зафиксированный план сопровождения несущей

Границы

Lab060 выполняется только по сохранённым файлам Lab056, Lab054 и Lab047 и на синтетических данных. Оборудование не опрашивается, аппаратные команды не выполняются, RF TX = 0. Исторический результат Lab054 остаётся NOT_A, 0/16. Штатный приёмник, BPSK, RRC, преамбула, заголовок, FEC, CRC, формат пакета, скорости, timing и packet acquisition не изменяются. Реализация остаётся диагностической ветвью Lab060.

Исходный HEAD после фиксации Lab059: e16ec23fdb57e95ade46e9b6abc215502fca0686.

Информационная граница

P3 получает известную 1280-символьную преамбулу и формирует начальные частоту и фазу. Начиная с первого символа после преамбулы T1 и T2 получают только текущий комплексный символ, собственное решение +1/-1 и своё предыдущее состояние. Правильные header и payload, magic, JPEG, CRC, TX waveform полезной части, whole-burst CFO/phase и будущие символы в работу петли не поступают. TX truth подключается после завершения траектории только для диагностических метрик.

Методы

  • T0 P3_FIXED. Начальные частота и фаза P3 экстраполируются на весь burst без сопровождения. До разработки альтернатив этот baseline должен воспроизвести среднюю SER Lab056 B 3,616990%.
  • T1 DD_PHASE_ONLY. Частота остаётся начальной P3. После каждого собственного решения приёмника фазовое состояние получает поправку первого порядка.
  • T2 DD_PHASE_FREQUENCY. Петля второго порядка обновляет фазу и частоту.

Нормированный фазовый детектор вычисляет угол между скорректированным символом и собственным hard decision. Амплитуда в детектор не входит. Одиночная поправка ограничена ±pi/3; это заранее заданное ограничение выброса.

Для T1 коэффициент фазы равен 1-exp(-2*pi*normalized_bandwidth). Для T2 используются стандартные коэффициенты второго порядка:

theta = Bn / (zeta + 0.25/zeta)

alpha = 4*zeta*theta / (1 + 2*zeta*theta + theta^2)

beta = 4*theta^2 / (1 + 2*zeta*theta + theta^2)

где zeta = 1/sqrt(2), Bn — нормированная полоса в долях symbol rate, alpha — фазовая поправка в радианах на радиан ошибки, а beta — поправка нормированной угловой частоты в радианах на символ.

Настройка до реальных данных

Заранее ограниченный набор Bn:

0,0002; 0,0005; 0,001; 0,002; 0,004.

T1 и T2 выбираются раздельно только на synthetic 500 ксимв/с с EVM 0,845350. Сетка начальной ошибки частоты: 0, ±0,25, ±0,5, ±1, ±2, ±5, ±10 Гц; ошибки начальной фазы: −0,35; 0; +0,35 рад. Для всех кандидатов используются одинаковые fixed seeds. Каждая из 39 комбинаций стартовых ошибок имеет один фиксированный шумовой вариант, одинаковый для всех пяти кандидатов. Критерий выбора по порядку: минимальная доля катастрофических срывов, затем минимальная средняя SER, затем более узкая полоса. После выбора параметры замораживаются и не меняются по результатам Lab056, Lab054 или Lab047.

Независимая validation использует другие seed и две реализации каждой комбинации, обе скорости, три фиксированных EVM 0,317390; 0,55; 0,845350 и ту же сетку начальных ошибок. Чистые точки проходят действующие генератор Lab056, Fs 8 Мвыб/с, квантование и TX/RX RRC; контролируемый AWGN добавляется после выбора символов.

Потеря захвата

Полезная часть делится на 16 равных временных блоков. LOSS_OF_LOCK фиксируется, если два соседних блока имеют SER не менее 25%. Восстановление фиксируется, если после срыва появляются два соседних блока с SER не более 10%. Это диагностический критерий после факта: он использует truth, но не CRC и не влияет на петлю.

Для background дополнительно применяется оракул-независимый показатель mean(cos(2*phase_detector_error)) по каждому блоку. Порог BPSK lock равен 0,15; устойчивый lock требует не менее 12 из 16 блоков и не допускает трёх соседних незахваченных блоков.

Lab060 не коммитируется. Push не выполняется. Lab061 автоматически не создаётся.