Lab050: model fresh-frame SDR video stream
This commit is contained in:
113
PROJECT_LOG.md
113
PROJECT_LOG.md
@@ -1641,3 +1641,116 @@ Git add/commit/push/pull/fetch не выполнялись.
|
||||
и проверкой выполнимости 5 кадров/с. Сопряжение CRSF и его сценарии отказов
|
||||
требуют отдельной постановки и уточнения аппаратуры. Нового RF, QPSK,
|
||||
CRSF/ELRS-протокола, перекодирования JPEG или переноса на 180 МГц здесь нет.
|
||||
|
||||
# Запись 039
|
||||
|
||||
## Дата
|
||||
|
||||
8 сентября 2026 года.
|
||||
|
||||
## Тема
|
||||
|
||||
Lab050: потоковая архитектура JPEG, ограничение возраста и блочный IQ-приём.
|
||||
|
||||
## Выполнено
|
||||
|
||||
По явному заданию проверены HEAD, status, diff/stat/check и staged scope Lab049.
|
||||
Создан коммит cdf5396e807b83f82a264632dc46f71428fcd616 с сообщением
|
||||
Lab049: define ELRS control and SDR video architecture. Вошли 12 файлов:
|
||||
код, тесты, документы, журнал, индекс и указатель README. Сгенерированные данные,
|
||||
настройки окружения и посторонние локальные файлы не добавлялись. Push не выполнялся.
|
||||
Lab050 начата от нового HEAD и оставлена без staging/commit.
|
||||
|
||||
Аудит Lab034–037 подтвердил возможность переиспользовать существующий
|
||||
protocol/video_frame_scheduler.py: активное изображение завершается,
|
||||
ожидающее заменяется самым свежим, перед началом прогнозируется завершение.
|
||||
Добавлены готовность JPEG отдельно от времени съёмки, произвольный MAX_VIDEO_AGE,
|
||||
прогноз задержки после RF и счётчик максимальной ожидающей очереди.
|
||||
Пять прежних политик сохраняют поведение на проверенном сценарии видео+CONTROL.
|
||||
В самой Lab050 SDR-очередь содержит только VIDEO; управление ELRS отдельно.
|
||||
|
||||
Verifier/adversary воспроизвели ошибку первой реализации: позднее завершение
|
||||
кодирования старого снимка вытесняло более свежий, либо возвращало старый снимок
|
||||
после опустошения очереди. Исправлено сравнением времени съёмки и ID с сохранением
|
||||
самого свежего виденного значения. Две регрессии и повторная независимая проверка PASS.
|
||||
|
||||
Из data/raw/lab011_scene.jpg созданы четыре фиксированных профиля:
|
||||
A 320×240 RGB q35 — 8724 байта; B 160×120 RGB q35 — 2771;
|
||||
C 128×96 RGB q25 — 1740; D 160×120 grayscale q30 — 2028.
|
||||
Первый A совпал с SHA Lab047. По 30 детерминированных сдвигов фото, не съёмка камеры;
|
||||
размеры соответственно 8724–9250, 2771–3031, 1740–1893, 2028–2233 байта.
|
||||
PSNR относительно несжатого изображения того же профиля:
|
||||
28,12 / 28,11 / 27,17 / 30,15 dB. Это не оценка пригодности для управления.
|
||||
|
||||
Нынешний пакет несёт 244 байта JPEG и занимает 5766 символьных интервалов.
|
||||
Точный предел Jmax=244*floor(Rs/(5766*fps)) включает фрагментацию, добивку,
|
||||
FEC, PHY header, преамбулу, защитные интервалы и фильтр.
|
||||
На 500/800/1000 ксимв/с для 5 кадров/с предел 4148/6588/8296 байт;
|
||||
для 10 — 1952/3172/4148 байт. BPSK, FEC R=1/2 K=7, CRC и форматы сохранены.
|
||||
QPSK, новый кодек и 12+3 стирающий FEC не вводились.
|
||||
|
||||
Выполнены 240 событийных сценариев: четыре профиля, вход 3/5/10 кадров/с,
|
||||
Rs=200/400/500/800/1000 ксимв/с при Fs=8 Мвыб/с, предел возраста
|
||||
200/333/500/1000 мс. Ожидающая очередь не превышает один снимок.
|
||||
Сохраняются capture/encode/queue/TX/RX/complete/decode/display timestamps;
|
||||
не выполненные стадии имеют null. FPS внутри окна и после опустошения разделены.
|
||||
|
||||
Идеальная модель C/500k/5fps/200ms передаёт и показывает 30/30 за 6 с,
|
||||
без удалений, FRESH DISPLAY FPS=5, возраст min/median/max
|
||||
92,563 / 92,590 / 92,629 мс. Это модель нулевой стоимости RX и экрана.
|
||||
При C/200k, камере 10 кадров/с и возрасте 333 мс передано 14, заменено 16;
|
||||
внутри 3 с показано 13, FRESH DISPLAY FPS=4,333, ещё один после окна.
|
||||
При возрасте 200 мс все 30 отклонены: радио само требует 230,64 мс.
|
||||
|
||||
Добавлен StreamingReceiver.push_iq_block с выдачей пакетов до finish.
|
||||
Корреляция и строгий PHY/FEC/CRC взяты из Lab048; в старый декодер добавлен
|
||||
необязательный IQ-reader без изменения поведения по умолчанию.
|
||||
Буфер удерживает блоки, левый запас и максимальный допустимый PHY-кадр;
|
||||
TX-границы, payload, ожидаемые ID и число кадров RX не получает.
|
||||
Децимация поиска 20/10/8/5/4 сохраняет две выборки/символ, порог Lab047
|
||||
0.030964473262429237 не меняется. Адаптер последовательный, live-драйвер не подключён.
|
||||
|
||||
На каждой скорости выполнен шумный опыт трёх JPEG C, 24 RF-пакета:
|
||||
единый coded-bit Eb/N0=7 dB, seed=50050, CFO +10 Гц, фаза 0,73 рад, смена полярности.
|
||||
Все пять опытов дали 24/24 пакета и 3/3 точных JPEG до finish.
|
||||
Большой IQ-файл не создавался; SHA проверялся после независимого CRC/сборки.
|
||||
Обработка заняла 35,12417 / 59,47086 / 55,15755 / 60,95497 / 55,92195 с
|
||||
при IQ 0,792483 / 0,401868 / 0,323745 / 0,206561 / 0,167499 с.
|
||||
Отношения 44,32166 / 147,98602 / 170,37365 / 295,09484 / 333,86514:
|
||||
приёмник не успевает в реальном времени. На 500k строгая обработка 54,586 с
|
||||
против 0,492 с грубого поиска, 2374 кандидата и 24 принятых пакета.
|
||||
После исправления вызовов API packet в модели итоговая матрица пересчитана
|
||||
через --reuse-benchmarks; пять тяжёлых замеров сохранены без повторения.
|
||||
|
||||
Пик удерживаемых IQ 2,13–6,51 МиБ; расчёт массивов с запасом 47,5–143,4 МиБ,
|
||||
не RSS процесса. Предел IQ-буфера не зависит от длительности сессии.
|
||||
История событий симулятора хранится для отчёта и не выдаётся за постоянную
|
||||
память бесконечной камеры. Потери блоков/переполнение live-драйвера не реализованы.
|
||||
|
||||
При подстановке измеренной стоимости RX все 30 кадров C/5fps отклоняются до TX,
|
||||
FRESH DISPLAY FPS=0 для всех проверенных пределов возраста.
|
||||
Условный вариант: JPEG ≤1952 байт, 500 ксимв/с, MAX_VIDEO_AGE=200 мс.
|
||||
При стоимости RX-пакета ≤16 мс модель даёт 5 кадров/с и возраст около 192,5 мс;
|
||||
это требует примерно 144-кратного ускорения данного замера.
|
||||
Для 10 кадров/с нужны ≤12 мс и примерно 192-кратное ускорение; возраст около 160,5 мс,
|
||||
29 показов в первые 3 с (9,667 кадра/с), ещё один после окна, интервалы около 10 кадров/с.
|
||||
Ускорения не достигнуты и не обещаются. Обе цели без QPSK — CONDITIONAL;
|
||||
нынешний RX — NO по реальному времени. Камера, экран, jitter и запас ещё не измерены.
|
||||
|
||||
Добавлены experiments/lab050_video_stream.py, lab050_streaming_receiver.py,
|
||||
tests/test_lab050_video_stream.py, docs/lab050_current_state.md и локальные
|
||||
результаты data/processed/lab050. Обновлён LABS_INDEX. Модули аварии,
|
||||
управления и сеансов не менялись; при потере ELRS видео не продлевает движение.
|
||||
|
||||
44 целевых теста PASS. Verifier независимо проверил границы JPEG, 60 сценариев
|
||||
очереди, 32 прогноза RX, исходные IQ-числа и все итоговые временные отметки JSON.
|
||||
Adversary подтвердил устранение найденной регрессии свежести.
|
||||
quick_gate PASS: 650 тестов и 14 функциональных проверок.
|
||||
pytest: 650 passed за 78,73 с, одно предупреждение о доступе к .pytest_cache.
|
||||
git diff --check PASS. RF TX=0, оборудование не запускалось.
|
||||
Lab050 git add/commit и push/pull/fetch не выполнялись.
|
||||
|
||||
Следующий этап: STOP. Рекомендуемый Lab051 — программное профилирование
|
||||
и ускорение строгой проверки ложных кандидатов на C/500k с сохранением
|
||||
независимости RX и FEC/CRC. До доказанной скорости и свежести не выполнять
|
||||
RF, QPSK, новый видеокодек или перенос SDR на 180 МГц.
|
||||
|
||||
Reference in New Issue
Block a user