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

86 lines
6.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 автоматически не создаётся.