Lab060: validate decision-directed carrier tracking
This commit is contained in:
186
docs/lab060_offline_result.md
Normal file
186
docs/lab060_offline_result.md
Normal file
@@ -0,0 +1,186 @@
|
||||
# Lab060 — сопровождение несущей по решениям приёмника
|
||||
|
||||
## Что получилось простыми словами
|
||||
|
||||
Оценка P3 из Lab059 хорошо задаёт начальные частоту и фазу, но после преамбулы
|
||||
перестаёт наблюдать сигнал. T0 поэтому лишь продолжает начальную прямую через
|
||||
весь пакет. T1 после каждого принятого BPSK-символа сам решает, был передан
|
||||
`+1` или `−1`, и по ошибке этого решения слегка поправляет фазу. T2 тем же
|
||||
способом поправляет и фазу, и скорость её изменения, то есть остаточную ошибку
|
||||
частоты.
|
||||
|
||||
На сохранённой записи Lab056 исходный T0 уже был близок к физически достижимому
|
||||
результату: средняя доля ошибочных символов B равнялась 3,616990%. T1 снизил её
|
||||
до 3,509691%, T2 — до 3,501780%. Основная польза сопровождения проявилась в
|
||||
заранее отделённой синтетической проверке устойчивости: при качестве Lab056 B
|
||||
и начальной ошибке частоты от −10 до +10 Гц T0 потерял захват в 55,128205%
|
||||
случаев, а T1 и T2 — в 0% случаев. T2 дополнительно оценивал частотное состояние
|
||||
и оказался лучшим из проверенных методов по заранее заданному правилу.
|
||||
|
||||
Это не восстановило пакеты Lab054. У T0, T1 и T2 осталось 0/16 принятых
|
||||
заголовков, 0/16 запусков FEC и CRC и 0/16 пакетов. Исторический результат
|
||||
Lab054 остаётся `NOT_A, 0/16`. Сопровождение несущей устраняет одну причину
|
||||
неустойчивости, но не убирает физический предел сохранённого OTA-сигнала:
|
||||
диагностическая доля ошибок символов около 3,495896%, EVM 0,845350,
|
||||
отношение согласованной составляющей к остатку 1,464846 дБ и неравномерность
|
||||
усиления в полосе 5,471382 дБ.
|
||||
|
||||
## Границы эксперимента
|
||||
|
||||
Lab060 выполнена только по сохранённым IQ Lab056, Lab054, Lab047 и по
|
||||
синтетическим данным. Исходные пять IQ-файлов хешированы до и после анализа;
|
||||
размеры и SHA-256 совпали. Оборудование не опрашивалось, аппаратные команды не
|
||||
выполнялись, `RF TX = 0`.
|
||||
|
||||
Штатные BPSK, RRC, timing, преамбула, заголовок, FEC, CRC и формат пакета не
|
||||
менялись. T1/T2 реализованы только внутри диагностической ветви Lab060 и пока
|
||||
не встроены в штатный receiver. Параметры выбирались только на синтетической
|
||||
настройке, были заморожены до чтения результатов реальных IQ и затем одинаково
|
||||
применены ко всем наборам.
|
||||
|
||||
После преамбулы петля получает только текущий комплексный символ, собственное
|
||||
жёсткое решение `+1/−1` и своё предыдущее состояние. Правильный payload,
|
||||
заголовок, magic, JPEG, CRC, переданный waveform и будущие символы в петлю не
|
||||
поступают. TX truth применяется только после вычисления всей траектории для
|
||||
диагностических метрик.
|
||||
|
||||
## Проверенные методы
|
||||
|
||||
| Метод | Работа после P3 | Выбранная нормированная полоса | Коэффициент фазы | Коэффициент частоты |
|
||||
|---|---|---:|---:|---:|
|
||||
| T0 `P3_FIXED` | сопровождения нет | 0 | 0 | 0 |
|
||||
| T1 `DD_PHASE_ONLY` | поправляется только фаза | 0,0005 | 0,003136663015 | 0 |
|
||||
| T2 `DD_PHASE_FREQUENCY` | поправляются фаза и частота | 0,0005 | 0,001332444741 | 0,000000888296 |
|
||||
|
||||
Нормированный фазовый детектор вычисляет угол между скорректированным символом
|
||||
и собственным жёстким решением приёмника. Амплитуда не меняет усиление петли.
|
||||
Одна ошибка ограничена диапазоном `±π/3`. Для T2 частотное состояние хранится в
|
||||
радианах на символ и переводится в герцы только при выводе.
|
||||
|
||||
Настройка проверила ровно пять заранее ограниченных полос:
|
||||
`0,0002; 0,0005; 0,001; 0,002; 0,004`. Для каждой применены одни и те же 39
|
||||
сочетаний начальной ошибки частоты и фазы и одинаковый шум. Выбор шёл по доле
|
||||
катастрофических срывов, затем по средней SER, затем в пользу более узкой
|
||||
полосы. У выбранных T1 и T2 срывов на наборе настройки не было; их средние SER
|
||||
равнялись 4,701903% и 4,698099% соответственно.
|
||||
|
||||
## Независимая синтетическая проверка
|
||||
|
||||
Синтетический сигнал проходит генератор Lab056, квантование int8, TX/RX RRC при
|
||||
Fs 8 Мвыб/с, а затем получает AWGN. Для проверки применены другие seed, две
|
||||
реализации каждого сочетания, скорости 20 и 500 ксимв/с, три фиксированных EVM,
|
||||
ошибки частоты `0, ±0,25, ±0,5, ±1, ±2, ±5, ±10 Гц` и ошибки фазы
|
||||
`−0,35; 0; +0,35 рад`.
|
||||
|
||||
Ключевой набор 500 ксимв/с при EVM 0,845350:
|
||||
|
||||
| Метод | Случаи | Катастрофический срыв | Потеря захвата | Средняя SER | P95 SER | Средняя абсолютная конечная ошибка частоты |
|
||||
|---|---:|---:|---:|---:|---:|---:|
|
||||
| T0 | 78 | 55,128205% | 55,128205% | 26,103132% | 50,185077% | 2,884615 Гц |
|
||||
| T1 | 78 | 0% | 0% | 4,729529% | 4,841574% | 2,884615 Гц |
|
||||
| T2 | 78 | 0% | 0% | 4,725104% | 4,832229% | 0,677354 Гц |
|
||||
|
||||
T1 намеренно не меняет частотное состояние, поэтому его конечная ошибка частоты
|
||||
остаётся начальной. T2 одновременно сохранил нулевую долю срывов и снизил
|
||||
частотную ошибку.
|
||||
|
||||
На 20 ксимв/с искусственные начальные ошибки до ±10 Гц намного тяжелее в
|
||||
нормированных единицах. При EVM 0,317390 доля потерь T1/T2 равна 30,769231%.
|
||||
Этот результат не скрывается и не использовался для отдельной перенастройки.
|
||||
Реальный контроль Lab047 начинается с собственной точной P3 и у всех методов
|
||||
остаётся 36/36, поэтому регрессии штатного контрольного файла не обнаружено.
|
||||
|
||||
Потеря захвата определена независимо от CRC: два соседних из 16 временных
|
||||
блоков с SER не менее 25%. Восстановление — два последующих соседних блока с
|
||||
SER не более 10%. TX truth участвует только в этой послесобытийной диагностике,
|
||||
но не в работе петли.
|
||||
|
||||
## Сохранённая OTA-запись Lab056
|
||||
|
||||
| Сегмент | Скорость | T0 SER | T1 SER | T2 SER | Срыв T0/T1/T2 |
|
||||
|---|---:|---:|---:|---:|---:|
|
||||
| A1 | 20 ксимв/с | 0,035511% | 0,035511% | 0,035511% | 0/0/0 |
|
||||
| B1 | 500 ксимв/с | 3,308940% | 3,268394% | 3,253560% | 0/0/0 |
|
||||
| A2 | 20 ксимв/с | 0% | 0% | 0% | 0/0/0 |
|
||||
| B2 | 500 ксимв/с | 3,925040% | 3,750989% | 3,750000% | 0/0/0 |
|
||||
| **Среднее A** | **20 ксимв/с** | **0,017756%** | **0,017756%** | **0,017756%** | **0/0/0** |
|
||||
| **Среднее B** | **500 ксимв/с** | **3,616990%** | **3,509691%** | **3,501780%** | **0/0/0** |
|
||||
|
||||
Во всех B-сегментах 16/16 блоков имеют receiver-side признак захвата. Ни один
|
||||
метод не пересёк критерий потери. T1 и T2 дали небольшое, но согласованное
|
||||
улучшение B1 и B2 относительно фиксированного T0. T2 ближе всего подошёл к
|
||||
диагностическому нижнему ориентиру 3,495896%, поэтому дополнительная ошибка от
|
||||
неподвижной экстраполяции P3 практически устранена. Оставшаяся SER относится к
|
||||
качеству сохранённого общего OTA-тракта TX–канал–RX и не локализует один
|
||||
физический узел.
|
||||
|
||||
## Пакетные контроли
|
||||
|
||||
| Набор | Метод | HEADER | FEC started/pass | CRC started/pass | Пакеты |
|
||||
|---|---|---:|---:|---:|---:|
|
||||
| Lab047 | T0 | 36/36 | 36/36 | 36/36 | 36/36 |
|
||||
| Lab047 | T1 | 36/36 | 36/36 | 36/36 | 36/36 |
|
||||
| Lab047 | T2 | 36/36 | 36/36 | 36/36 | 36/36 |
|
||||
| Lab054 | T0 | 0/16 | 0/0 | 0/0 | 0/16 |
|
||||
| Lab054 | T1 | 0/16 | 0/0 | 0/0 | 0/16 |
|
||||
| Lab054 | T2 | 0/16 | 0/0 | 0/0 | 0/16 |
|
||||
|
||||
Для Lab054 FEC и CRC не достигнуты: заголовок не принят ни в одном из 16 кадров.
|
||||
T1/T2 немного меняют число диагностических ошибок заголовка, но строгий verdict
|
||||
не меняется и новый успешный пакет не объявляется.
|
||||
|
||||
На сохранённом фоне T1 и T2 дали 0 ложных заголовков, 0 ложных пакетов и 0/16
|
||||
блоков с признаком захвата; устойчивый lock не объявлен. Это отделяет
|
||||
решение-направленное движение петли по шуму от доказанного приёма BPSK.
|
||||
|
||||
## Проверка отсутствия утечки payload truth
|
||||
|
||||
Автоматический контроль изменил только правильную диагностическую
|
||||
последовательность payload после преамбулы и повторно вычислил метрики для той
|
||||
же принятой последовательности. У T1 и T2 побитово совпали фазовая траектория,
|
||||
частотная траектория и собственные решения. Диагностическая SER изменилась с
|
||||
примерно 0,7–1,0% до 99%, то есть контроль действительно заменил truth, но не
|
||||
смог повлиять на tracker. Результат: `PASS`.
|
||||
|
||||
## Инженерный вывод
|
||||
|
||||
`DECISION-DIRECTED TRACKING VERDICT = SUCCESS`.
|
||||
|
||||
Лучший кандидат в пределах Lab060 — **T2**. Он выбран потому, что:
|
||||
|
||||
1. на независимом наборе 500 ксимв/с/EVM 0,845350 снизил долю срывов с
|
||||
55,128205% у T0 до 0%;
|
||||
2. дал наименьшую среднюю SER реального Lab056 B — 3,501780%;
|
||||
3. сохранил Lab047 36/36;
|
||||
4. не создал ложных пакетов или ложного устойчивого захвата на фоне;
|
||||
5. прошёл контроль отсутствия payload-truth leakage.
|
||||
|
||||
Этот успех означает, что decision-directed сопровождение пригодно как отдельный
|
||||
кандидат на последующее внедрение в штатный receiver. Он не означает packet
|
||||
PASS для Lab054 и не доказывает, что весь оставшийся предел связан с carrier.
|
||||
Следующий единственный шаг — отдельно рассмотреть и согласовать внедрение T2 в
|
||||
штатный receiver с сохранением строгих PHY/FEC/CRC критериев. В Lab060
|
||||
production-код не менялся.
|
||||
|
||||
Независимый read-only verifier повторил 20 целевых проверок без JIT и записи
|
||||
артефактов, проверил причинность изменением будущих символов, пересчитал
|
||||
уравнение фазового состояния с расхождением менее `1e−12` рад и независимо
|
||||
воспроизвёл метрики из NPZ/CSV. Воспроизводимых несоответствий не обнаружено;
|
||||
граница вывода сохраняется: это проверка петли на готовых символах, а не всего
|
||||
потокового поиска пакетов и RAW-тракта.
|
||||
|
||||
## Артефакты
|
||||
|
||||
- `data/processed/lab060/summary.json` — машинно-читаемый итог;
|
||||
- `tuning_results.csv`, `synthetic_results.csv`,
|
||||
`synthetic_by_initial_cfo.csv` — настройка и независимая синтетика;
|
||||
- `real_results.csv`, `real_blocks.csv`, `real_trajectories.npz` — метрики и
|
||||
траектории A1/B1/A2/B2;
|
||||
- `packet_results.csv`, `background_results.csv` — строгие пакетные и фоновые
|
||||
контроли;
|
||||
- `phase_trajectory_b1.png`, `phase_trajectory_b2.png`,
|
||||
`frequency_state_trajectory.png`, `lab056_b_block_symbol_error_rate.png`,
|
||||
`synthetic_failure_by_initial_cfo.png`, `tracker_comparison.png`,
|
||||
`lab054_result_by_tracker.png` — проверенные графики.
|
||||
|
||||
`RF TX = 0`. Lab060 не коммитировалась. Push не выполнялся. Lab061 не создана.
|
||||
Reference in New Issue
Block a user