Files
SDR-Rover/docs/lab059_offline_result.md

14 KiB
Raw Permalink Blame History

Lab059 — пределы восстановления несущей только по преамбуле

Что произошло простыми словами

У штатного приёмника есть только 2,56 мс известной преамбулы, чтобы предсказать фазу несущей на весь burst длительностью около 204,8 мс. Для ограничения ухода фазы 30 градусами ошибка частоты должна быть не больше 0,4069 Гц. Штатная двухблочная оценка на B1/B2 ошиблась примерно на +4,73/+4,76 Гц и поэтому повернула решения почти на полный оборот к концу burst.

Один из новых диагностических методов, P3, оказался очень удачным именно на двух сохранённых B-сегментах: ошибки составили −0,125 и +0,392 Гц, а средняя доля ошибочных символов упала с 52,4169% до 3,6170%. Это почти совпало с диагностически достижимыми 3,4959% Lab058. Однако это две реализации, и они не доказывают устойчивость. В 5100 синтетических испытаниях качества B P3 попадал в ±0,5 Гц только в 9,61% случаев; лучший по RMSE метод P1 имел RMSE 3,728 Гц и попадал в ±0,5 Гц в 10,47% случаев.

Следовательно, текущая реализация P0 действительно слаба, и P3 может дать хорошую начальную оценку. Одновременно 1280 символов при 500 ксимв/с и наблюдаемом качестве B не дают надёжной субгерцовой точности сами по себе. Для устойчивого результата требуется сопровождать фазу или частоту в ходе самого пакета. Это задаёт следующий программный эксперимент. Физический предел B, установленный Lab058 — около 3,50% ошибочных символов даже при диагностическом выравнивании — остаётся отдельной задачей.

Границы и целостность

Lab059 выполнялась только офлайн. HackRF Plus не опрашивался, аппаратные команды и передачи не запускались, RF TX = 0. Прочитаны сохранённые Lab056, Lab054 и Lab047. Размеры и SHA-256 пяти исходных IQ-файлов проверены до и после расчёта; совпадение полное. Исторический результат Lab054 не изменён: NOT_A, 0/16.

P0 baseline физически записан в baseline_p0.json до вычисления P1–P3. Он воспроизвёл Lab057 для Lab054: максимальное расхождение CFO равно 1,42e-13 Гц, ошибки преамбулы 7767/7767, HEADER/CRC 0/0. Для четырёх сегментов Lab056 различия P0 с Lab058 по CFO, BER и EVM находятся на уровне округления floating point.

Независимая проверка обнаружила, что первая реализация P1–P3 удаляла DC по всему burst до выделения преамбулы. Из-за этого RAW полезной части менял вход оценивателя, хотя правильные payload-биты ему не передавались. Исправленный вариант ограничивает DC и FIR-опору P1/P3 полной преамбулой, а P2 — только TRAIN. Отдельный тест изменяет RAW после преамбулы и подтверждает неизменность P1–P3. P0 намеренно оставлен точным baseline со штатной глобальной обработкой.

Требуемая точность

Использовано delta_f_max = phase_limit / (360*T), где T = 0,2048 с.

Допустимый уход фазы Максимальная ошибка частоты
15° 0,203451 Гц
30° 0,406901 Гц
45° 0,610352 Гц
60° 0,813802 Гц
90° 1,220703 Гц

Порог 0,4069 Гц — инженерная цель для 30°, а не новый обязательный порог протокола. Катастрофическая ошибка Monte Carlo заранее определена как больше 2,441406 Гц, что соответствует уходу более 180° за burst.

Аудит штатной математики P0

Активный код получает точки после номинального переноса 50 кГц, RRC-фильтра и штатного timing. Он возводит BPSK в квадрат, усредняет символы [0,512) и [512,1024), затем берёт разность фаз. Центры находятся в моментах 256/Rs и 768/Rs, расстояние равно 512/Rs. Формула имеет вид delta_phase / (4*pi*(512/Rs)); 4*pi правильно учитывает удвоение фазы после BPSK². Компенсация использует отрицательный знак, gain относится к t=0, центр символа k — к (k+0.5)/Rs. Повторной компенсации не обнаружено.

Для 500 ксимв/с однозначный диапазон P0 равен ±244,140625 Гц, поэтому +4,7 Гц не является алиасом. Главный практический недостаток — две фазовые точки без избыточности; последние 256 символов преамбулы не участвуют в частотной оценке. Для 20 ксимв/с диапазон P0 всего ±9,765625 Гц, поэтому synthetic ±20 и ±100 Гц преднамеренно показывают алиас и увеличивают сводный RMSE P0.

Методы

Метод Использованные символы Оценка Проверка
P0 CURRENT 1024 два блока BPSK² по 512 P2 VALIDATION только как диагностика
P1 FULL PHASE SLOPE 1280 Huber-fit фаз 64 despread-блоков по 20 фиксированная преамбула
P2 SPLIT 576 TRAIN Huber-fit 36 despread-блоков по 16 576 VALIDATION без переоценки
P3 SQUARED FULL 1280 Huber-fit фаз 64 BPSK²-блоков по 20, наклон /2 фиксированная преамбула

P2 использует TRAIN 32…607 и VALIDATION 672…1247; разбиение зафиксировано до результата. Timing одинаков для P0–P3, чтобы эксперимент изолировал carrier recovery. P1/P3 получают RAW-опору только полной преамбулы, P2 — только TRAIN. Ни один новый оцениватель не получает header, magic, payload, JPEG, FEC или CRC.

Lab056 A/B

Ошибки частоты ниже считаются относительно whole-burst diagnostic reference Lab058, подключённого только после заморозки preamble-only оценки.

