Lab051: accelerate 500 ksymbol/s streaming receiver
This commit is contained in:
105
PROJECT_LOG.md
105
PROJECT_LOG.md
@@ -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 ксимв/с.
|
||||
|
||||
Reference in New Issue
Block a user