Lab059: establish limits of preamble-only carrier estimation
This commit is contained in:
187
docs/lab059_offline_result.md
Normal file
187
docs/lab059_offline_result.md
Normal file
@@ -0,0 +1,187 @@
|
||||
# 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.
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
## 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-кратно более коротким временем наблюдения,
|
||||
а не с ошибкой единиц или знака.
|
||||
|
||||

|
||||
|
||||
## 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 не исправляется заменой одной
|
||||
оценки частоты.
|
||||
|
||||

|
||||
|
||||
## Инженерный вывод
|
||||
|
||||
`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 не создавалась.
|
||||
Reference in New Issue
Block a user