Lab067: localize remaining PHY header failures

This commit is contained in:
LittleSam129
2026-09-15 17:45:38 +03:00
parent b27a5cf00e
commit af7c05f2da
18 changed files with 44156 additions and 0 deletions

View File

@@ -0,0 +1,151 @@
# Lab067: офлайн-анализ отказов PHY-заголовка Lab066
## Результат
Причина шести отказов совместима с кратковременным ростом несогласованного
остатка именно в области заголовка. Данных за небольшую ошибку логики приёмника,
временной привязки, сопровождения несущей или состояния кандидатов нет.
`HEADER_FAILURE_ROOT_CAUSE = LOCAL_RF_QUALITY`
`ONE SMALL FIX JUSTIFIED = NO`
`BRANCH DECISION = NO_SMALL_FIX_JUSTIFIED`
Исторический результат Lab066 остаётся 10/16 для legacy и 10/16 для T2.
Oracle-расчёты ниже диагностические и не меняют строгий результат.
## Целостность и геометрия данных
SHA-256 TX и RX совпали с зафиксированными значениями Lab066. RX имеет
16 000 000 комплексных отсчётов, 32 000 000 байт и длительность 2,0 с при
8 Мвыб/с. Все 16 ожидаемых позиций подтверждены строгими кандидатами;
уточнённое смещение для каждого пакета равно 0 отсчётов.
## Сводная таблица
`P err` означает ошибки 1280-символьной преамбулы. `H raw` означает ошибки
среди 144 переданных символов заголовка. `H vote` означает ошибки после штатной
мягкой суммы трёх повторений. Локальная метрика рассчитана по фиксированному
окну: последние 128 символов преамбулы и весь заголовок.
| Пакет | Строгий результат | P err | P corr | H raw | Копии 1/2/3 | H vote | Поля с ошибкой | CFO legacy, Hz | CFO T2/P3, Hz | Timing, отсч. | Локальный M/R, dB | RMS | Legacy/T2 diff | Классификация |
|---:|---|---:|---:|---:|---:|---:|---|---:|---:|---:|---:|---:|---:|---|
| 1 | HEADER FAIL | 15 | 0,898114 | 3 | 1/2/0 | 1 | length | -2,662 | -5,388 | 0 | 5,127352 | 0,554156 | 0 | HEADER_SPECIFIC_FAILURE |
| 2 | HEADER FAIL | 10 | 0,892575 | 6 | 3/2/1 | 1 | length | -11,085 | -5,424 | 0 | 3,453566 | 0,671926 | 1 | HEADER_SPECIFIC_FAILURE |
| 3 | HEADER FAIL | 11 | 0,883245 | 3 | 1/1/1 | 1 | magic | -2,144 | 2,717 | 0 | 4,588577 | 0,589619 | 0 | HEADER_SPECIFIC_FAILURE |
| 4 | PASS | 12 | 0,870256 | 0 | 0/0/0 | 0 | none | -4,970 | 0,501 | 0 | 4,498689 | 0,595752 | 0 | PASSED |
| 5 | PASS | 15 | 0,882299 | 0 | 0/0/0 | 0 | none | 3,163 | -1,271 | 0 | 8,091353 | 0,393942 | 0 | PASSED |
| 6 | PASS | 17 | 0,883426 | 0 | 0/0/0 | 0 | none | 5,595 | 1,262 | 0 | 7,317955 | 0,430628 | 0 | PASSED |
| 7 | PASS | 7 | 0,895704 | 1 | 0/0/1 | 0 | none | -1,265 | -1,236 | 0 | 6,319905 | 0,483064 | 1 | PASSED |
| 8 | PASS | 10 | 0,893515 | 3 | 1/2/0 | 0 | none | 9,131 | -0,471 | 0 | 4,986495 | 0,563216 | 0 | PASSED |
| 9 | HEADER FAIL | 13 | 0,883101 | 4 | 1/2/1 | 1 | length | 6,363 | -1,982 | 0 | 3,775053 | 0,647511 | 0 | HEADER_SPECIFIC_FAILURE |
| 10 | PASS | 14 | 0,875698 | 1 | 0/0/1 | 0 | none | 10,521 | 4,784 | 0 | 4,964081 | 0,564672 | 0 | PASSED |
| 11 | PASS | 14 | 0,873945 | 0 | 0/0/0 | 0 | none | -4,338 | 5,576 | 0 | 5,008753 | 0,561775 | 0 | PASSED |
| 12 | PASS | 15 | 0,869109 | 0 | 0/0/0 | 0 | none | -14,662 | -12,429 | 0 | 6,568840 | 0,469416 | 0 | PASSED |
| 13 | PASS | 19 | 0,887088 | 0 | 0/0/0 | 0 | none | 2,006 | -3,871 | 0 | 7,449922 | 0,424135 | 0 | PASSED |
| 14 | PASS | 13 | 0,897960 | 1 | 0/0/1 | 0 | none | 7,211 | 3,326 | 0 | 5,493857 | 0,531260 | 1 | PASSED |
| 15 | HEADER FAIL | 12 | 0,888738 | 7 | 2/2/3 | 2 | magic, length | -5,732 | -3,520 | 0 | 4,055203 | 0,626960 | 0 | HEADER_SPECIFIC_FAILURE |
| 16 | HEADER FAIL | 16 | 0,880510 | 5 | 1/2/2 | 2 | version, length | 4,734 | 228,105 | 0 | 4,237157 | 0,613963 | 107 | HEADER_SPECIFIC_FAILURE |
Полные строки битов `EXPECTED HEADER BITS`, `RECEIVED RAW HEADER BITS`,
`VOTED HEADER BITS`, причины строгого отказа и позиции ошибок находятся в
`summary.json` и `header_packet_comparison.csv`.
## Преамбула: распределения
| Метрика | Passed min / median / max | Failed min / median / max |
|---|---:|---:|
| Ошибки, бит | 7 / 14 / 19 | 10 / 12,5 / 16 |
| Доля ошибок | 0,005469 / 0,010938 / 0,014844 | 0,007813 / 0,009766 / 0,012500 |
| Корреляция | 0,869109 / 0,882862 / 0,897960 | 0,880510 / 0,885991 / 0,898114 |
| RMS отклонение | 0,489327 / 0,532530 / 0,567221 | 0,489090 / 0,523373 / 0,538197 |
| Matched power | 7,774573 / 8,330450 / 8,667865 | 7,968245 / 8,385475 / 8,982336 |
| Residual power | 2,053382 / 2,346123 / 2,645143 | 2,118219 / 2,258980 / 2,379173 |
| Matched/residual, dB | 4,924949 / 5,473142 / 6,208025 | 5,381167 / 5,624735 / 6,212224 |
Преамбула не отделяет отказавшие пакеты от принятых: медианные физические
показатели failed-группы не хуже. Ухудшение появляется после последних
128 символов преамбулы и внутри заголовка. В этом окне медиана residual power
равна 3,089822 у failed и 2,219458 у passed; медиана `matched/residual` равна
4,146180 и 5,906881 dB соответственно.
## Карта ошибок заголовка
У отказавших пакетов найдено 28 сырых ошибочных решений. Ни одна позиция
не повторяется в двух failed-пакетах. Ошибки встречаются во всех трёх копиях:
9, 11 и 8 ошибок соответственно. После мягкой суммы остаётся 1 ошибка у
пакетов 1, 2, 3 и 9 и 2 ошибки у пакетов 15 и 16.
Общей позиции, стабильно плохой копии, концентрации только в начале или только
в конце заголовка нет. Это не поддерживает гипотезу о систематической ошибке
формата или индексации заголовка.
## Переход преамбула → заголовок
На последних 128 символах преамбулы медиана фазовой RMS-ошибки составляет
0,361 rad у passed и 0,541 rad у failed. На заголовке значения составляют
0,388 и 0,627 rad. У failed-пакетов ошибки заголовка лежат в диапазоне 3–7
сырых решений, а в первых 128 символах после заголовка медиана ошибок равна 0.
Медианная амплитуда остаётся близкой к единице. Общего скачка амплитуды,
смещения точки выборки или одинакового фазового скачка не найдено. Наблюдается
короткое ухудшение фазового остатка, различное по позиции в каждом пакете.
## Timing, CFO и T2
Штатное timing-смещение и диагностическое oracle-смещение равны 0 отсчётов для
всех 16 пакетов. Расхождение legacy CFO с контрольной оценкой создаёт за весь
144-символьный заголовок фазовую ошибку от -0,02488 до +0,02079 rad. Этот
масштаб недостаточен для объяснения 1–2 ошибок после мягкого голосования.
T2 начинает влиять с символа 1280, то есть с начала заголовка. Для пакетов
1, 3, 4–6, 8–13 и 15 его жёсткие решения заголовка побитно совпадают с legacy.
Различия равны одному биту для пакетов 2, 7 и 14. У пакета 16 оценка P3 стала
выбросом 228,105 Hz и изменила 107 решений. Это ухудшение одного пакета не
объясняет шесть legacy-отказов и не даёт основания менять T2 в этой ветке.
## Паузы и положение в сеансе
Для пакета 1 исследован внешний guard длиной 800 000 отсчётов. Для пакетов
2–16 исследованы реальные паузы по 40 000 отсчётов. AC RMS перед пакетами
лежит в диапазоне 0,744879–1,302893. Признаков хвоста предыдущей формы по
критерию превышения первых 8000 отсчётов над серединой паузы на 3 dB нет.
После пакета 16 отдельно проверен конечный guard.
Группы START и END имеют больше ошибок заголовка, чем MIDDLE 1, однако пакет 9
отказывает в середине, пакеты 4, 13 и 14 проходят, а timing, CFO и фон не дают
монотонного временного тренда. Расположение пакетов не доказывает
`START_END_TRANSIENT`.
## 145 кандидатов
Строгий журнал содержит 145 проверок:
- 27 проверок на точных позициях преамбулы, 16 уникальных позиций и 11
повторных проверок той же позиции;
- 54 локальных максимума повторяющейся PRBS-структуры внутри формы пакета;
- 56 кандидатов в нулевых паузах;
- 8 кандидатов вне этих областей.
Каждый кандидат получает новый `PacketMeasure` и полностью независимый строгий
проход. Состояние после отказа не переносится. Граница `accepted_until`
изменяется только после CRC PASS. Большое число кандидатов увеличивает объём
работы, но не объясняет выборочные ошибки настоящих заголовков.
## TX и решение по ветке
Все 16 TX-заголовков побитно идентичны. Magic `0xD391`, версия 1, длина
268 байт, checksum и тройное повторение корректны. Текущий программный прогон
дал 16/16 точных пакетов и для legacy, и для T2.
Конкретная небольшая ошибка приёмника, которая объяснила бы значимую часть
шести отказов, не найдена. Зафиксирован достигнутый результат: 10/16 точных
полных пакетов при 500 ксимв/с и TX VGA 20 dB в аппаратно валидной OTA-записи.
Текущую диагностическую ветку следует закрыть. Следующая проектная ветка:
CRSF/ELRS для управления и телеметрии.
QPSK с меньшей скоростью символов остаётся будущим кандидатом для видеоканала.
В Lab067 QPSK, новый PHY и изменения BPSK не выполнялись.
RF TX = 0. Lab067 не коммитировалась. Push не выполнялся.