144 lines
11 KiB
Markdown
144 lines
11 KiB
Markdown
# 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 по радио.
|
||
Подготовлен воспроизводимый программный пакет и перечень сведений, которых
|
||
не хватает для конкретной установки.
|