Четыре быстрых шага на пути к производству. Модельно-ориентированное проектирование программноопределяемых радиосистем. Часть 2. Обнаружение и декодирование сигналов Mode S при помощи MATLAB и Simulink
Сигналы системы автоматического зависимого наблюдения/вещания
Одним из таких радиосигналов, которые могут быть использованы для демонстрации быстрого создания прототипа на базе комбинации AD9361 и полностью программируемой системы на кристалле SoC Zynq‑7000 компании Xilinx, являются сигналы системы автоматического зависимого наблюдения/вещания (automatic dependent surveillance broadcast, ADS-B) от коммерческих воздушных судов. Оборудованные передатчиками ADS-B, коммерческие воздушные суда передают свой идентификационный номер, а также информацию о положении, скорости и высоте операторам управления воздушным движением. Формат передаваемых данных определяет спецификация расширенного сквиттера (extended squitter) режима S (Mode S), предложенная Международной организацией гражданской авиации (International Civil Aviation Organization, ICAO). Технология ADS-B внедряется по всему миру для модернизации систем управления воздушным движением и предотвращения столкновений. Она уже стала общепринятой в Европе и постепенно начинает использоваться в США.
Стандарт расширенного сквиттера Mode S определяет формат кодируемых данных и параметры передаваемого радиосигнала. Передаваемый транспондером сигнал имеет следующие характеристики:
- Частота передачи: 1090 МГц.
- Модуляция: фазово‑импульсная модуляция.
- Скорость передачи данных: 1 Мбит/с.
- Длина сообщения: 56 мкс или 112 мкс.
- 24‑разрядная контрольная сумма (CRC).
Частота передачи и полоса передаваемого сигнала находятся в пределах диапазонов рабочих частот и ширины канала радиотрансивера AD9361, и для обнаружения/декодирования принимаемых отсчетов квадратурных составляющих нами могут быть использованы самые разнообразные программные или встраиваемые платформы.
В этой статье мы обсудим, как осуществлять прием сигналов Mode S в аппаратной платформе приемника на базе AD9361, а затем разработаем алгоритм для декодирования сообщений при помощи MATLAB и Simulink. При создании алгоритма будем ориентироваться на его конечную реализацию в платформе SoC Zynq, например в модуле SOM (System on Module) PicoZed компании Avnet.
Сложности при проектировании приемника
Сообщения Mode S бывают короткими (56 мкс) и длинными (112 мкс). Короткие сообщения содержат информацию о типе сообщения, идентификационный номер воздушного судна и циклический избыточный код проверки четности (cyclic redundancy check, CRC). В дополнение к этим данным длинные сообщения также включают информацию о высоте, положении, скорости и статусе полета. Независимо от типа сообщения посылка Mode S начинается с преамбулы длительностью 8 мкс, которая используется приемниками для обнаружения достоверной передачи и определения момента начала информационных битов. Структуру сообщений Mode S иллюстрирует рис. 1.
Несмотря на довольно простую структуру сигнала Mode S, для успешного приема и декодирования сообщений необходимо преодолеть ряд сложностей.
- Как правило, очень короткие сообщения, поступающие на вход приемника, разделяются длительными периодами молчания, а уровень принимаемых сигналов может быть очень мал, если передающее воздушное судно находится на большом расстоянии от приемника. Кроме того, на частоте 1090 МГц также передаются сигналы систем предыдущих поколений. Таким образом, в условиях плотной загруженности частотного диапазона приемник должен с помощью преамбулы идентифицировать сообщения Mode S как от близкорасположенных, так и от находящихся на большой высоте объектов.
- Биты передаются на интервале 1 мкс одной из двух возможных форм колебания сигнала. Логической единице соответствует высокий уровень сигнала в течение первой половины мкс и низкий уровень в течение второй половины мкс. Логическому нулю соответствует низкий уровень сигнала в течение первой половины мкс и высокий уровень в течение второй половины мкс. Поскольку детектирование переданных битов производится по форме колебания сигнала во временной области, приемник должен при помощи преамбулы точно определить положение квадратурного отсчета, соответствующего началу первого бита сообщения.
- Сообщение Mode S состоит из 88 информационных битов и 22 битов контрольной суммы. Приемник должен уметь очищать регистры, детектировать значения битов, вычислять контрольную сумму и считывать содержимое регистров контрольной суммы в корректные моменты времени. Таким образом, для правильного функционирования приемника необходима схема управления синхронизацией.
- Во встраиваемой системе процесс декодирования должен выполняться по отдельным отсчетам. Для подобных систем хранить в приемнике большие объемы данных и обрабатывать их единовременно на практике нецелесообразно.
Комбинация многофункциональной микросхемы радиочастотного интерфейса AD9361 и языка технических вычислений MATLAB существенно упрощает задачу обнаружения и декодирования таких радиосигналов. Входящие в состав MATLAB и Signal Processing Toolbox функции могут использоваться для идентификации синхронизирующей последовательности, вычисления шумового порога, детектирования битов и подсчета контрольной суммы. Реализация логики управления упрощается доступными в MATLAB возможностями условного исполнения кода. Тестовые данные могут быть считаны из двоичных или текстовых файлов либо загружены в MATLAB непосредственно из SDR-платформы на базе AD9361 путем потоковой передачи. И наконец, интерпретируемый характер языка MATLAB позволяет упростить процесс работы с данными, опробовать различные варианты алгоритма и создать решение в интерактивном режиме.
Моделирование и верификация алгоритмов приемника сигналов режима S в MATLAB
Читатели, желающие ознакомиться с деталями исходного кода на языке MATLAB, могут найти соответствующие файлы в репозитории GitHub Analog Devices (www.github.com/analogdevicesinc/MathWorks_tools/blob/master/hil_models/ADSB_MATLAB/ссылка утрачена/), включая файл с функцией верхнего уровня, ad9361_ModeS.m, и файлы с функциями, вызываемыми из нее.
Первым шагом проектирования алгоритма работы приемника является получение доступа к примерам реальных данных. Поскольку на сегодня транспондерами Mode S оборудованы многие воздушные суда, это можно сделать, просто настроив приемник на частоту 1090 МГц и записав сигналы от близкорасположенных источников. В нашем случае можно использовать платформу быстрого прототипирования систем SDR на базе SoC Zynq (Zynq SDR Rapid Prototyping Platform). Компания Analog Devices предоставляет системный объект MATLAB (MATLAB System object), позволяющий принимать данные от платформы FMCOMMS через Ethernet. С его помощью пользователь способен управлять частотой настройки и частотой дискретизации, накапливать отсчеты принимаемого радиосигнала и передавать их непосредственно в рабочее окружение MATLAB в виде переменной MATLAB. Количество строк кода, необходимое для работы с системным объектом, очень мало: несколько строк достаточно для конфигурирования самого системного объекта, еще несколько строк нужно для конфигурирования FMCOMMS3 и, наконец, еще несколько строк надо для сбора отсчетов квадратурных сигналов и их записи в переменную MATLAB. Пример кода MATLAB, реализующего эти операции, показан на рис. 2–4.
Используя код на основе этих команд, мы записали несколько наборов данных при частоте дискретизации 12,5 МГц. Выбор данной частоты обусловлен тем, что указанное значение позволяет сформировать достаточное количество отсчетов для точного определения положения первого бита, а также обеспечить некоторое усреднение шума в отсчетах, применяемых для принятия решений при декодировании битов. Результат записи 1 млн отсчетов показан на рис. 5.
Этот короткий набор данных содержит 14 сигналов, которые выделяются на уровне шума. Из них два являются сообщениями Mode S. Остальные — сигналы систем предыдущих поколений, а также мешающие сигналы, которые необходимо отбросить. Одно из двух достоверных сообщений можно увидеть на графике с увеличенным в районе отсчета номер 604000 масштабом (рис. 6).
На данном графике отчетливо видна преамбула, а также характерные для фазово‑импульсной модуляции переходы сигнала при передаче отдельных битов. Но даже при столь чистом сигнале декодирование битов путем простого зрительного наблюдения потребовало бы острого зрения и большого терпения. Очевидно, что для декодирования сообщений необходима автоматизированная программа. Хорошим решением для разработки подобной программы является MATLAB.
Код на языке MATLAB, способный декодировать сообщения Mode S, выполняет следующие основные действия:
- Вычисление шумового порога и корреляционный поиск преамбулы при помощи функции filter() на интервале короткого временного окна. В нашем решении мы используем окно в 75 отсчетов, что соответствует 6 мкс.
- Запуск логики поиска отсчета первого бита сообщения при превышении шумового порога выходным сигналом коррелятора преамбулы:
- Выбор порога является субъективным. Он должен быть достаточно мал для детектирования слабых сигналов, но в то же время достаточно велик для предотвращения большого числа ложных срабатываний. В качестве разумного значения порога, позволяющего принимать большинство декодируемых сообщений, было выбрано значение в 10 раз выше шумового порога.
- Корреляционная функция преамбулы имеет несколько пиков. Поскольку наилучшее совпадение достигается на интервале первых 6 мкс, мы запоминаем положение первого пика, начинаем поиск первого бита сообщения и смотрим, не появится ли еще один пик большего уровня в течение следующих 3 мкс. Если это происходит, мы запоминаем положение нового пика и производим поиск первого бита сообщения заново.
- Декодирование первого бита сообщения начинается спустя 2 мкс после появления максимального пика.
- На рис. 7 показан результат взаимной корреляции идеальной преамбулы с поступающими данными и шумовой порог (зеленая линия). Пороговое значение превышают несколько пиков, однако нас интересует пик с максимальной амплитудой. Спустя 2 мкс за этим пиком следует первый бит сообщения.
- Вычисление суммы амплитуд отсчетов в первой половине и во второй половине микросекундного интервала для каждого отдельно взятого бита. В зависимости от того, какая из сумм больше, принимается решение, была ли передана логическая 1 или логический 0.
- Вычисление контрольной суммы по завершении детектирования отдельных битов. Этот шаг требует дополнительной логики управления для сброса регистров CRC при поступлении первого бита, вычисления контрольной суммы по 88 битам и последующего опустошения регистров CRC для последних 24 битов. Сообщение ADS-B является достоверным при совпадении контрольной суммы, рассчитанной по принимаемым битам, с переданной контрольной суммой.
- Разбор битов сообщения в соответствии со стандартом Mode S (рис. 8).
Приведенный выше снимок окна команд MATLAB иллюстрирует два сообщения, которые были успешно декодированы по набору данных из 1 млн отсчетов. В нем отображаются шестнадцатеричные символы, образующие сообщение длиной 88 бит и 24‑битную контрольную сумму, а также полученная в результате декодирования информация об идентификаторе воздушного средства, типе сообщения, скорости воздушного средства, его высоте и положении.
MATLAB имеет эффективный язык программирования математических операций и обработки сигналов, позволяющий сравнительно легко решить эту задачу. Программа на языке MATLAB, реализующая обработку отсчетов данных и декодирование сообщений, занимает всего 200 строк. Кроме того, высокий уровень абстракции в MATLAB позволяет легко проверить имеющиеся идеи в интерактивном режиме и быстро найти пригодное решение. Для получения удовлетворительно работающей программы нами было испробовано несколько механизмов синхронизации, порогов обнаружения и шумовых порогов на различных наборах данных.
Программа на языке MATLAB была протестирована на сигналах, принимавшихся от пролетавших поблизости воздушных средств, и результаты декодирования сообщений сверялись с данными, доступными на airframes.org и flightaware.com. Алгоритм и аппаратная реализация продемонстрировали очень хорошие результаты: мы смогли декодировать сообщения от самолетов, находившихся на расстоянии 50 миль.
Путь к практической реализации
Читатели, заинтересованные в более глубоком знакомстве с моделью Simulink, могут найти соответствующие файлы в репозитории GitHub Analog Devices: www.github.com/analogdevicesinc/MathWorks_tools/tree/master/hil_models/ADSB_Simulink/ссылка утрачена/.
MATLAB — это отличная среда для проверки идей и выполнения алгоритмов на ПК, однако если конечной целью является создание программного обеспечения или кода на языке HDL для встраиваемой платформы, в особенности такой, как SoC Zynq, лучшим решением является Simulink. Simulink прекрасно подходит для моделирования нюансов аппаратной реализации в программируемом устройстве. Грамотный маршрут проектирования заключается в применении MATLAB для разработки и верификации алгоритма, трансляции проекта в Simulink и, наконец, его переносе в аппаратную платформу.
К счастью, код на языке MATLAB, реализующий алгоритм приема сигналов, обрабатывает данные отсчет за отсчетом, поэтому преобразовать его в Simulink достаточно несложно. В отличие от 200 строк кода MATLAB модель Simulink является более простой для визуального восприятия (рис. 9).
Как можно видеть на рис. 9, первый шаг при декодировании — вычисление шумового порога и корреляция с преамбулой. Для этих вычислений используются блоки цифровых фильтров. Блок управления синхронизацией, который формирует сигналы синхронизации, сброса и управления для остальной части алгоритма декодирования, реализован при помощи инструмента создания цифровых автоматов Stateflow. Он весьма полезен для моделей, где нужно отделить логику управления от тракта обработки данных. После активации сигналов запуска и синхронизации блок под названием BitProcess начинает принимать на вход отсчеты квадратурных сигналов и определять значения битов данных, а блок CRC_Check рассчитывает контрольную сумму. Разбор сообщения по-прежнему выполняется скриптом на языке MATLAB, запускаемым из модели Simulink.
Более глубокий анализ модели позволяет увидеть особенности, благодаря которым Simulink хорошо подходит для проектирования встраиваемых систем, в особенности для разбиения проекта на функции, ориентированные на реализацию в SoC Zynq, а также для генерации кода на C и языках HDL.
- Simulink имеет превосходную поддержку арифметики с фиксированной точкой, что позволяет создать и протестировать модель, совпадающую с вашим проектом с точностью до отдельных разрядов цифровых данных. Вы можете управлять разрядностью слов и количеством бит дробной части в математических операциях внутри отдельных блоков модели. Наглядным примером служит блок цифрового фильтра, используемый для корреляции с преамбулой (рис. 10). Он позволяет задавать режим округления и поведение при переполнении (Floor, округление к ближайшему меньшему целому, и Wrap, возврат к нулю при достижении максимального значения, являются самыми простыми вариантами для практической реализации в языках HDL). Кроме того, блок позволяет независимо задавать значения длины слова и разрядности дробной части для операций произведения и накопления в фильтре (рис. 11). Вы можете выбрать значение длин слов в соответствии с разрядностью АЦП приемника и подобрать оптимальные параметры для работы с аппаратными умножителями 18×25 бит, входящими в состав элементов DSP48 SoC Zynq.
- Встраиваемые системы зачастую имеют несколько рабочих режимов и разветвленные алгоритмы работы с условным исполнением. Stateflow особенно хорошо подходит для формирования сигналов управления в таких системах. Этот инструмент дает возможность визуального представления логики управления, необходимой для детектирования и декодирования сообщений Mode S. Как можно видеть на рис. 12, логика управления в рассматриваемой модели имеет следующие состояния:
- SyncSearch: поиск преамбулы в отсчетах принимаемого сигнала;
- WaitForT0: поиск начала первого бита сообщения;
- BitProcess: разрешение обработки информационных битов;
- EmptyReg: опустошение регистра контрольной суммы и сравнение принятых битов с рассчитанным значением.
По мере перехода алгоритма детектирования и декодирования из одного состояния в другое блок Stateflow генерирует сигналы, разрешающие обработку информационных битов, управляющие сбросом счетчиков, которые используются в процессе детектирования битов, и регистров контрольной суммы, а также запускающие процесс чтения битов контрольной суммы в конце сообщений Mode S.
Библиотека блоков Simulink дает инженерам возможность работать как на очень высоком уровне абстракции, так и на очень низком уровне детализации. Входящие в состав Simulink высокоуровневые блоки, такие как цифровые фильтры, блоки БПФ и генераторы с цифровым управлением, упрощают проектирование систем обработки сигналов. При необходимости более детального контроля за проектом, например в целях оптимизации быстродействия или занимаемой площади, инженеры могут воспользоваться низкоуровневыми блоками, такими как блоки единичной задержки, логические операторы (например, исключающее ИЛИ) и ключи/мультиплексоры. С помощью таких низкоуровневых блоков построен, в частности, блок вычисления 24‑разрядной контрольной суммы в рассматриваемой модели, который представляет собой регистр сдвига с обратной связью (рис. 13).
Данная модель Simulink представляет собой аппаратно-ориентированную версию разработанного ранее в MATLAB алгоритма обнаружения и декодирования сообщений Mode S. Simulink является полезным инструментом для преодоления разрыва между поведеченским описанием в виде алгоритма, написанного в MATLAB, и кодом, реализуемым во встраиваемой аппаратной платформе. Вы можете вносить в модель Simulink изменения, учитывающие особенности аппаратной реализации, запускать ее на исполнение и проверять, не привели ли внесенные изменения к нарушению работы алгоритма декодирования.
Заключение
Комбинация платформы быстрого создания прототипов систем SDR на базе SoC Zynq и программных продуктов MathWorks дает разработчикам систем связи новый инструмент с широкими возможностями для быстрой проверки своих идей при проектировании радиоприемников. Высокие технические характеристики и свобода программного изменения конфигурации, обеспечиваемые конфигурируемыми широкополосными радиотрансиверами AD9361/AD9364, в совокупности с простотой подключения аппаратных средств к среде MATLAB открывают специалисту доступ к широкому спектру интересных радиосигналов. Инженеры, использующие MATLAB, могут быстро опробовать различные идеи и остановиться на наиболее перспективном решении. Если проект планируется реализовать на встраиваемом процессоре, Simulink позволяет учесть аспекты аппаратной реализации и в конечном итоге сгенерировать код для программирования процессора. Этот маршрут проектирования уменьшает количество навыков, необходимых для разработки радиоприемника, и сокращает период работы от появления концепции до создания работающего прототипа.
В следующей статье цикла мы покажем, как использовать для проверки работоспособности проекта приемника комбинированное программно-аппаратное моделирование (hardware in the loop, HIL), когда сбор сигналов осуществляется посредством реального трансивера, а их обработка — при помощи модели Simulink в хост-процессоре.
1. 960–1164 MHz. National Telecommunications and Information Administration.
2. Technical Provisions for Mode S Services and Extended Squitter. International Civil Aviation Organization.
3. Surveillance and Collision Avoidance Systems. Aeronautical Telcommunications. Vol. IV. Inter-national Civil Aviation Organization.
4. Pu D., Cozma A., Hill T. Four Quick Steps to Production: Using Model-Based Design for Software-Defined Radio. Analog Dialogue, Vol. 49.