Lab042: correct the sample rate against the real device

Queried the Pluto over IIO before writing any code. Three findings, one
of which invalidated the specification.

The AD9361 will not sample below 2 083 333 Hz, so the 640 kHz taken from
Lab018 is unreachable by a factor of three. Going lower needs the on-chip
FIR decimator, which would add an untested mechanism to the very first
transmit. Instead raise oversampling from 32 to 128 samples per symbol:
the symbol rate stays at 20 000, rolloff, preamble, sync word and guard
are untouched, and the rate becomes 2 560 000 Hz. Only the device
interface changes, not the signal.

Consequence recorded: the shaping filter grows to 1281 taps, so the
convolution has to go through scipy.signal.fftconvolve.

Also from the device:
- it reports as PlutoSDR Rev.C (Z7010-AD9361) with a single RX and a
  single TX buffer channel, so adi.Pluto is right and the adi.ad9361
  fallback is unnecessary
- the chip is a full AD9361: RX tunes 70 MHz to 6 GHz, TX from 46.9 MHz,
  so the sub-350 MHz target band is available without a firmware hack.
  That closes the open question flagged for Lab044
- firmware is v0.32, left alone for now

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
LittleSam129
2026-08-10 14:06:44 +03:00
parent 2a7a380875
commit 1e4adc0a98

View File

