Lab051: accelerate 500 ksymbol/s streaming receiver

This commit is contained in:
LittleSam129
2026-09-08 16:04:09 +03:00
parent 60691a09f1
commit 9f33607d3a
13 changed files with 9695 additions and 0 deletions

View File

@@ -1754,3 +1754,108 @@ Lab050 git add/commit и push/pull/fetch не выполнялись.
и ускорение строгой проверки ложных кандидатов на C/500k с сохранением
независимости RX и FEC/CRC. До доказанной скорости и свежести не выполнять
RF, QPSK, новый видеокодек или перенос SDR на 180 МГц.
# Запись 040
## Дата
8 сентября 2026 года
## Тема
Lab051 — алгоритмическое ускорение потокового BPSK-приёмника на 500 ксимв/с
и проверка свежести JPEG при измеренной стоимости обработки
## Выполнено
Перед новой разработкой проверены HEAD, status, diff stat и diff check.
По прямому разрешению текущего задания Lab050 закреплена коммитом
60691a09f193f36983c7174c5252ed0897c559e9:
Lab050: model fresh-frame SDR video stream.
В показанный staged scope вошли девять файлов: код и тесты Lab050, необходимые
изменения прежних модулей, отчёт, журнал, индекс и небольшой receiver_benchmarks.json.
Большой result.json, JPEG-профили и посторонние файлы не добавлялись. Push не выполнялся.
Lab051 начата от нового HEAD. Аудит прочитал Lab046B/C, Lab047/048/050,
связанные функции Lab043/044/045 и convolutional_fec. Рабочая точка строго
500000 символов/с, Fs=8000000, 16 отсчётов/символ; профиль C 128×96 RGB q25,
1740–1893 байта. Управление ELRS/CRSF и локальная защита остаются отдельно.
Ни один файл protocol в Lab051 не менялся.
Воспроизведён прежний короткий шумный опыт Lab050: три JPEG, 24 пакета,
seed50050, coded-bit Eb/N0=7 дБ, CFO+10 Гц, фаза0,73 и чередование полярности.
Историческая стоимость 55,157553 с / 0,323745 с IQ =170,373647.
Свежий инструментированный baseline занял49,614327 с, отношение153,251430;
это отдельный замер, с влиянием настольной нагрузки/инструментации.
Обнаружены2374 кандидата:24 valid и2350 false; средние72,967/20,099 мс.
Главная стоимость ложных кандидатов — timing:41,833 с из47,232 с.
При nominal416 и диапазоне±800 прежняя функция возвращалась к Python-перебору
1601 смещения. Matched filter на ложных кандидатах занимал0,934 с, уточнение2,797 с.
Ранний отказ PHY header уже существовал и не запускал тело/Viterbi/CRC.
Добавлен отдельный вычислительный адаптер Lab051. Повторно используется внутренняя
часть децимации с точным совпадением отсчётов; пересчитываются новые края.
Общая корреляция уточнения и общий перенос/RRC обслуживают срезы кандидатов.
Сохранены локальный DC и нулевые края. Результат извлечения кэшируется по
уточнённому положению/длине в пределах блока. Timing вычисляет все прежние1601
смещения через корреляцию и накопленные энергии, без сужения диапазона.
Для неразделимых FFT-пиков и постоянного IQ сохранён исходный выбор первого максимума.
Viterbi использует предвычисленные четыре пары евклидовых метрик и сравнение
двух ветвей с прежним tie→branch0. K7,R1/2,171/133,tail6,интерливер,CRC и
результаты декодирования сохранены. CFO-оценка прежняя; кэшируются векторы переноса.
Новый порог отсева, GPU, multiprocessing и зависимости не добавлены.
Фиксированный порог кандидатов0.030964473262429237 не изменялся.
Финальный короткий контроль:24/24 пакета,3/3 JPEG, SHA MATCH; совпали число
кандидатов и все причины отказов. Медиана трёх проходов1,144176 с,
processing/RF3,534193 — ускорение48,21 раза относительно исторической базы.
Средний valid candidate17,7675 мс, false0,187317 мс; false-медиана0,0605 мс.
Полная стоимость с ложными кандидатами/фоном47,674 мс на физический пакет.
Основной опыт:30 изображений, вход5/с, окно6 с, LATEST_ONLY, MAX_VIDEO_AGE200 мс.
Реально поданы6,044416 с синтетического IQ блоками; receiver не получал TX-границы,
payload или ожидаемый счётчик. Все240/240 пакетов и30/30 JPEG восстановлены точно.
Фактическая стоимость каждого push, сборки и JPEG decode использована в событийной
шкале CPU. Суммарно38,630132 с, processing/RF6,391045,160,959 мс/пакет.
Получены147082 кандидата,12239 новых окон синхронизации и135057 cache hits.
Ни один JPEG не уложился в200 мс: DISPLAYED=FRESH DISPLAYED=0,FRESH DISPLAY FPS=0.
Цель5 свежих/с и минимальная цель>0 НЕ достигнуты.
Переданы30 изображений, до TX удалено0, после decode по возрасту удалено30.
Возраст декодированных/отброшенных JPEG min/median/max:
276,515/15691,203/31150,009 мс. Это не измерение камеры/экрана: их задержки UNKNOWN.
Capture lookup используется только после независимого JPEG для отчётной метрики;
в прежнем fragment format нет capture timestamp. Live-контроль возраста не доказан.
Видеочередь≤1, однако непрерывный IQ-источник потребовал бы внешнего backlog
2088473848 байт при отставании32,632404 с. Такой буфер не реализован и не скрыт.
REAL-TIME CAPABLE=NO. Поток воспроизводится офлайн с обратным давлением источнику.
Пик удерживаемого IQ3177728 байт(3,031 МиБ), проверяемый предел3398912 байт.
Инженерная оценка рабочих массивов136,161 МиБ; это не универсальный предел и не RSS.
RSS процесса после потока154,105 МиБ, peak178,004 МиБ, включая Python/генератор/кэши.
Длинный тест4096 блоков(33,554432 с,нулевой фон) не показал роста IQ и децимации:
2653440 и397216 байт после прогрева. RSS156,199–156,250 МиБ. Finish освобождает буферы.
В отдельном replay посчитана нижняя граница наблюдаемых ndarray/владельцев и
tracemalloc peak. Внутренние C-аллокации не объявляются полностью измеренными;
холодные общие массивы могут занимать больше памяти, чем отдельное старое окно.
Сохранённая Lab047-запись20 ксимв/с повторно разобрана штатным Lab048:
36/36,FEC/CRC PASS,JPEG SHA MATCH,19 ошибок до FEC и0 после. Исходные IQ/JPEG сохранены.
Новый адаптер рассчитан только на500 ксимв/с; аппаратных запусков не было.
38 целевых тестов PASS. Verifier независимо нашёл два FFT tie-расхождения;
оба исправлены и повторно воспроизведены с совпадением старого результата.
Adversary проверил malformed PHY без body/Viterbi, дубликаты/старые ID,
лимиты объекта, усечение, восстановление подмен и арифметику возраста/backlog.
Таблицы отчёта сверены с JSON. Документ проверен в UTF-8, ссылки существуют.
quick_gate PASS:688 тестов,17 функциональных проверок,13 штатных пропусков.
Полный pytest:688 passed за72,92 с,0 failed; одно предупреждение доступа к .pytest_cache.
git diff --check PASS. Lab051 git add/commit и push не выполнялись; индекс пуст.
RF TX=0; HackRF,180 МГц,QPSK,новый FEC/кодек и аппаратные500 ксимв/с не запускались.
Следующий этап: STOP. Рекомендуемый Lab052 — отдельное программное исследование
стоимости уникальных фоновых кандидатов в полном режиме5 изображений/с,
с неизменными PHY/FEC/CRC и независимыми положительными/отрицательными регрессиями.
До отдельного разрешения не выполнять RF или аппаратные500 ксимв/с.