Complete VIDEO-001 through VIDEO-004 software video studies
This commit is contained in:
143
docs/video/SECOND_COMPUTER_SETUP.md
Normal file
143
docs/video/SECOND_COMPUTER_SETUP.md
Normal file
@@ -0,0 +1,143 @@
|
||||
# VIDEO-001: подготовка второго компьютера
|
||||
|
||||
16 сентября 2026 года. Это ведомость и инструкция для будущей программной
|
||||
установки приёмника. Второй ноутбук не подключали, USB-плату не открывали,
|
||||
драйверы и прошивки не меняли. `RF TX = 0`.
|
||||
|
||||
## Что проверено на основном ПК
|
||||
|
||||
| Компонент | Фактическое состояние |
|
||||
|---|---|
|
||||
| ОС и Python | Windows NT 10.0.19045, 64 бита; CPython 3.13.1 x64, `C:\Users\user\AppData\Local\Programs\Python\Python313\python.exe`. |
|
||||
| Приёмник сохранённого IQ | NumPy 2.2.6, SciPy 1.18.0, Pillow 12.0.0, Numba 0.61.2, llvmlite 0.44.0. Numba/llvmlite сейчас доступны из `C:\Users\user\Desktop\projects\SDR_Rover\.lab053_cpu_runtime\packages`. Это локальная добавка к Python, не переносимая среда. |
|
||||
| Сравнение видеокодеков | OpenCV 4.12.0.88, PyAV 16.0.1, psutil 6.1.0; `libx264` открыт через PyAV. Доступны FFmpeg `libavcodec 62.11.100`, `libavformat 62.3.100`, `libavutil 60.8.100`. Отдельные команды `ffmpeg`/`ffprobe` в PATH не найдены. |
|
||||
| Базовые пакеты | matplotlib 3.11.1, pytest 9.1.1. Проверенные версии для VIDEO-001 записаны в `requirements-video.txt`; они точнее фактического `opencv-python==4.12.0` в старом `requirements.txt`. |
|
||||
| HackRF host tools | Conda-метаданные: `hackrf 2024.02.1`, `libhackrf0 2024.02.1`. Проект указывает `C:\Users\user\Tools\HackRF\Library\bin\hackrf_transfer.exe`; рядом есть `hackrf_info.exe`, `hackrf_clock.exe`, `hackrf-0.dll`. Файлы `hackrf_transfer.exe` и `hackrf-0.dll` побайтно совпадают с экземплярами в `C:\Users\user\radioconda\Library\bin`. В этом задании утилиты не запускались, фактическое устройство заново не опрашивалось. |
|
||||
| Конфигурация радио | Код Lab066: BPSK 500 ксимв/с, Fs 8 Мвыб/с, 16 выборок/символ, пауза 5 мс, общая опора 10 МГц. Это сохранённая точка предыдущего опыта, а не команда к новому запуску. |
|
||||
|
||||
## Разделение ролей
|
||||
|
||||
**Основной ПК, будущий передатчик.** Здесь остаются исходное видео, подготовка
|
||||
JPEG и сигналов (`lab047_jpeg_object_transport.py`, `lab045_hackrf_bpsk_fec.py`,
|
||||
`lab049_bpsk_symbol_rate.py`), TX HackRF и его параметры. Рабочего отправителя
|
||||
непрерывного H.264 пока нет. Программный `tools/video_compare.py` кодирует
|
||||
ролик в файл и не формирует радиопакеты.
|
||||
|
||||
**Ноутбук, будущий приёмник.** На первом этапе можно проверить импорт модулей,
|
||||
тесты и, при наличии отдельно переданного сохранённого IQ, повтор Lab053.
|
||||
`tools/video_iq_replay.py` читает файл, а не USB. Готового адаптера «USB HackRF
|
||||
на ноутбуке → непрерывные IQ-блоки → экран» нет. Процесс на основном ПК не может
|
||||
непосредственно открыть USB-плату ноутбука.
|
||||
|
||||
Для программного сравнения на ноутбуке достаточно `tools/video_compare.py`,
|
||||
`requirements-video.txt` и одного разрешённого к копированию MP4. Для проверки
|
||||
приёмника без копирования всего архива нужен следующий замкнутый набор исходных
|
||||
модулей из ветки `video-development` (статический граф локальных импортов
|
||||
`lab053_pipeline`/`ImageSink`/`lab053_streaming_receiver`; 38 файлов):
|
||||
|
||||
```text
|
||||
protocol/bit_interleaver.py
|
||||
protocol/bpsk_carrier_tracking.py
|
||||
protocol/bpsk_radio.py
|
||||
protocol/control_messages.py
|
||||
protocol/convolutional_fec.py
|
||||
protocol/image_fragments.py
|
||||
protocol/link_packet.py
|
||||
protocol/packet.py
|
||||
protocol/priority_scheduler.py
|
||||
protocol/video_age_policy.py
|
||||
protocol/video_frame_scheduler.py
|
||||
experiments/lab042_pluto_image_loopback.py
|
||||
experiments/lab043_bpsk_asymmetry_diagnostics.py
|
||||
experiments/lab043_hackrf_bpsk.py
|
||||
experiments/lab043_hackrf_hardware.py
|
||||
experiments/lab043_pluto_to_rtlsdr.py
|
||||
experiments/lab043_prbs11_hardware.py
|
||||
experiments/lab044_hackrf_bpsk_packet.py
|
||||
experiments/lab045_hackrf_bpsk_fec.py
|
||||
experiments/lab046_bpsk_object_transport.py
|
||||
experiments/lab046b_continuous_iq.py
|
||||
experiments/lab046c_hackrf_bpsk_object.py
|
||||
experiments/lab046c_offline_recovery.py
|
||||
experiments/lab047_jpeg_object_transport.py
|
||||
experiments/lab049_bpsk_symbol_rate.py
|
||||
experiments/lab049_independent_iq.py
|
||||
experiments/lab050_streaming_receiver.py
|
||||
experiments/lab050_video_stream.py
|
||||
experiments/lab051_receiver_performance.py
|
||||
experiments/lab051_receiver_profile.py
|
||||
experiments/lab051_streaming_receiver.py
|
||||
experiments/lab052_candidate_detection.py
|
||||
experiments/lab052_detector_study.py
|
||||
experiments/lab053_packet_processing.py
|
||||
experiments/lab053_pipeline.py
|
||||
experiments/lab053_receiver_profile.py
|
||||
experiments/lab053_streaming_receiver.py
|
||||
experiments/lab053_viterbi.py
|
||||
```
|
||||
|
||||
Сохранить каталоговую структуру и `tools/video_iq_replay.py`. Перечень
|
||||
проверен импортом этих 38 модулей из отдельного временного каталога с
|
||||
изолированным путём Python: `IMPORT_OK`. Он показывает зависимость нынешнего
|
||||
кода от старых лабораторных модулей;
|
||||
он не означает, что аппаратные функции будут вызваны при импорте. Это пока
|
||||
слишком широкая зависимость для удобной установки, поэтому перед живым RX
|
||||
полезно выделить минимальный приёмный пакет отдельной программной задачей.
|
||||
`data/raw` и `data/processed` целиком переносить не нужно.
|
||||
|
||||
## Порядок программного развёртывания
|
||||
|
||||
1. Выяснить ОС и разрядность ноутбука, доступную оперативную память, Python,
|
||||
модель и serial подключаемой именно к нему HackRF, тип USB-порта/контроллера
|
||||
и физический путь общей опоры 10 МГц. До этого драйвер не выбирать.
|
||||
2. В новом каталоге ноутбука разместить только перечисленный исходный код,
|
||||
`requirements-video.txt`, `tools/video_iq_replay.py` и нужные тесты. Не
|
||||
переносить всю Conda-среду, пользовательские настройки, ключи или архив IQ.
|
||||
3. Создать чистое окружение Python 3.13.1 и установить зафиксированные пакеты:
|
||||
|
||||
```powershell
|
||||
py -3.13 -m venv .venv
|
||||
.\.venv\Scripts\python.exe -m pip install -r requirements-video.txt
|
||||
.\.venv\Scripts\python.exe -c "import av; print(av.codec.Codec('libx264', 'w').name)"
|
||||
```
|
||||
|
||||
Если пакет отсутствует или установка не прошла, записать `NOT_RUN` и текст
|
||||
ошибки. Не выдавать отсутствие зависимости за `PASS`.
|
||||
4. Проверить импорт программного RX и быстрые тесты без устройства. Для
|
||||
сравнения кодеков передать только согласованный MP4. Основной опыт VIDEO-001
|
||||
использует [видео Udacity с движением камеры и автомобилей](https://github.com/udacity/CarND-Vehicle-Detection/blob/master/project_video.mp4):
|
||||
`udacity_project_video.mp4`, 25 268 015 байт, SHA-256
|
||||
`651949922042c223375d40bf8929def97dbb62c6ade651d1f5b08eea47127d5f`.
|
||||
|
||||
```powershell
|
||||
.\.venv\Scripts\python.exe -c "from experiments.lab053_streaming_receiver import StreamingReceiver; from experiments.lab051_receiver_performance import ImageSink; print('IMPORT_OK')"
|
||||
.\.venv\Scripts\python.exe -B -m pytest tests\test_video_001_compare.py -q -p no:cacheprovider --basetemp video001_pytest_tmp
|
||||
```
|
||||
5. Полный повтор IQ выполнять лишь когда 386 842 624-байтный файл действительно
|
||||
нужен для оценки скорости ноутбука. Его нельзя молча включать в пакет
|
||||
переноса. Сверку эталонных JPEG держать после вердикта приёмника:
|
||||
|
||||
```powershell
|
||||
.\.venv\Scripts\python.exe -B tools\video_iq_replay.py --source <путь_к_source.c64> --fixture-json <путь_к_source_fixture.json> --numba-packages .venv\Lib\site-packages --output <новый_результат.json>
|
||||
```
|
||||
|
||||
Ожидаемый размер файла 386 842 624 байта и записанный SHA-256
|
||||
`9b4f5469b21985f796a77e22981f93bcd3b7a203b573349e8bdf7ea55891bea0`
|
||||
проверяются до сравнения.
|
||||
Замер на основном ПК приведён в `VIDEO_001.md`; скорость ноутбука **NOT_RUN**.
|
||||
|
||||
## Граница аппаратного этапа
|
||||
|
||||
Драйвер и расположение `libhackrf` на ноутбуке выбираются после определения его
|
||||
ОС и оборудования; автоматической установки здесь нет. Прошивку HackRF Plus
|
||||
не менять. Первый будущий аппаратный порядок: общая опора 10 МГц включена и
|
||||
проверена на обеих платах → приёмник ноутбука готов и подтверждён → отдельное
|
||||
прямое разрешение на TX. Проверка независимых генераторов вне VIDEO-001.
|
||||
Частоту, усиления, антенны и роль устройств по старому скрипту автоматически
|
||||
не переносить. При ошибке приёма или счётчиках потерь сеанс останавливают;
|
||||
повторную передачу отдельно согласуют.
|
||||
|
||||
**NOT_RUN:** развёртывание на втором ноутбуке, проверка его USB и драйвера,
|
||||
приём вживую, непрерывный экран, передача и восстановление H.264 по радио.
|
||||
Подготовлен воспроизводимый программный пакет и перечень сведений, которых
|
||||
не хватает для конкретной установки.
|
||||
Reference in New Issue
Block a user