Lab029B. Временная модель серийных потерь видеопакетов

Исходные данные и транспорт
- Видео: data\raw\lab026_rover_source.mp4
- Источник: 1280x720, 30.000000 fps, 623 кадров, 20.766667 с.
- Использованы все 63 реальные пары: BASE 240x135 grayscale JPEG Q23, ROI 320x180 grayscale JPEG Q33, 3 составных кадра/с.
- Формат Lab028 не изменён: заголовок 32 байта, packet CRC32, object CRC32, отдельные BASE/ROI, атомарный CompositeReassembler.
- Порядок передачи внутри кадра: сначала все BASE-фрагменты, затем все ROI-фрагменты. Поэтому длительная помеха может затрагивать объекты несимметрично.

Временная модель передачи
- Контрольная скорость: 300 кбит/с. Это параметр лабораторной, а не выбранная скорость радиоканала.
- Длительность пакета = фактическая длина (32-byte header + фактический payload) × 8 / 300000.
- Кадр доступен в момент frame_id / 3. Пакеты BASE и ROI передаются подряд; искусственных межпакетных интервалов нет. Остаток периода до следующего кадра является естественным idle.
- Payload 256: packets=1660, timeline=20.881627 с, packet duration min/max=0.986667/7.680000 мс.
- Payload 512: packets=862, timeline=20.869680 с, packet duration min/max=1.093333/14.506667 мс.
- Payload 1024: packets=478, timeline=20.863707 с, packet duration min/max=1.093333/28.160000 мс.

Временная модель канала
- Good пропускает пакеты, Bad теряет пакеты. Длительности состояний независимы и экспоненциально распределены.
- Целевая стационарная доля Bad: 2.0%.
- mean Good = mean Bad × (1-0.02)/0.02 = 49 × mean Bad.
- Консервативное допущение: пакет считается потерянным, если хотя бы часть его передачи пересекается с Bad.
- Monte Carlo: 200 повторов на условие; master seed=290290; seeds 290290...290293.
- Один seed для одинаковой длительности повторно используется для payload 256/512/1024.

Параметры состояний
mean Bad | mean Good | target Bad
--------:|----------:|----------:
10 мс | 490 мс | 2.0%
50 мс | 2450 мс | 2.0%
200 мс | 9800 мс | 2.0%
1000 мс | 49000 мс | 2.0%

Функциональные проверки
- PASS zero_bad_state_100_percent: all 63 composite frames restored for all payloads
- PASS fixed_seed_reproducibility: identical seed produced identical aggregate fields
- PASS adjacent_frame_isolation: two interleaved neighboring frames remained independent
- PASS atomic_incomplete_frame: missing ROI fragment prevented atomic publication
- PASS stationary_bad_fraction: all observed Bad fractions are within 0.323 percentage points of 2%
- PASS longer_bad_longer_outage: mean held-image interval increased from 0.819350 to 1.295846 s
- PASS actual_packet_transmission_time: duration equals actual wire bits / 300000 for full and short final packets