Метод B1 ошибка CFO B2 ошибка CFO Средняя |ошибка| B1 SER B2 SER Средняя SER B
P0 +4,730655 Гц +4,760847 Гц 4,745751 Гц 52,5218% 52,3121% 52,4169%
P1 −3,318571 Гц +2,179939 Гц 2,749255 Гц 61,2846% 42,1677% 51,7262%
P2 −19,977856 Гц +46,721234 Гц 33,349545 Гц 49,7775% 50,2294% 50,0035%
P3 −0,124881 Гц +0,391708 Гц 0,258294 Гц 3,3089% 3,9250% 3,6170%

P3 дал средние EVM 0,84378 и matched/residual +1,4944 дБ, практически совпав с физической диагностикой Lab058 (0,84535 и +1,46485 дБ). Разница его средней SER с нижней диагностической ссылкой составляет +0,1211 процентного пункта.

Для A1/A2 все методы сохранили среднюю SER 0,01776%. P3 дал EVM 0,31283/0,32516 и ошибки CFO −0,0171/+0,0935 Гц относительно diagnostic reference. P2 сильнее ухудшил EVM A2 до 0,41255, что дополнительно показывает слабость короткого TRAIN.

Ошибка CFO

Фазовый уход

Ошибки символов B

Synthetic Monte Carlo

Чистая преамбула получена действующим TX/RX RRC-трактом при Fs 8 Мвыб/с: 400 отсчётов/символ и 4001 tap для 20 ксимв/с, 16 отсчётов/символ и 161 tap для 500 ксимв/с. После этого на выходе выбора символов добавлен комплексный AWGN с заранее заданным EVM 0,317390, 0,55 или 0,845350. Поэтому тест учитывает реальный RRC и дискретизацию в чистой форме, но не моделирует цветной или частотно-селективный остаток реального OTA-тракта.

Для каждой из 17 частот, каждого качества и каждой скорости выполнено 300 реализаций. В строке качества B для 500 ксимв/с каждый метод имеет 5100 оценок.

Метод Bias RMSE Median abs P95 abs P99 abs Катастрофические P(≤0,25 Гц) P(≤0,5 Гц) P(≤1 Гц)
P0 −0,018 Гц 6,808 Гц 4,643 Гц 13,265 Гц 17,805 Гц 72,08% 3,06% 5,86% 11,61%
P1 +0,050 Гц 3,728 Гц 2,498 Гц 7,437 Гц 9,895 Гц 50,98% 5,24% 10,47% 21,27%
P2 +0,078 Гц 12,264 Гц 8,256 Гц 23,709 Гц 31,583 Гц 83,12% 1,65% 3,67% 7,20%
P3 +0,049 Гц 7,089 Гц 2,935 Гц 8,528 Гц 11,383 Гц 57,94% 4,90% 9,61% 18,25%

Модельная граница Крамера—Рао для известных символов, неизвестной постоянной фазы и комплексного AWGN равна sqrt(6*EVM²*Rs² / ((2*pi)²*N*(N²−1))). При N=1280, Rs=500000 и EVM=0,845350 она даёт СКО не меньше примерно 3,598 Гц. P1 с RMSE 3,728 Гц близок к этому масштабу. Это model-dependent sanity check, а не утверждение, что реальный OTA-остаток является AWGN.

При 20 ксимв/с P1 на том же EVM получил RMSE 0,1465 Гц и 99,92% попаданий в ±0,5 Гц; длительность преамбулы там 64 мс. Разница показывает, что ограничение 500 ксимв/с связано прежде всего с 25-кратно более коротким временем наблюдения, а не с ошибкой единиц или знака.

Распределение synthetic 500K

Lab047 и Lab054

Положительный контроль Lab047 не ухудшился: P0, P1, P2 и P3 каждый получили 36/36 HEADER_ACCEPTED, 36/36 FEC_STARTED, 36/36 CRC_PASS и 36/36 PACKET_OUTPUT. Во всех методах суммарно осталось две ошибки преамбулы и ноль ошибок заголовка.

Lab054 осталась отрицательной для всех методов:

Метод Ошибки преамбулы, сумма Raw header errors Voted header errors HEADER_ACCEPTED FEC_STARTED CRC_PASS PACKET_OUTPUT
P0 7767 946 283 0/16 0/16 0/16 0/16
P1 8264 1000 313 0/16 0/16 0/16 0/16
P2 8871 1085 348 0/16 0/16 0/16 0/16
P3 9020 1140 373 0/16 0/16 0/16 0/16

Эти данные не превращают Lab054 в новый опыт и не меняют его исторический вердикт. Плохое физическое качество Lab054 не исправляется заменой одной оценки частоты.

Lab054

Инженерный вывод

PREAMBLE_ONLY_INSUFFICIENT.

P3 показывает, что штатный P0 можно существенно улучшить на конкретной записи, но ни один preamble-only метод не обеспечивает устойчивую ошибку менее 0,5 Гц при качестве B. Следующий один шаг — полностью офлайн проверить decision-directed carrier tracking на протяжении burst, используя решения BPSK без знания правильного payload. Это сохраняет текущий формат пакета и позволяет использовать P3 как начальную оценку. Costas loop остаётся разумной альтернативой, но потребует отдельной настройки динамики петли. Periodic pilots дают явную опору, однако меняют формат и добавляют overhead, поэтому их логично рассматривать позже.

Lab058 commit: 82f17499ace5e655991240348401b9700c7c3349. Lab059 не коммитировалась. Push не выполнялся. RF TX = 0. Lab060 не создавалась.