Lab060: validate decision-directed carrier tracking

This commit is contained in:
LittleSam129
2026-09-11 14:13:51 +03:00
parent e16ec23fdb
commit 92b0e0f8dd
22 changed files with 2707 additions and 2 deletions

View File

@@ -516,5 +516,37 @@
- [Постановка](lab059_current_state.md), [отчёт](lab059_offline_result.md),
[JSON](../data/processed/lab059/summary.json),
[real CSV](../data/processed/lab059/real_results.csv),
[synthetic CSV](../data/processed/lab059/synthetic_results.csv). STOP;
Lab059 не коммитировалась, push не выполнялся, Lab060 не создана.
[synthetic CSV](../data/processed/lab059/synthetic_results.csv). Lab059
зафиксирована коммитом `e16ec23fdb57e95ade46e9b6abc215502fca0686`;
push не выполнялся.
## Lab060 — решение-направленное сопровождение несущей
- **Запись 054; только сохранённые IQ и синтетика, RF TX=0.** P3 задаёт
начальные частоту и фазу. T0 не сопровождает payload, T1 поправляет фазу по
собственным BPSK-решениям, T2 поправляет фазу и частоту. Payload truth,
header, magic, JPEG, CRC и будущие символы петля не получает.
- **Параметры до реальных IQ:** из пяти нормированных полос только на synthetic
500K/EVM0,845350 выбрана 0,0005 для T1 и T2. После выбора параметры
заморожены. Отдельный контроль замены диагностического truth сохранил точно
те же траектории и решения; утечки payload truth нет.
- **Устойчивость 500K:** на независимых 78 испытаниях T0 потерял захват в
55,128205%, T1/T2 — в 0%. Средняя SER T0/T1/T2 равна
26,103132/4,729529/4,725104%; конечная ошибка частоты T2 — 0,677354 Гц.
- **Реальный Lab056:** средняя SER B T0/T1/T2 равна
3,616990/3,509691/3,501780%, потерь захвата 0. T2 приблизился к
диагностическому ориентиру 3,495896%; физические EVM0,845350,
matched/residual1,464846дБ и ripple5,471382дБ остаются.
- **Строгие контроли:** Lab047 у всех 36/36. Lab054 у всех 0/16 HEADER,
FEC/CRC не достигнуты, packets0/16; исторический `NOT_A, 0/16` сохранён.
Фон: 0 ложных заголовков, 0 ложных пакетов, устойчивого lock нет.
- **Вердикт `SUCCESS`, лучший T2:** сопровождение устраняет проверенный предел
preamble-only экстраполяции, но не восстанавливает Lab054 и пока не встроено
в штатный receiver. [Постановка](lab060_current_state.md),
[отчёт](lab060_offline_result.md),
[JSON](../data/processed/lab060/summary.json),
[real CSV](../data/processed/lab060/real_results.csv),
[synthetic CSV](../data/processed/lab060/synthetic_results.csv).
- **STOP:** исходные IQ не изменились, Lab060 не коммитировалась, push не
выполнялся, Lab061 не создана. Следующий этап — отдельно согласовать решение
о внедрении T2 в штатный receiver.

View File

@@ -0,0 +1,85 @@
# Lab060 — зафиксированный план сопровождения несущей
## Границы
Lab060 выполняется только по сохранённым файлам Lab056, Lab054 и Lab047 и на
синтетических данных. Оборудование не опрашивается, аппаратные команды не
выполняются, `RF TX = 0`. Исторический результат Lab054 остаётся `NOT_A, 0/16`.
Штатный приёмник, BPSK, RRC, преамбула, заголовок, FEC, CRC, формат пакета,
скорости, timing и packet acquisition не изменяются. Реализация остаётся
диагностической ветвью Lab060.
Исходный HEAD после фиксации Lab059:
`e16ec23fdb57e95ade46e9b6abc215502fca0686`.
## Информационная граница
P3 получает известную 1280-символьную преамбулу и формирует начальные частоту и
фазу. Начиная с первого символа после преамбулы T1 и T2 получают только текущий
комплексный символ, собственное решение `+1/-1` и своё предыдущее состояние.
Правильные header и payload, magic, JPEG, CRC, TX waveform полезной части,
whole-burst CFO/phase и будущие символы в работу петли не поступают. TX truth
подключается после завершения траектории только для диагностических метрик.
## Методы
- **T0 P3_FIXED.** Начальные частота и фаза P3 экстраполируются на весь burst
без сопровождения. До разработки альтернатив этот baseline должен
воспроизвести среднюю SER Lab056 B `3,616990%`.
- **T1 DD_PHASE_ONLY.** Частота остаётся начальной P3. После каждого собственного
решения приёмника фазовое состояние получает поправку первого порядка.
- **T2 DD_PHASE_FREQUENCY.** Петля второго порядка обновляет фазу и частоту.
Нормированный фазовый детектор вычисляет угол между скорректированным символом
и собственным hard decision. Амплитуда в детектор не входит. Одиночная поправка
ограничена `±pi/3`; это заранее заданное ограничение выброса.
Для T1 коэффициент фазы равен
`1-exp(-2*pi*normalized_bandwidth)`. Для T2 используются стандартные
коэффициенты второго порядка:
`theta = Bn / (zeta + 0.25/zeta)`
`alpha = 4*zeta*theta / (1 + 2*zeta*theta + theta^2)`
`beta = 4*theta^2 / (1 + 2*zeta*theta + theta^2)`
где `zeta = 1/sqrt(2)`, `Bn` — нормированная полоса в долях symbol rate,
`alpha` — фазовая поправка в радианах на радиан ошибки, а `beta` — поправка
нормированной угловой частоты в радианах на символ.
## Настройка до реальных данных
Заранее ограниченный набор `Bn`:
`0,0002; 0,0005; 0,001; 0,002; 0,004`.
T1 и T2 выбираются раздельно только на synthetic 500 ксимв/с с EVM `0,845350`.
Сетка начальной ошибки частоты:
`0, ±0,25, ±0,5, ±1, ±2, ±5, ±10 Гц`; ошибки начальной фазы:
`−0,35; 0; +0,35 рад`. Для всех кандидатов используются одинаковые fixed seeds.
Каждая из 39 комбинаций стартовых ошибок имеет один фиксированный шумовой
вариант, одинаковый для всех пяти кандидатов. Критерий выбора по порядку:
минимальная доля катастрофических срывов, затем
минимальная средняя SER, затем более узкая полоса. После выбора параметры
замораживаются и не меняются по результатам Lab056, Lab054 или Lab047.
Независимая validation использует другие seed и две реализации каждой
комбинации, обе скорости, три фиксированных
EVM `0,317390; 0,55; 0,845350` и ту же сетку начальных ошибок. Чистые точки
проходят действующие генератор Lab056, Fs 8 Мвыб/с, квантование и TX/RX RRC;
контролируемый AWGN добавляется после выбора символов.
## Потеря захвата
Полезная часть делится на 16 равных временных блоков. `LOSS_OF_LOCK` фиксируется,
если два соседних блока имеют SER не менее 25%. Восстановление фиксируется, если
после срыва появляются два соседних блока с SER не более 10%. Это диагностический
критерий после факта: он использует truth, но не CRC и не влияет на петлю.
Для background дополнительно применяется оракул-независимый показатель
`mean(cos(2*phase_detector_error))` по каждому блоку. Порог BPSK lock равен
`0,15`; устойчивый lock требует не менее 12 из 16 блоков и не допускает трёх
соседних незахваченных блоков.
Lab060 не коммитируется. Push не выполняется. Lab061 автоматически не создаётся.

View 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 не создана.