Lab063: localize Lab062 RF quality degradation offline

This commit is contained in:
LittleSam129
2026-09-14 15:11:46 +03:00
parent f8ae6c6bfc
commit 4437917465
17 changed files with 2374 additions and 0 deletions

View File

@@ -0,0 +1,212 @@
# Lab063: офлайн-локализация TX underrun и ухудшения пакетов Lab062
## Что установлено
Lab062 остаётся аппаратно невалидным опытом: во время единственной передачи журнал показал `1 underruns, longest 16672 bytes`, хотя итоговая строка показала ноль. Офлайн-анализ не нашёл в RX-записи временного скачка, пропуска или повтора ожидаемого масштаба в 221 надёжном внутреннем окне. Локальная задержка в них составляет 0…1 отсчёт. Ещё в 22 внутренних окнах корреляция ниже 0,15, поэтому задержку там установить нельзя.
Качество сигнала при этом хуже Lab056 B на протяжении всего потока. Все 16 пакетов имеют большую долю ошибочных символов и EVM, а отношение согласованной полезной составляющей к остатку у всех ниже. Пакеты 3, 4, 12 и 13 содержат дополнительные всплески AC-мощности и остатка при почти неизменной TX-согласованной амплитуде. Это указывает на добавочную помеху или искажение, а не на провал полезной несущей в этих пакетах. По сохранённой записи нельзя установить конкретный аппаратный источник.
Цифровые значения далеки от пределов cs8: по пакетам `max |I| = 3…6`, `max |Q| = 4…7`. Сильная аналоговая перегрузка поэтому менее вероятна. Отсутствие rail clipping не является измерением аналоговой линейности, и без отдельного прибора аналоговую компрессию исключить нельзя.
Итоговый выбор: **B. `GLOBAL_RF_DEGRADATION`**. Единичный локальный underrun недостаточен для объяснения всего результата, а его положение по RX не локализовано.
## Целостность и границы анализа
Анализ выполнен без RF и без опроса аппаратуры:
- TX SHA-256: `e84bbce227426c0aac13a48ded1286ca4a44fc6e3efce01f6e5a513217c87ff5`;
- RX SHA-256: `ce0bd603e4ca356af67d504ee11c9e9f38171f31c7427fbe61216a28126b2b32`;
- TX: 1 476 096 комплексных отсчётов;
- RX: 24 000 000 комплексных отсчётов;
- сохранённое начало TX в RX: отсчёт 4 256 091;
- `RF TX = 0`;
- аппаратных запросов: 0.
Поиск использует известный TX только после строгого результата `0/16`; это диагностическая привязка, которая не превращает пакет в принятый и не меняет verdict `legacy` или T2.
## Фактические паузы между пакетами
Проверка длины даёт точное равенство:
`92 256 отсчётов × 16 пакетов = 1 476 096 отсчётов`.
Следовательно:
`ACTUAL INTER-PACKET GAP = 0 additional samples = 0 s`.
Запланированных пауз 5 мс в TX-файле нет. Внутренние защитные интервалы и хвосты RRC, входящие в каждый 92 256-отсчётный waveform, присутствуют.
Код `prepare()` в `experiments/lab062_full_packet_rf_preflight.py` записывает шестнадцать результатов `build_parameterized_tx_cs8(...)` непосредственно друг за другом. Между вызовами нет параметра паузы, массива нулей или другой операции, которая добавила бы 5 мс. Причина: **ошибка реализации подготовки Lab062**. Возможность сформировать паузы в других генераторах проекта означает, что это не установленное ограничение PHY-генератора.
## Масштаб сообщения TX underrun
Для cs8 один комплексный отсчёт занимает два байта:
| Величина | Значение |
|---|---:|
| Журнал, bytes | 16 672 |
| Комплексные отсчёты | 8 336 |
| Длительность при 8 Мвыб/с | 1,042 мс |
| Символы при 500 ксимв/с | 521 |
| Доля waveform одного пакета | 9,035727 % |
Это только пересчёт масштаба строки журнала. Он не доказывает фактическую потерю, повтор или замену 8 336 отсчётов в эфире.
## Локальное сопоставление TX и RX
TX разбит на окна по 512 символов, то есть по 8 192 отсчёта. Шаг равен 256 символам, или 4 096 отсчётам. Для каждого окна независимо искалось положение в RX в пределах ±12 000 отсчётов, затем вычислялись нормированная корреляция, комплексный коэффициент `h`, его амплитуда и фаза, а также остаточная мощность.
Повторяющаяся PRBS-преамбула создаёт ложные корреляционные максимумы с периодом 2 032 отсчёта. Поэтому решение о временном скачке использует внутреннюю часть каждого пакета от отсчёта 24 000 до 86 000 и требует корреляцию не ниже 0,15. Края, преамбула и внутренние окна ниже порога остаются в `local_alignment.csv` для проверки, но их выбранная задержка не участвует в verdict.
| Показатель | Значение |
|---|---:|
| Всего окон | 359 |
| Надёжных окон | 221 |
| Внутренних окон с корреляцией ниже 0,15 | 22 |
| Корреляция, минимум по всем окнам | 0,071665 |
| Корреляция, медиана по всем окнам | 0,265526 |
| Корреляция, максимум по всем окнам | 0,287394 |
| Локальная задержка в надёжных окнах | 0…1 отсчёт |
| Кандидаты на скачок | 0 |
- `UNDERRUN LOCATION = NOT_LOCALIZED_FROM_RX`
- `LOCAL DELAY DISCONTINUITY = NO IN 221 RELIABLE WINDOWS; UNDETERMINED IN 22 INTERNAL LOW-CORRELATION WINDOWS`
Внутренние окна с низкой корреляцией распределены так:
- пакет 3: 5 окон, позиции 69 440…85 824 отсчёта внутри пакета;
- пакет 4: 7 окон, позиции 26 336…46 816 и 55 008 отсчётов;
- пакет 12: 7 окон, позиции 58 336…82 912 отсчётов;
- пакет 13: 3 окна, позиции 27 520…35 712 отсчёта.
Низкая корреляция совпадает с пакетами, где выросли AC-мощность и остаток. Она подтверждает локальные участки сильного искажения. Без надёжной оценки задержки эти участки не доказывают пропуск или повтор отсчётов и не локализуют TX underrun.
Поиск не подгонялся под ожидаемые 8 336 отсчётов. Он способен обнаружить синтетически вставленный скачок и проверяет переходы между пакетами; оба свойства закрыты отдельными тестами.
## Качество пакетов 1–16
`raw` означает полную принятую мощность вместе с DC. `useful` в таблице означает AC-мощность пакета после вычитания средней фоновой AC-мощности до и после потока. Это избыточная над фоном мощность, а не доказанная мощность только полезного TX-сигнала. `M/R` означает отношение TX-согласованной составляющей к остатку. Остаток включает шум, помехи, искажения канала и возможное влияние underrun.
| № | raw, код² | useful, код² | SER, % | EVM RMS | matched / residual, код² | M/R, дБ | ripple, дБ | CFO, Гц | phase, рад |
|---:|---:|---:|---:|---:|---:|---:|---:|---:|---:|
| 1 | 4,900592 | 0,062620 | 8,517888 | 1,088322 | 0,707513 / 0,838011 | -0,735151 | 6,642520 | +1,007302 | 5,396055 |
| 2 | 4,865147 | 0,056422 | 9,795571 | 1,104921 | 0,670874 / 0,819037 | -0,866627 | 6,598551 | +1,641699 | 0,911620 |
| 3 | 6,015186 | 1,184291 | 10,221465 | 1,357844 | 0,618128 / 1,139667 | -2,656997 | 7,370969 | -0,961988 | 0,917422 |
| 4 | 8,462127 | 3,605520 | 15,587734 | 1,663418 | 0,694253 / 1,920969 | -4,420028 | 10,617549 | +2,584550 | 5,388297 |
| 5 | 4,954615 | 0,062684 | 8,986371 | 1,099196 | 0,702182 / 0,848399 | -0,821507 | 6,409726 | -1,235846 | 0,834217 |
| 6 | 4,919648 | 0,053559 | 7,580920 | 1,102402 | 0,644466 / 0,783214 | -0,846803 | 6,364293 | -1,779543 | 5,318132 |
| 7 | 4,958322 | 0,059386 | 8,390119 | 1,100152 | 0,681935 / 0,825370 | -0,829054 | 6,236828 | -0,248409 | 1,461754 |
| 8 | 4,913306 | 0,063207 | 8,262351 | 1,149257 | 0,638148 / 0,842861 | -1,208345 | 6,714921 | -1,078363 | 0,781772 |
| 9 | 4,886956 | 0,065556 | 8,943782 | 1,141831 | 0,658122 / 0,858045 | -1,152037 | 6,809132 | +0,832282 | 1,073865 |
| 10 | 4,915355 | 0,067571 | 8,347530 | 1,092396 | 0,697137 / 0,831913 | -0,767600 | 6,678161 | -1,337873 | 0,770315 |
| 11 | 4,919918 | 0,072081 | 8,049404 | 1,085344 | 0,688251 / 0,810740 | -0,711347 | 6,630624 | +1,139696 | 0,886944 |
| 12 | 6,800707 | 1,948029 | 12,819421 | 1,456604 | 0,631331 / 1,339491 | -3,266829 | 7,945032 | -0,158710 | 1,085095 |
| 13 | 7,571594 | 2,728649 | 16,013629 | 1,542472 | 0,670672 / 1,595675 | -3,764344 | 9,871896 | -3,768748 | 1,477869 |
| 14 | 4,931040 | 0,060762 | 9,454855 | 1,125042 | 0,631853 / 0,799750 | -1,023377 | 6,450866 | +0,071570 | 0,850015 |
| 15 | 4,914640 | 0,056175 | 9,284497 | 1,156613 | 0,648517 / 0,867557 | -1,263765 | 7,550267 | +0,636870 | 5,326811 |
| 16 | 4,976760 | 0,059023 | 8,603066 | 1,063657 | 0,702947 / 0,795290 | -0,536031 | 6,391673 | +1,336558 | 0,741441 |
Полные значения, включая локальную задержку, корреляцию, `|h|`, DC и разности относительно Lab056 B, находятся в `data/processed/lab063/packet_quality.csv`.
## Уровень RX и DC во время передачи
Средняя фоновая AC-мощность соседних окон равна 0,525282 код², что соответствует AC RMS 0,724764 кода. На RX-only preflight было 0,985483 кода AC RMS.
| № | RMS full | AC RMS | mean I | mean Q | max \|I\| | max \|Q\| | max \|IQ\| |
|---:|---:|---:|---:|---:|---:|---:|---:|
| 1 | 2,213728 | 0,766748 | 0,969270 | 1,836629 | 3 | 4 | 4,472136 |
| 2 | 2,205708 | 0,762695 | 0,967753 | 1,829453 | 3 | 4 | 4,472136 |
| 3 | 2,452588 | 1,307507 | 0,970094 | 1,834266 | 6 | 7 | 7,211102 |
| 4 | 2,908974 | 2,032438 | 0,960349 | 1,846362 | 6 | 7 | 7,615773 |
| 5 | 2,225897 | 0,766789 | 0,964512 | 1,853744 | 3 | 4 | 4,242640 |
| 6 | 2,218028 | 0,760816 | 0,968934 | 1,844444 | 3 | 4 | 4,472136 |
| 7 | 2,226729 | 0,764636 | 0,963515 | 1,856150 | 3 | 4 | 4,472136 |
| 8 | 2,216598 | 0,767131 | 0,958919 | 1,845343 | 3 | 4 | 4,472136 |
| 9 | 2,210646 | 0,768660 | 0,954128 | 1,840043 | 3 | 4 | 4,472136 |
| 10 | 2,217060 | 0,769969 | 0,947830 | 1,850438 | 3 | 4 | 4,242640 |
| 11 | 2,218089 | 0,772893 | 0,943039 | 1,852898 | 3 | 4 | 4,472136 |
| 12 | 2,607816 | 1,572676 | 0,954995 | 1,848075 | 6 | 7 | 8,062258 |
| 13 | 2,751653 | 1,803866 | 0,952307 | 1,846828 | 6 | 7 | 7,810249 |
| 14 | 2,220594 | 0,765535 | 0,952166 | 1,854286 | 3 | 4 | 4,472136 |
| 15 | 2,216899 | 0,762534 | 0,949651 | 1,852389 | 3 | 4 | 4,472136 |
| 16 | 2,230865 | 0,764399 | 0,956903 | 1,864616 | 3 | 4 | 4,472136 |
DC стабилен: `mean I = 0,943039…0,970094`, `mean Q = 1,829453…1,864616`. Ступени AC-амплитуды есть в пакетах 3, 4, 12 и 13. При этом медиана локального `|h|` по пакетам меняется только от 0,004488 до 0,004805. Рост полной AC-мощности в этих пакетах создаёт главным образом остаток, а не согласованный полезный компонент.
## Пакеты 3, 4, 12 и 14
У четырёх ранее отмеченных пакетов нет общего признака underrun:
- у всех четырёх нет скачка задержки;
- у них нет общего провала мощности;
- у них нет общей потери локальной корреляции;
- пакет 14 близок к обычным пакетам по AC RMS, SER, EVM и неравномерности полосы;
- пакеты 3, 4 и 12 имеют всплески AC-мощности и остатка; аналогичный, ещё более выраженный всплеск есть у пакета 13.
Поэтому связывать набор `3, 4, 12, 14` с одним TX underrun оснований нет. По сводному ранжированию наиболее повреждены пакеты `13, 4, 12, 3`.
## Тренд по четвертям потока
| Пакеты | useful, среднее код² | SER, % | EVM RMS | matched, код² | residual, код² | M/R, дБ | CFO, Гц | phase error, рад | local phase span, рад | медиана \|h\| |
|---|---:|---:|---:|---:|---:|---:|---:|---:|---:|---:|
| 1–4 | 1,227213 | 11,030664 | 1,303626 | 0,672692 | 1,179421 | -2,169701 | +1,067891 | 3,153349 | 0,117419 | 0,004637 |
| 5–8 | 0,059709 | 8,304940 | 1,112752 | 0,666683 | 0,824961 | -0,926427 | -1,085540 | 2,098969 | 0,150020 | 0,004608 |
| 9–12 | 0,538309 | 9,540034 | 1,194044 | 0,668710 | 0,960047 | -1,474453 | +0,118849 | 0,954055 | 0,128511 | 0,004658 |
| 13–16 | 0,726152 | 10,839012 | 1,221946 | 0,663497 | 1,014568 | -1,646879 | -0,430938 | 2,099034 | 0,098633 | 0,004536 |
Согласованная составляющая и локальный коэффициент передачи стабильны по четвертям. Средний локальный фазовый размах лежит в пределах 0,098633…0,150020 рад; последовательного роста к концу потока нет. Остаток и SER меняются вместе со всплесками избыточной мощности. Базовое качество всех четвертей хуже Lab056 B.
## Сравнение с Lab056 B
| Метрика | Lab056 B | Lab062, диапазон пакетов | Результат |
|---|---:|---:|---|
| SER | 3,495896 % | 7,580920…16,013629 % | все 16 хуже |
| EVM RMS | 0,845350 | 1,063657…1,663418 | все 16 хуже |
| Matched/residual | +1,464846 дБ | -4,420028…-0,536031 дБ | все 16 хуже |
| Неравномерность полосы | 5,471382 дБ | 6,236828…10,617549 дБ | все 16 хуже |
Ухудшение не ограничено одним пакетом или коротким участком. Локальный TX-согласованный gain не показывает потери длиной около 8 336 отсчётов. Поэтому наблюдавшийся TX underrun остаётся достаточной причиной признать Lab062 невалидной, но не является достаточным объяснением глобально худшего качества.
## Смысл счётчиков `hackrf_transfer`
Сохранены обе строки:
- промежуточная: `1 underruns, longest 16672 bytes`;
- итоговая: `0 underruns, longest 0 bytes`.
В локальной установке исходный файл `hackrf_transfer.c` и документация с описанием сброса этих счётчиков не найдены. В бинарном файле обнаружены только строки формата статистики. Поэтому:
`COUNTER SEMANTICS = NOT_ESTABLISHED`.
Нулевая итоговая строка не отменяет ненулевое промежуточное наблюдение. Причину расхождения без исходного кода используемой версии придумывать нельзя.
## Графики и машинные результаты
- [Локальная задержка](../data/processed/lab063/local_delay_vs_time.png)
- [Нормированная корреляция](../data/processed/lab063/normalized_correlation_vs_time.png)
- [Амплитуда коэффициента передачи](../data/processed/lab063/gain_vs_time.png)
- [Фаза коэффициента передачи](../data/processed/lab063/phase_vs_time.png)
- [Принятая мощность по пакетам](../data/processed/lab063/received_power_by_packet.png)
- [SER по пакетам](../data/processed/lab063/symbol_error_rate_by_packet.png)
- [Matched/residual по пакетам](../data/processed/lab063/matched_residual_by_packet.png)
- [Сравнение Lab056 B и Lab062](../data/processed/lab063/lab056_b_vs_lab062_packets.png)
- [Сводка JSON](../data/processed/lab063/summary.json)
- [Качество пакетов CSV](../data/processed/lab063/packet_quality.csv)
- [Локальное сопоставление CSV](../data/processed/lab063/local_alignment.csv)
## Инженерный вывод
`LAB062 QUALITY DISTRIBUTION = GLOBAL`.
`PRIMARY CAUSE STATUS = PARTIALLY_LOCALIZED`.
Найдена ошибка подготовки TX: обещанные межпакетные паузы не были записаны. Подтверждено глобальное ухудшение относительно Lab056 B и отдельные всплески помехи или искажения. Положение underrun и точная физическая причина общего ухудшения не установлены.
`NEXT SINGLE STEP = до нового TX отдельно исследовать уровень RX, усиления, геометрию и возможную аналоговую компрессию либо слишком слабый полезный сигнал; будущий TX-процесс должен иметь явные паузы и однозначное журналирование underrun`.
Новый RF-сеанс требует отдельного разрешения. В рамках Lab063 параметры PHY, приёмник, усиления и частота не менялись.
- `RF TX = 0`
- `LAB063 COMMIT = NOT PERFORMED`
- `PUSH = NOT PERFORMED`
- `LAB064 = NOT CREATED`