CW декодер на Pi Pico - Hamfist


Джон Доусон

SW decoder Этот проект начался с простого вопроса: какой объем декодирования CW-сигналов можно реально выполнить на небольшом микроконтроллере, прежде чем будут достигнуты пределы? Вместо того чтобы стремиться к созданию максимально простого декодера, целью было разработать нечто действительно полезное на практике — достаточно легкое для встраивания в приемник, достаточно быстрое для работы в реальном времени и достаточно интеллектуальное, чтобы справляться с реальным азбукой Морзе, а не с идеализированными тестовыми сигналами.

В результате получился Hamfist, декодер (и кодер) CW-сигналов, разработанный для работы на устройствах класса Raspberry Pi Pico, с использованием идей, обычно встречающихся в декодерах для ПК. Он сочетает в себе адаптивную обработку сигналов, автоматическую оценку скорости, вероятностное декодирование, коррекцию на основе словаря и многоканальное декодирование, при этом строго контролируя использование памяти и процессора.

Первоначальный список пожеланий к проекту выглядел так:

  • Небольшой объем занимаемой памяти (достаточно мал, чтобы поместиться в оборудование типа Pico RX).
  • Достаточно быстрый, чтобы комфортно работать на Pico вместе с пользовательским интерфейсом.
  • Автоматическая оценка скорости выполнения кода.
  • Декодирование на основе словаря для повышения точности.
  • Подход в стиле «CW-скиммера», позволяющий декодировать несколько сигналов в полосе пропускания SSB.

Помимо декодирования, проект также включает в себя кодер CW. Предполагается, что и кодер, и декодер будут работать на одном и том же оборудовании, используя простой кнопочный интерфейс. Это делает платформу подходящей как для экспериментов по приему, так и для передачи, портативной работы и дальнейшего расширения.

Функции

  • Дешевая и простая сборка
  • Минимальное количество внешних компонентов
  • Функции передачи и приема
  • Многоканальный режим
  • Байесовское декодирование
  • Автокоррекция

Описание оборудования

Что касается аппаратной части, проект придерживается знакомой и хорошо проверенной конфигурации: Raspberry Pi Pico в паре с недорогим SPI TFT-дисплеем ILI9341 (или совместимым). Если вы следили за моими другими проектами, эта комбинация покажется вам очень знакомой. Фактически, декодер разработан для работы на той же основе, как и декодер SSTV, что упрощает и удешевляет эксперименты.

Данная конструкция одинаково хорошо работает на устройствах Pico на базе RP2040 и RP2350. Беспроводные функции не требуются, но платы Pico W и Pico 2 W тоже отлично подойдут, если у вас есть такая возможность. Для оптимальной производительности на RP2040 рекомендуется тактовая частота 125 МГц. Работа на частоте 200 МГц возможна, но при этом снижается максимальная скорость SPI и замедляется отрисовка экрана.

Поддерживаются как прием, так и передача аудиосигнала с использованием встроенного АЦП Pico и ЦАП на основе ШИМ. Небольшой набор тактильных кнопок обеспечивает простой пользовательский интерфейс с меню, позволяющий пользователю переключаться между режимами приема и передачи, а также настраивать параметры декодера.

Электрическая схема
full_circuit_cw.png

Пользовательские настройки сохраняются с помощью эмуляционного слоя EEPROM ядра Arduino Pico, который сохраняет данные конфигурации во встроенной флэш-памяти и автоматически восстанавливает их после выключения и включения питания.

Распиновка подключения дисплея показана ниже:

Сигнал

Пин на дисплее

Номер пина Pico

Номер GPIO Pico

Vcc

1

36 (3v3 out)

NA

Gnd

2

18 (GND)

NA

CS

3

17

13

RESET

4

36 (3v3 out)

NA

DC

5

15

11

MOSI

6

20

15

CSK

7

19

14

LED

8

36 (3v3 out)

NA

Четыре кнопки, используемые для навигации по меню, подключаются между контактом GND и свободным контактом GPIO:

Сигнал

Номер пина Pico

Номер GPIO Pico GPIO

Gnd

23 (GND)

NA

UP_BTN

22

17

DOWN_BTN

26

20

RIGHT_BTN

27

21

LEFT_BTN

29

22

Корпус, напечатанный на 3D-принтере

enclosure_complete.jpg

Конструкция корпуса аналогична декодеру SSTV и в нем уже реализована вся необходимая функциональность для Hamfist. Предусмотрены вырезы для TFT-дисплея, аудиоразъемов и четырех кнопок на передней панели, при этом общий размер достаточно компактен для портативного использования.

Конструкция намеренно отличается гибкостью. Предусмотрено несколько передних панелей для размещения TFT-дисплеев разных размеров (от 2,4 до 3,2 дюймов), а доступ к слоту для SD-карты на дисплее осуществляется через тонкий участок в стенке корпуса. Дополнительные элементы, такие как отверстия для выключателей питания или альтернативных разъемов, легко можно добавить с помощью дрели или канцелярского ножа.

Вместительный батарейный отсек делает корпус удобным для портативной работы. Встроенный импульсный стабилизатор напряжения позволяет Pico работать от широкого диапазона напряжений питания, включая батарейки типа AA/AAA или одну литий-ионную батарею, как описано в техническом описании Pico .

