Lab032: evaluate FEC block parameters

This commit is contained in:
LittleSam129
2026-07-29 12:47:10 +03:00
parent 2ac1571c40
commit 3dbb7afa83
11 changed files with 1953 additions and 0 deletions

View File

@@ -0,0 +1,101 @@
Lab032. Подбор параметров блочного исправления потерь
Исходный профиль и неизменные слои
- Видео: data\raw\lab026_rover_source.mp4
- 63 реальных пар BASE/ROI, 3 fps; длительность 20.766667 с.
- BASE 240x135 grayscale JPEG Q23; ROI 320x180 grayscale JPEG Q33.
- Внутренний Lab028 packet: payload 512 байт; внешний формат и GF(256) Lab030 не изменены.
- Глубина D=1: systematic symbols блока передаются первыми, затем parity; перемежение отсутствует.
- Блоки формируются из непрерывного потока внутренних пакетов и могут пересекать composite_frame_id.
Последний неполный блок
- Используется единое правило:
r_last = max(1, ceil(k_last × r / k)).
- Нулевое дополнение существует только внутри математики GF(256); внешние пакеты синтетически не добавляются.
Сравнительная таблица восьми режимов
mode | rate | outer/margin kbit/s | composite 10/50/200/1000 ms | pub p95 200 ms s | no-image p95 200 ms s | block mean/max ms | decode mean ms | queue mean/max
----:|-----:|----------------------:|----------------------------:|-------------------:|------------------------:|------------------:|---------------:|---------------:
Без FEC | 1.000000 | 168.396/131.604 | 0.669603/0.914524/0.960714/0.979762 | 0.203013 | 1.325184 | 0.000/0.000 | 0.000 | 13.717/15
4+1 | 0.800000 | 226.951/73.049 | 0.791429/0.909048/0.959683/0.978175 | 0.274880 | 1.337167 | 92.966/189.840 | 77.606 | 17.171/20
8+2 | 0.800000 | 226.951/73.049 | 0.912857/0.933333/0.963016/0.978333 | 0.275067 | 1.338747 | 189.723/266.720 | 159.003 | 17.210/21
12+3 | 0.800000 | 226.951/73.049 | 0.951984/0.951190/0.965714/0.978492 | 0.288773 | 1.339135 | 288.795/337.173 | 242.715 | 17.219/21
6+2 | 0.750000 | 242.928/57.072 | 0.920873/0.930317/0.961270/0.978254 | 0.294080 | 1.333927 | 142.659/214.293 | 111.939 | 18.337/21
8+3 | 0.727273 | 250.916/49.084 | 0.963413/0.948810/0.962540/0.978175 | 0.305947 | 1.339067 | 191.857/266.720 | 145.777 | 18.985/24
4+2 | 0.666667 | 274.659/25.341 | 0.924762/0.924127/0.959048/0.977143 | 0.336320 | 1.349667 | 96.393/159.120 | 65.744 | 20.698/24
8+4 | 0.666667 | 274.659/25.341 | 0.986984/0.955317/0.963095/0.978175 | 0.336667 | 1.347973 | 193.876/266.720 | 132.578 | 20.859/26
Подробные результаты при средней Bad 200 мс
mode | BASE/ROI/composite | blocks ok/fail | restored packets | delivered kbit/s | publication mean/p95/max s | no-image mean/p95/max s | incomplete mean/p95/max
----:|-------------------:|---------------:|-----------------:|-----------------:|--------------------------:|-----------------------:|------------------------:
Без FEC | 0.972302/0.967302/0.960714 | 0.000000/0.000000 | 0 | 150.881 | 0.185098/0.203013/0.209680 | 0.786259/1.325184/2.333307 | 1.387/3.000/6
4+1 | 0.973175/0.966905/0.959683 | 0.975972/0.024028 | 92 | 150.067 | 0.246589/0.274880/0.394773 | 0.823033/1.337167/2.349520 | 1.494/3.000/6
8+2 | 0.974841/0.969365/0.963016 | 0.972130/0.027870 | 144 | 150.483 | 0.246330/0.275067/0.466747 | 0.837464/1.338747/2.334160 | 1.528/3.000/6
12+3 | 0.975794/0.971270/0.965714 | 0.968403/0.031597 | 260 | 150.899 | 0.246565/0.288773/0.522907 | 0.841596/1.339135/2.380240 | 1.543/3.000/6
6+2 | 0.973651/0.968571/0.961270 | 0.975243/0.024757 | 188 | 150.202 | 0.262330/0.294080/0.425493 | 0.839718/1.333927/2.364880 | 1.544/3.000/6
8+3 | 0.974603/0.969524/0.962540 | 0.973981/0.026019 | 249 | 150.081 | 0.271028/0.305947/0.466747 | 0.861515/1.339067/2.334160 | 1.589/3.000/6
4+2 | 0.973095/0.966429/0.959048 | 0.978287/0.021713 | 236 | 149.535 | 0.296583/0.336320/0.394773 | 0.865525/1.349667/2.364880 | 1.613/3.000/6
8+4 | 0.975238/0.970238/0.963095 | 0.975833/0.024167 | 375 | 149.944 | 0.295920/0.336667/0.465947 | 0.899563/1.347973/2.334160 | 1.703/3.000/6
Временная модель и очередь
- Непрерывные чередующиеся экспоненциальные Good/Bad интервалы Lab029B, средняя доля Bad около 2%.
- Средние Bad 10, 50, 200 и 1000 мс; 200 повторов; fixed seeds 300300...300303.
- Пакет теряется при любом пересечении передачи с Bad. FIFO учитывает фактическую длину каждого внешнего пакета и скорость 300 кбит/с.
- Все исследованные режимы остаются ниже 300 кбит/с; положительный запас показан в таблице. Отдельная функциональная проверка ускоряет поток 8+4 вдвое и подтверждает реальное накопление очереди при перегрузке.
- Block duration измеряется от начала первого до конца последнего символа. Decode-ready без потерь — от начала первого до конца k-го systematic symbol.
1. Одинаковая кодовая скорость 0.8: 4+1, 8+2 и 12+3
- 4+1: outer 226.951 кбит/с, block mean 92.966 мс, decode-ready 77.606 мс, composite@200 0.959683.
- 8+2: outer 226.951 кбит/с, block mean 189.723 мс, decode-ready 159.003 мс, composite@200 0.963016.
- 12+3: outer 226.951 кбит/с, block mean 288.795 мс, decode-ready 242.715 мс, composite@200 0.965714.
- При одинаковой номинальной code rate длина блока меняет временное окно, в котором одна помеха может собрать несколько стираний. Короткий блок раньше получает k systematic symbols и быстрее допускает декодирование.
- Длинный блок дольше остаётся открытым и может включить больше потерянных пакетов одной длительной помехи; при этом его больший абсолютный r иногда полезен для рассеянных стираний.
2. Одинаковая code rate 2/3: 4+2 и 8+4
- 4+2: outer 274.659 кбит/с, composite@200 0.959048, publication P95 0.336320 с, no-image P95 1.349667 с.
- 8+4: outer 274.659 кбит/с, composite@200 0.963095, publication P95 0.336667 с, no-image P95 1.347973 с.
- Сравнение изолирует влияние длины блока при одинаковой сильной избыточности: короткий 4+2 быстрее закрывается, длинный 8+4 имеет больше абсолютных parity symbols, но дольше накапливает стирания.
3. Влияние увеличения r
- Большее r позволяет исправить больше стираний, но увеличивает внешний поток, служебную долю, время передачи блока и публикационную задержку.
- 8+3: outer 250.916 кбит/с (8+2 226.951, 8+4 274.659); composite@200 0.962540 (8+2 0.963016, 8+4 0.963095); P95 delay 0.305947 с (8+2 0.275067, 8+4 0.336667).
- Поэтому 8+3 оценивается по фактическому положению между 8+2 и 8+4 сразу по скорости, устойчивости и задержке, без автоматического назначения рабочим режимом.
4. Практическая граница без автоматического выбора
- Минимальный поток: Без FEC, 168.396 кбит/с.
- Максимальная composite-устойчивость при Bad 200 мс: 12+3, 0.965714.
- Минимальная P95-задержка среди защищённых режимов: 4+1, 0.274880 с.
- Недоминируемые по outer bitrate↓, publication P95↓ и composite success↑ режимы при Bad 200 мс: Без FEC, 8+2, 12+3.
- Это набор компромиссов, а не автоматический выбор единственного режима.
Функциональные проверки
- PASS all_k_r_supported: GF(256) generated every requested k+r matrix
- PASS recover_any_r_erasures: recovered all 1208 exact-r erasure patterns
- PASS restored_inner_byte_exact: restored Lab028 packets are byte-exact
- PASS inner_outer_crc: outer and recovered Lab028 CRC32 checks passed
- PASS final_partial_block_scaling: final blocks: 4+1:2+1, 8+2:6+2, 12+3:10+3, 6+2:4+2, 8+3:6+3, 4+2:2+1, 8+4:6+3
- PASS zero_bad_100_percent: all eight modes restored 100% of frames without Bad
- PASS fixed_seed_reproducibility: identical seed produced identical result fields
- PASS queue_counts_parity: every parity packet is included in FIFO timing
- PASS overload_grows_queue: 549.317 kbit/s produced queue mean/max 301.733/589
- PASS atomic_incomplete_composite: missing final ROI fragment prevented publication
- PASS lab030_8_2_reproduction: 8+2 exactly reproduced Lab030 order and four rows
Допущения модели
- JPEG кодируются один раз в памяти; вычислительная задержка GF(256) считается нулевой.
- Стирается весь внешний пакет; отдельные битовые ошибки не моделируются, но оба уровня CRC проверяются.
- Publication delay считается от frame_id/3 до конца пакета, завершившего атомарную сборку BASE+ROI.
- No-image заканчивается публикацией следующего полного кадра или концом расписания; неполный кадр не публикуется.
- ARQ, повторы, глубокое перемежение, команды, телеметрия, модуляция и реальный SDR отсутствуют.
Артефакты
- Полный CSV: data\processed\lab032\lab032_results.csv
- Сводный CSV: data\processed\lab032\lab032_summary.csv
- Отчёт: data\processed\lab032\lab032_report.txt
- Доля восстановленных кадров: data\processed\lab032\lab032_composite_success.png
- Скорость и избыточность: data\processed\lab032\lab032_stream_overhead.png
- Задержка публикации: data\processed\lab032\lab032_publication_delay.png
- Отсутствие изображения: data\processed\lab032\lab032_no_image_duration.png
- Влияние размера блока: data\processed\lab032\lab032_block_size_effect.png
- Практическая граница: data\processed\lab032\lab032_practical_frontier.png
- JPEG, пакеты и бинарные дампы не сохранялись.