Полная сравнительная таблица
Bad ms | payload | Bad actual | tx/rx/lost packets | packet delivery | BASE | ROI | composite | BASE-only | ROI-only | incomplete | lost burst mean/p95/max | incomplete run mean/p95/max | no image mean/p95/max s | recovery mean/p95/max s | video kbit/s
------:|--------:|-----------:|-------------------:|----------------:|-----:|----:|----------:|----------:|---------:|-----------:|-----------------------:|----------------------------:|-------------------------:|------------------------:|------------:
10 | 256 | 2.016% | 332000/320339/11661 | 96.488% | 84.611% | 75.659% | 65.357% | 2426 | 1298 | 4365 | 2.27/5.0/13 | 1.52/3.0/10 | 0.831/1.350/3.650 | 0.547/1.180/3.364 | 102.487
10 | 512 | 2.008% | 172400/164214/8186 | 95.252% | 85.183% | 77.008% | 66.968% | 2295 | 1265 | 4162 | 1.72/3.0/8 | 1.48/3.0/10 | 0.815/1.343/3.651 | 0.521/1.131/3.353 | 105.043
10 | 1024 | 2.022% | 95600/89121/6479 | 93.223% | 85.595% | 76.984% | 67.397% | 2293 | 1208 | 4108 | 1.43/3.0/6 | 1.47/3.0/10 | 0.812/1.339/3.651 | 0.513/1.115/3.348 | 105.783
50 | 256 | 2.041% | 332000/324191/7809 | 97.648% | 95.333% | 92.960% | 90.405% | 621 | 322 | 1209 | 6.43/17.3/37 | 1.10/2.0/3 | 0.694/1.001/1.348 | 0.441/0.727/1.207 | 141.796
50 | 512 | 2.083% | 172400/167870/4530 | 97.372% | 95.492% | 93.198% | 90.889% | 580 | 291 | 1148 | 3.94/10.0/19 | 1.10/2.0/3 | 0.693/1.000/1.348 | 0.428/0.714/1.196 | 142.643
50 | 1024 | 2.046% | 95600/92757/2843 | 97.026% | 95.619% | 93.421% | 91.095% | 570 | 293 | 1122 | 2.55/6.0/12 | 1.10/2.0/3 | 0.691/1.000/1.348 | 0.422/0.702/1.191 | 143.006
200 | 256 | 1.854% | 332000/325460/6540 | 98.030% | 97.540% | 96.762% | 96.230% | 165 | 67 | 475 | 17.82/49.0/80 | 1.32/3.0/4 | 0.765/1.312/1.657 | 0.547/0.970/1.468 | 150.968
200 | 512 | 1.854% | 172400/168900/3500 | 97.970% | 97.579% | 96.857% | 96.333% | 157 | 66 | 462 | 9.72/26.0/41 | 1.31/3.0/4 | 0.761/1.158/1.657 | 0.536/0.959/1.456 | 151.215
200 | 1024 | 1.854% | 95600/93582/2018 | 97.889% | 97.627% | 96.905% | 96.381% | 157 | 66 | 456 | 5.70/15.0/24 | 1.31/3.0/4 | 0.762/1.228/1.658 | 0.531/0.954/1.451 | 151.334
1000 | 256 | 1.678% | 332000/326429/5571 | 98.322% | 98.143% | 98.008% | 97.802% | 43 | 26 | 277 | 59.27/172.4/403 | 2.98/7.4/16 | 1.302/2.809/5.665 | 1.087/2.487/5.585 | 153.470
1000 | 512 | 1.678% | 172400/169489/2911 | 98.311% | 98.143% | 98.048% | 97.841% | 38 | 26 | 272 | 31.30/91.6/210 | 2.96/7.5/16 | 1.295/2.826/5.665 | 1.077/2.476/5.576 | 153.618
1000 | 1024 | 1.677% | 95600/93965/1635 | 98.290% | 98.143% | 98.079% | 97.873% | 34 | 26 | 268 | 17.77/50.9/116 | 2.95/7.5/16 | 1.291/2.843/5.665 | 1.071/2.471/5.571 | 153.712

Допущения и ограничения
- Не моделируются FEC, интерливинг, ARQ, повторные передачи, искусственные межпакетные интервалы, преамбула физического уровня, управление и телеметрия.
- Bad-интервалы не зависят от границ пакетов; любое частичное пересечение уничтожает пакет целиком.
- no-new-image duration для серии невосстановленных кадров измеряется от публикации предыдущего полного кадра до публикации следующего; при краевых сериях используются начало и конец временной шкалы.
- interference-to-next-frame измеряется от начала каждого Bad-интервала до первого следующего опубликованного составного кадра или до конца шкалы.
- Эффективный видеопоток учитывает JPEG bytes только атомарно восстановленных BASE+ROI и полную длительность расписания.
- Результаты зависят от порядка BASE затем ROI и от контрольной скорости 300 кбит/с.
- Окончательный размер payload автоматически не выбирается.

Артефакты
- CSV: data\processed\lab029b\lab029b_results.csv
- Composite success: data\processed\lab029b\lab029b_composite_success.png
- No-new-image duration: data\processed\lab029b\lab029b_no_image_duration.png
- Missing frame runs: data\processed\lab029b\lab029b_missing_frame_runs.png
- Payload comparison: data\processed\lab029b\lab029b_payload_comparison.png
- JPEG, пакеты и бинарные дампы не сохранялись.