Цепочка обработки сигнала декодера

Цепочка обработки сигнала начинается с аудиосигнала, дискретизированного с частотой 15 кГц, который затем децимируется до 7,5 кГц для снижения вычислительной нагрузки при сохранении полосы пропускания, представляющей интерес для сигналов непрерывного излучения (CW). Децимированный сигнал обрабатывается короткими блоками с использованием быстрого преобразования Фурье (БПФ), обеспечивающего достаточное частотное разрешение в полосе пропускания CW. Для каждого выходного бина БПФ вычисляется комплексная амплитуда с использованием быстрого приближения амплитуды, что приводит к небольшому снижению точности амплитуды и значительному уменьшению затрат на обработку. Это позволяет получить оценку спектральной амплитуды для каждого кадра, которая служит основой для последующего обнаружения.

Затем спектр делится на шесть перекрывающихся каналов декодирования, каждый из которых формируется путем группировки пяти смежных интервалов БПФ. В каждой группе выбирается интервал с наибольшей амплитудой в качестве репрезентативного уровня сигнала для этого канала, и это значение сравнивается с самым низким порогом среди интервалов в группе. При обнаружении сигнала применяется гистерезис путем временного снижения порога, что помогает стабилизировать обнаружение при незначительных замираниях и предотвращает быстрое переключение на границе шума. Полученный двоичный сигнал преобразуется в поток единиц и нулей, а также измеренная длительность обнаруженных и необнаруженных интервалов, что дает информацию о символах во временной области, пригодную для декодирования азбуки Морзе.

Для каждого канала декодирования перед первым запуском декодера накапливается приблизительно 100 двоичных отсчетов. Этот начальный период наблюдения предоставляет достаточно данных для построения гистограммы длин меток и пробелов, на основе которой можно получить первоначальные оценки длительности точек и тире. После установления этих параметров синхронизации декодер может работать более быстро, обновляя свой выходной сигнал каждые 20 дополнительных отсчетов, одновременно постоянно уточняя свои внутренние оценки синхронизации. Такой поэтапный подход позволяет декодеру получить надежную начальную синхронизацию, плавно адаптируясь к изменениям скорости передачи или условий сигнала с течением времени.

decoder_signal_path.png

Кодировщик

Хотя большая часть проекта сосредоточена на декодировании, Hamfist также включает в себя кодировщик CW, так что функции передачи и приема могут работать на одном и том же оборудовании. Это упрощает эксперименты, тестирование декодера с известными сигналами и, в конечном итоге, создание более полной автономной системы CW.

Кодировщик принимает на вход текстовую строку и преобразует её в непрерывный поток аудиосэмплов, представляющих собой код Морзе, передаваемый с помощью телеграфа. Каждый символ преобразуется в свой шаблон из точек и тире с использованием таблицы соответствия, охватывающей буквы, цифры и распространённые знаки препинания. Время определяется на основе заданной частоты слов в минуту (WPM), при этом длительность одной «точки» рассчитывается непосредственно из частоты дискретизации выходного сигнала. Точки передаются как одна точка, тире — как три точки, при этом между символами, буквами и словами применяется стандартное расстояние Морзе.

Генерация звука осуществляется по одному сэмплу за раз с помощью генератора с числовым программным управлением (NCO), работающего на основе предварительно рассчитанной синусоидальной таблицы. Частота тона устанавливается независимо от скорости манипуляции, что позволяет кодировщику генерировать чистый телеграфный сигнал с любой желаемой высотой тона. Чтобы избежать щелчков клавиш и чрезмерного спектрального искажения, при каждом включении или выключении тона применяется плавная амплитудная огибающая. Такое плавное нарастание сигнала создает чистый, хорошо сформированный телеграфный сигнал, приятный на слух и простой в обработке для декодера.

sw-dec

Заключение

Этот уникальный проект демонстрирует, что на небольшом и недорогом микроконтроллере возможно удивительно сложное декодирование CW-сигналов. Благодаря тщательному выбору алгоритмов и ориентации на эффективность, декодер включает в себя функции, которые часто доступны только в программном обеспечении для ПК: адаптивную оценку шума, автоматическое определение скорости, вероятностное декодирование, многоканальный режим «скиммера», коррекцию с помощью словаря и даже автокоррекцию — и все это при использовании лишь небольшой части доступной оперативной памяти и процессора Raspberry Pi Pico.

Хотя декодер пока не может сравниться по производительности с опытным оператором, он обеспечивает надежные и стабильные результаты, которые выгодно отличаются от многих существующих декодеров, особенно учитывая скромную аппаратную платформу. Диаграмма направленности в виде «водопада» обеспечивает интуитивно понятное отображение точек и тире на нескольких каналах, что позволяет легко понять, что видит декодер и почему он принимает те или иные решения. В целом, Hamfist — это одновременно практичный инструмент для работы с телеграфом и полезное исследование того, насколько далеко можно продвинуться в современных методах обработки сигналов и вероятностных методах на ограниченном по ресурсам встроенном оборудовании.

Быстрые ссылки

SW decoder


[ На главную ] [ RP2040 ]