Lab052: suppress false preamble candidates
This commit is contained in:
144
PROJECT_LOG.md
144
PROJECT_LOG.md
@@ -1859,3 +1859,147 @@ RF TX=0; HackRF,180 МГц,QPSK,новый FEC/кодек и аппаратны
|
||||
стоимости уникальных фоновых кандидатов в полном режиме5 изображений/с,
|
||||
с неизменными PHY/FEC/CRC и независимыми положительными/отрицательными регрессиями.
|
||||
До отдельного разрешения не выполнять RF или аппаратные500 ксимв/с.
|
||||
|
||||
# Запись 041
|
||||
|
||||
## Дата
|
||||
|
||||
8 сентября 2026 года
|
||||
|
||||
## Тема
|
||||
|
||||
Lab052 — уменьшение числа ложных кандидатов преамбулы при 500 ксимв/с,
|
||||
сохранение слабых пакетов и повторная проверка свежести JPEG
|
||||
|
||||
## Выполнено
|
||||
|
||||
Перед новой разработкой проверены root/main/HEAD/status, diff stat/check,
|
||||
фактический код Lab051, отчёт, индекс и запись 040. Повторные шлюзы Lab051:
|
||||
quick_gate PASS, pytest 688 passed, 0 failed. Verifier подтвердил scope.
|
||||
По прямому разрешению нового задания показан staged scope из 13 файлов,
|
||||
создан коммит 9f33607d3ae82992c595de37dd64e99d7e4dea73:
|
||||
Lab051: accelerate 500 ksymbol/s streaming receiver.
|
||||
9695 добавлений; код, тесты, документация и шесть итоговых JSON Lab051.
|
||||
IQ-окна, промежуточные результаты и посторонние файлы не добавлены; push не было.
|
||||
Lab052 начата от этого фактического HEAD.
|
||||
|
||||
Рабочий режим сохранён: BPSK, 500000 символов/с, Fs=8000000, 16 отсчётов/символ,
|
||||
JPEG C 128×96 RGB q25, 1740–1893 байта. Управление ELRS/CRSF остаётся отдельно.
|
||||
Ни один файл protocol, старые модули PHY/FEC/CRC или формат фрагмента не изменён.
|
||||
|
||||
Уточнена исходная метрика: исторические 147082 Lab051 — все строгие кандидаты,
|
||||
включая 240 valid; ложных было 146842. Новые timing-окна 12239 также включают
|
||||
настоящие. Прежняя длинная сетка зависела от несохранённых encode_seconds.
|
||||
В Lab052 тот же генератор с seed50050/CFO10/фазой0,73/чередованием полярности
|
||||
использует один сохранённый замер готовности JPEG; SHA всех изображений проверяется.
|
||||
Все сравниваемые варианты получают одну и ту же новую воспроизводимую сетку.
|
||||
Точное историческое размещение пакетов не объявляется восстановленным.
|
||||
|
||||
Профиль прежнего Lab051 на 6,044416 с IQ:1675842 локальных пика,
|
||||
392785 выше первого порога,147005 строгих проверок,240true/146765false.
|
||||
24281,089 ложных проверок на секунду IQ. Ложные кандидаты дают11387 уникальных
|
||||
уточнённых позиций и135378 повторных. Низкий нормированный порог пропускает шум
|
||||
независимо от его абсолютной амплитуды; повторная PRBS7 создаёт сильные боковые пики.
|
||||
|
||||
Построены распределения нормированной корреляции, median/MAD и квантили по блокам.
|
||||
Медиана false score0,035464; главный true peak0,841691. В357 блоках чистого фона,
|
||||
выделенных только после независимых решений, медиана блочных медиан0,016353,
|
||||
MAD0,006184; фон не идеально стационарен. Адаптивный median/MAD-порог рассмотрен,
|
||||
но не выбран: он не устраняет структуру повторных пиков, а чувствительность
|
||||
при смене фона требует отдельного доказательства. Нормировка энергией каждой
|
||||
половины использует только наблюдаемый IQ, без TX reference.
|
||||
|
||||
Первый вариант подавлял меньшие пики в радиусе преамбулы и давал0false на основном
|
||||
потоке, но adversary воспроизвёл потерю слабого VALID рядом с сильной ложной
|
||||
преамбулой без правильного заголовка. Этот вариант отвергнут. Исправление:
|
||||
сначала общие дешёвые корреляции всех локальных кандидатов по частям, затем
|
||||
ограниченная полная ширина группы; FAIL представителя сохраняет альтернативы.
|
||||
Прежний контрпример и его перенос через границы блоков больше не теряют пакет.
|
||||
|
||||
Основное правило: обе половины преамбулы проходят нормированную корреляцию
|
||||
не ниже0,08474038063392896. Порог выбран заранее из номинальной модели
|
||||
Beta(1,N−1),N640,alpha0,01; точная вероятность после фильтрации/отбора пиков
|
||||
не утверждается. Две FFT частей общие на блок, per-candidate timing не запускается
|
||||
на отклонённом шуме. Исходный первый порог0.030964473262429237 сохранён.
|
||||
Фаза/полярность неизвестны, используется модуль; новый фазовый CFO-gate не введён.
|
||||
|
||||
Группа имеет полную ширину≤20480 отсчётов от первого пика, без цепочного расширения.
|
||||
Минимальный допустимый кадр26720 отсчётов;20480<26720−2×2008=22704.
|
||||
Это разделяет центральные кандидаты двух последовательных неперекрывающихся
|
||||
кадров в диапазоне прежней точности локализации. Представитель — наибольшая
|
||||
корреляция, tie→правый; при отказе проверяется следующая альтернатива.
|
||||
Только настоящий PHY/FEC/CRC PASS разрешает пропуск принятого физического кадра.
|
||||
Граница IQ-блока может добавить проверки, но не скрывает следующий кандидат.
|
||||
|
||||
Сравнены0/1/2/3 части. Ложных строгих проверок145863/332/15/6, во всех вариантах
|
||||
сохранены те же240 уникальных уточнённых стартов и30 JPEG SHA MATCH.
|
||||
Выбраны две части: минимальная проверка распределённой структуры,9784,33×
|
||||
сокращение false. Третья часть уменьшает15до6, но дороже общего этапа.
|
||||
Группировка без дешёвого фильтра и с корректным возвратом альтернатив почти
|
||||
не снижает нагрузку распределённого шума. Глобальный peak/second не используется.
|
||||
|
||||
Обнаружены734 лишних построения неизменной опорной формы на каждый проход.
|
||||
Введены локальные постоянные кэши опоры,RRC taps,PRBS bits,171140 байт.
|
||||
Массивы побитно сравнены с прежними, глобальные функции возвращаются в finally.
|
||||
Сами PHY,16 samples/symbol,все1601 timing-offset,soft Viterbi и CRC не менялись.
|
||||
|
||||
Три чистых полных прохода:processing/RF1,257688/1,219199/1,219273,
|
||||
в каждом240/240 пакетов,30/30 точных JPEG,15false,0 потерь. Итог — целиком
|
||||
медианный третий проход:7,369795 с обработки /6,044416 с IQ=1,219273.
|
||||
Свежий прежний Lab051 без наблюдателя на той же сетке41,633312 с,ratio6,887897;
|
||||
полное ускорение5,649×, относительно исторической Lab051 —5,242×.
|
||||
|
||||
Итоговые счётчики:392785 первого этапа,388407 отклонены дешёво,4378 сохранены,
|
||||
384 группы,243 строгих представителя+12 альтернатив,15false/240true.
|
||||
4123 кандидата пропущены внутри уже принятого физического кадра.
|
||||
Строгих проверок42,187699/с IQ,ложных2,481629/с; новых soft-окон488.
|
||||
Настоящие строгие проверки3,996005 с,среднее16,650 мс; ложные всего28,884 мс.
|
||||
Общая децимация/корреляция1,790240 с,проверка частей0,446616 с.
|
||||
|
||||
INPUT5fps/30images;RECEIVED30;STALE30;DISPLAYED=FRESH DISPLAYED=0;FRESH FPS=0.
|
||||
Возраст декодированных, затем отброшенных JPEG234,520/834,077/1549,595 мс.
|
||||
MAX_VIDEO_AGE200 мс. Реальная измеренная стоимость каждого push и сборки/decode
|
||||
использована в прежней событийной шкале. Нулевая стоимость RX не подставлялась.
|
||||
Цель реального времени и5 свежих кадров/с НЕ достигнута. Теперь ограничение —
|
||||
настоящие пакеты вместе с децимацией,FFT и копированием IQ,а не ложные кандидаты.
|
||||
Финальный отдельный cProfile:FFT1,650 с,FIR1,295 с,Viterbi1,397 с собственного
|
||||
времени. Вложенные matched/refine не суммируются повторно.
|
||||
|
||||
Камера/экран UNKNOWN;capture lookup применяется после JPEG только для отчётной
|
||||
модели вывода. В неизменном fragment format нет capture timestamp, независимая
|
||||
live-проверка возраста не реализована. Отставание1,426779 с соответствовало бы
|
||||
91313848 байтам внешнего IQ backlog. Такой буфер не хранится офлайн-источником;
|
||||
bounded state не объявляется готовой live-очередью без overflow/gap policy.
|
||||
|
||||
Пик удерживаемого IQ3177728 байт(3,031 МиБ),проверяемый предел3398912 байт.
|
||||
Инженерная оценка рабочих массивов136,161 МиБ,не универсальный предел C-аллокаций.
|
||||
RSS выбранного процесса после потока149393408 байт,peak168804352(160,984 МиБ).
|
||||
Короткий отдельный replay измерил6754 наблюдаемых ndarray(6681 владельцев),
|
||||
37378942 суммарных байта владельцев иtracemalloc peak11586792 байта.
|
||||
Число массивов — нижняя граница Python-наблюдения; tracing не входит в CPU benchmark.
|
||||
|
||||
Длинный тест2048 блоков,16,777216 с распределённого шума со сменой амплитуды:
|
||||
4783206 пиков,1068038 кандидатов,одна строгая ложная проверка,0 принятых пакетов.
|
||||
Во всех контрольных точках после прогрева IQ2653440 байт,децимация397216,
|
||||
сохранённых кандидатов0. RSS после прогрева кэшей стабилизируется.
|
||||
После finish IQ-буферы освобождены. Основной поток:не более23 eligible пиков
|
||||
и3 групп на блок; история наблюдателя существует только вне рабочего RX.
|
||||
|
||||
45 слабых сценариев Eb/N0=0/1/2/3/7 дБ,CFO−100/+10/+100 Гц,триseed/масштаба:
|
||||
старый и новый правильно приняли37/45,0 дополнительных потерь;8 не приняты обоими.
|
||||
Старая Lab047-запись20 ксимв/с штатным Lab048:36/36,CRC PASS,JPEG SHA MATCH,
|
||||
19 ошибок до FEC,0 после,0 байтовых ошибок. Аппаратных запусков не было.
|
||||
|
||||
30 целевых тестов PASS,verifier иadversary независимо подтвердили исправление
|
||||
ложного подавления,границы блоков,плохую CRC,эквивалентность частей и finally.
|
||||
ФинальныеJSON,выбор медианного прохода,UTF-8,ссылки и график проверены независимо.
|
||||
quick_gate PASS:718 тестов,20 функциональных проверок,13 штатных пропусков.
|
||||
Полный pytest:718 passed за77,15 с,0 failed,одно предупреждение .pytest_cache.
|
||||
Новый helper наблюдения массивов отдельно выполнен;три модуля проверены
|
||||
py_compile и run_functional_tests после его добавления. git diff --check PASS.
|
||||
Обязательные регрессии в acceptance.json PASS;real-time/5-fps target явно FAIL.
|
||||
Lab052 git add/commit иpush не выполнялись;индекс пуст. RF TX=0.
|
||||
|
||||
Следующий этап: STOP. Для отдельно согласованной Lab053 исследовать стоимость
|
||||
настоящих пакетов, общей децимации/FFT/копирования IQ и задержку JPEG-пачки.
|
||||
Не переходить автоматически к10fps,QPSK,180 МГц,аппаратным500 ксимв/с или RF.
|
||||
|
||||
Reference in New Issue
Block a user