@@ -66,7 +66,9 @@
- связь по Ethernet, а не по USB; адрес `ip:192.168.2.1` уже подтверждён работой Lab024a; - связь по Ethernet, а не по USB; адрес `ip:192.168.2.1` уже подтверждён работой Lab024a;
- два приёмных и два передающих канала; в Lab042 используется только первый канал каждого; - два приёмных и два передающих канала; в Lab042 используется только первый канал каждого;
- класс `adi.Pluto` в Lab024a отработал на приёме. Начинать с него. Если передача на этом классе не пойдёт из-за двухканальности, перейти на `adi.ad9361` с тем же адресом. Это единственное разрешённое отступление от задания, и о нём нужно сообщить. - вопреки надписи на корпусе, устройство сообщает о себе как `Analog Devices PlutoSDR Rev.C (Z7010-AD9361)` и представлено **одним приёмным и одним передающим каналом**: буферные устройства `cf-ad9361-lpc` и `cf-ad9361-dds-core-lpc` несут по паре каналов I и Q. Поэтому класс `adi.Pluto` подходит, переход на `adi.ad9361` не требуется;
- чип **AD9361**, а не урезанный AD9363. Диапазон перестройки приёмника от 70 МГц до 6 ГГц, передатчика от 46,9 МГц до 6 ГГц. Целевой диапазон проекта ниже 350 МГц устройству доступен штатно, без доработки прошивки. Для Lab044 это снимает ранее открытый вопрос;
- прошивка `v0.32-1-g7bdc-dirty`, ядро 4.19. Обновление в рамках Lab042 не выполняется.
## 5. Требования к схеме и сохранности оборудования ## 5. Требования к схеме и сохранности оборудования
@@ -120,13 +122,13 @@
## 7. Параметры тракта ## 7. Параметры тракта
Значения тракта взяты из Lab018 и менять их в этой лабораторной **запрещено**. Причина: переход на железо сам по себе вносит достаточно неизвестных. Менять одновременно и параметры сигнала — значит потерять возможность понять причину отказа. Значения тракта взяты из Lab018 и менять их в этой лабораторной **запрещено**, за единственным исключением, описанным сразу под таблицей. Причина запрета: переход на железо сам по себе вносит достаточно неизвестных. Менять одновременно и параметры сигнала — значит потерять возможность понять причину отказа.
| Параметр | Значение | Источник | | Параметр | Значение | Источник |
|---|---|---| |---|---|---|
| Символьная скорость | 20 000 симв/с | `SYMBOL_RATE`, Lab018 | | Символьная скорость | 20 000 симв/с | `SYMBOL_RATE`, Lab018 |
| Отсчётов на символ | 32 | `SAMPLES_PER_SYMBOL`, Lab018 | | Отсчётов на символ | **128** | изменено против Lab018, см. ниже |
| Частота дискретизации | 640 000 Гц | произведение двух предыдущих | | Частота дискретизации | **2 560 000 Гц** | произведение двух предыдущих |
| Скругление фильтра | 0,35 | `RRC_ROLLOFF`, Lab018 | | Скругление фильтра | 0,35 | `RRC_ROLLOFF`, Lab018 |
| Длина фильтра | 10 символов | `RRC_SPAN_SYMBOLS`, Lab018 | | Длина фильтра | 10 символов | `RRC_SPAN_SYMBOLS`, Lab018 |
| Преамбула | 64 бита | `PREAMBLE_BIT_COUNT`, Lab018 | | Преамбула | 64 бита | `PREAMBLE_BIT_COUNT`, Lab018 |
@@ -134,15 +136,29 @@
| Защитный интервал | 16 символов | `GUARD_SYMBOL_COUNT`, Lab018 | | Защитный интервал | 16 символов | `GUARD_SYMBOL_COUNT`, Lab018 |
| Амплитуда передачи | 0,70 | `TX_AMPLITUDE`, Lab018 | | Амплитуда передачи | 0,70 | `TX_AMPLITUDE`, Lab018 |
### Обязательное отступление от Lab018: частота дискретизации
Опрос устройства 10 августа 2026 года показал, что **минимальная частота дискретизации AD9361 составляет 2 083 333 Гц**. Частота 640 000 Гц из Lab018 физически недостижима: она втрое ниже предела. Понизить её можно только включением встроенного КИХ-фильтра с прореживанием, что добавляет к первому включению передатчика ещё один непроверенный механизм.
Принято решение поднять число отсчётов на символ с 32 до 128. Тогда:
- символьная скорость остаётся **20 000 симв/с**, как в Lab018;
- скругление, длина фильтра, преамбула, слово синхронизации и защитный интервал — без изменений;
- частота дискретизации становится 20 000 × 128 = **2 560 000 Гц**, что выше минимума с запасом.
Меняется **только степень передискретизации** — величина, относящаяся к стыку с устройством, а не к самому сигналу. Форма спектра, скорость и структура кадра остаются теми же, что проверены в Lab018Lab023. Это единственное разрешённое расхождение с Lab018, и оно вынужденное.
Полезная скорость получается около 20 кбит/с. Для картинки в несколько килобайт это единицы секунд. Этого достаточно: цель — картинка, а не скорость. Полезная скорость получается около 20 кбит/с. Для картинки в несколько килобайт это единицы секунд. Этого достаточно: цель — картинка, а не скорость.
Побочное следствие: фильтр приподнятого косинуса при 128 отсчётах на символ и длине 10 символов получается на 1281 отвод. Свёртку следует выполнять через быстрое преобразование Фурье (`scipy.signal.fftconvolve`), иначе формирование сигнала займёт недопустимо много времени.
### Параметры PlutoSDR ### Параметры PlutoSDR
| Параметр | Значение | Примечание | | Параметр | Значение | Примечание |
|---|---|---| |---|---|---|
| Адрес устройства | `ip:192.168.2.1` | как в Lab024a | | Адрес устройства | `ip:192.168.2.1` | как в Lab024a |
| Несущая передачи и приёма | 435 МГц | обе одинаковые | | Несущая передачи и приёма | 435 МГц | обе одинаковые |
| Частота дискретизации | 640 000 | совпадает с трактом | | Частота дискретизации | 2 560 000 | совпадает с трактом, минимум устройства 2 083 333 |
| Полоса радиочастотного тракта | 200 000 Гц | минимум Pluto, сигнал занимает около 27 кГц | | Полоса радиочастотного тракта | 200 000 Гц | минимум Pluto, сигнал занимает около 27 кГц |
| Усиление передатчика | начать с 30 дБ | с аттенюатором безопасен весь диапазон, см. раздел 5 | | Усиление передатчика | начать с 30 дБ | с аттенюатором безопасен весь диапазон, см. раздел 5 |
| Режим усиления приёмника | `manual` | автоматика мешает измерениям | | Режим усиления приёмника | `manual` | автоматика мешает измерениям |