Часть 2. Обнаружение и декодирование сигналов Mode S с помощью MATLAB и Simulink

Форма сигнала Automatic Dependent Surveillance Broadcast

Беспроводные сигналы, которые можно обнаружить и расшифровать, окружают нас повсюду, и к ним легко получить доступ с помощью современного программно-определяемого радио (Software-Defined Radio, SDR), например, интегрированных радиочастотных приёмопередатчиков Analog Devices AD9361/AD9364.™1,2 Сигналы Automatic Dependent Surveillance Broadcast (ADS-B) с коммерческих самолётов — это легкодоступный беспроводной сигнал. Его можно использовать для демонстрации процесса быстрого прототипирования на основе AD9361, подключённого к программируемой однокристальной системе Xilinx® Zynq®-7000. Коммерческие воздушные суда используют передатчики ADS-B для передачи диспетчерам данных о своём местоположении, скорости, высоте и идентификационном номере воздушного судна.3 Формат полётных данных определён в спецификации Mode S Extended Squitter Международной организации гражданской авиации (ICAO).4 ADS-B внедряется по всему миру для модернизации систем управления воздушным движением и предотвращения столкновений. Она уже используется в Европе и постепенно внедряется в США.

Стандарт Mode S Extended Squitter содержит подробную информацию о формате радиочастотной передачи и закодированных полях данных. Передача данных с помощью транспондера имеет следующие особенности:

  • Частота передачи: 1090 МГц

  • Модуляция: позиционно-импульсная модуляция (PPM)

  • Скорость передачи данных: 1 Мбит/с

  • Длина сообщения: 56 мкс или 112 мкс

  • 24-битная контрольная сумма CRC

Частота настройки и полоса пропускания вполне соответствуют возможностям радиочастотного приёмопередатчика AD9361, а полученные I/Q-семплы можно обнаружить и декодировать с помощью различных программных средств или встроенных платформ.

В этой статье мы расскажем, как улавливать сигналы Mode S с помощью платформы приёмника на базе AD9361, а затем с помощью MATLAB и Simulink разработаем алгоритм для декодирования сообщений. Конечная цель — внедрить это решение на платформе Zynq SoC, например, в системе на модуле (SOM) PicoZed™ SDR от Avnet.

Receiver Design Challenges

Сообщения Mode S могут быть короткими (56 мкс) или длинными (112 мкс). Короткие сообщения содержат тип сообщения, идентификационный номер воздушного судна и контрольную сумму циклической избыточности (CRC). Длинные сообщения также содержат данные о высоте, местоположении, скорости и статусе полёта. В обоих случаях передача в Mode S начинается с преамбулы длительностью 8 мкс. Эта преамбула используется приёмниками для подтверждения того, что передаётся корректное сообщение, и помогает определить начало передачи битов сообщения. Подробности смотрите на рисунке 1.5

Рисунок 1. Структура сообщения Mode S.
Рисунок 1. Структура сообщения Mode S.

Форма сигнала Mode S довольно проста, но успешное получение и декодирование передаваемых сообщений сопряжено с рядом трудностей.

  1. В эфире обычно присутствуют очень короткие сообщения, чередующиеся с длительными периодами бездействия, и принимаемые сигналы могут быть очень слабыми, если передатчик находится на большом расстоянии от приёмника. Устаревшие сигналы также передаются на частоте 1090 МГц. Приёмнику необходимо использовать преамбулу, чтобы распознавать передачи Mode S как с высокой, так и с низкой амплитудой в перегруженном частотном диапазоне.

  2. В течение интервала длительностью 1 мкс биты могут принимать одно из двух возможных значений. Логическая единица активна в течение первых 0,5 мкс, и неактивна в течение вторых 0,5 мкс. Логический ноль неактивен в течение первых 0,5 мкс, и активен в течение вторых 0,5 мкс. Поскольку принятие решений о значении бита зависит от временных параметров, получателю необходимо использовать преамбулу, чтобы точно определить момент начала битов сообщения.

  3. Сообщение Mode S состоит из 88 информационных битов и 24 битов контрольной суммы. Приёмник должен уметь очищать регистры, принимать решения по битам, вычислять контрольную сумму и считывать регистры контрольной суммы в нужный момент. Для корректной работы приёмника необходим контроль синхронизации.

  4. При embedded разработке процесс декодирования должен выполняться по выборкам. Хранение больших объёмов данных для пакетной обработки — нереалистичный подход для встраиваемых систем.

Сочетание мощного радиочастотного преобразователя, такого как AD9361, и технического вычислительного языка, такого как MATLAB®, значительно упрощает решение задач, связанных с обнаружением и декодированием таких сигналов. Функции MATLAB и Signal Processing Toolbox можно использовать для определения шаблона синхронизации, расчёта уровня шума, принятия решений о битах и вычисления контрольной суммы. Функции условного управления и управления выполнением в MATLAB упрощают логику управления. Доступ к тестовым данным можно получить как из двоичных, так и из текстовых файлов, а также напрямую из платформы AD9361 SDR. Наконец, интерпретируемый характер MATLAB позволяет легко взаимодействовать с данными, пробовать разные подходы и в интерактивном режиме разрабатывать решения.

Моделирование и проверка алгоритмов приёмника Mode S в MATLAB

Читатели, которым интересно следить за исходным кодом MATLAB, могут найти файлы в репозитории Analog Devices на GitHub. Функция ad9361_ModeS.m, а также все остальные исходные коды доступны по ссылке.

Первый шаг в разработке алгоритма приёмника — доступ к исходным данным. Поскольку многие самолёты теперь оснащены транспондерами Mode S, можно просто настроить приёмник на частоту вещания 1090 МГц и принимать местные передачи. В нашем случае мы можем использовать платформу быстрого прототипирования Zynq SDR. Компания Analog Devices предоставляет системный объект MATLAB System object™, который может получать данные с платформы FMCOMMS через Ethernet.6 Системный объект позволяет пользователю выбирать частоту настройки и частоту дискретизации, собирать данные, полученные с помощью радиооборудования, и сохранять их в рабочей области MATLAB в виде переменной MATLAB. Необходимый код очень прост: несколько строк для настройки объекта MATLAB System, ещё несколько строк для настройки FMCOMMS3 и несколько строк для сбора I/Q-семплов и записи их в переменную MATLAB. Пример кода показан на рисунках 2, 3 и 4.

Рисунок 2. Пример кода MATLAB для настройки системного объекта MATLAB.
Рисунок 2. Пример кода MATLAB для настройки системного объекта MATLAB.
Рисунок 3. Пример кода MATLAB для настройки платы FMCOMMS3.
Рисунок 3. Пример кода MATLAB для настройки платы FMCOMMS3.
Рисунок 4. Пример кода MATLAB для сбора данных I/Q и записи их в переменную Rx.
Рисунок 4. Пример кода MATLAB для сбора данных I/Q и записи их в переменную Rx.

Мы использовали код на основе этих команд для захвата нескольких наборов данных с частотой дискретизации 12,5 МГц. Частота 12,5 МГц была выбрана для того, чтобы получить достаточное количество выборок для точной настройки выравнивания преамбулы относительно первого бита сообщения и усреднения части шума в выборках, используемых для определения битов. Результаты захвата одного миллиона выборок показаны на рисунке 5.

Рисунок 5. Пример сбора данных на частоте 1090 МГц.
Рисунок 5. Пример сбора данных на частоте 1090 МГц.

В этом коротком наборе данных есть 14 сигналов, которые выделяются на фоне шума. Из этих 14 сигналов два являются сообщениями Mode S. Остальные — устаревшие или ложные сигналы, которые следует отбросить. Если увеличить масштаб в области с номером выборки 604000, можно увидеть одно из действительных сообщений (см. рис. 6).

Рис. 6. Сообщение в однополярном Mode S.
Рис. 6. Сообщение в однополярном Mode S.

На этом графике хорошо видна преамбула и битовые переходы, обусловленные импульсно-позиционной модуляцией. Даже при таком чистом сигнале для декодирования битов потребуется хорошее зрение и много терпения. Очевидно, что для декодирования этих сообщений нужна автоматизированная программа. MATLAB — хорошее решение для разработки такой программы.

Код MATLAB, который может принимать и декодировать сообщения Mode S, можно описать следующим образом:

  1. Рассчитайте уровень шума и корреляцию преамбулы с помощью функции filter() за короткий промежуток времени. В нашем решении мы используем 75 отсчётов, что эквивалентно 6 мкс.

  2. Когда корреляция преамбулы значительно превышает уровень шума, запускайте логику поиска первого бита сообщения.

    1. Выбор этого порогового значения субъективен. Оно должно быть довольно низким, чтобы обнаруживать слабые сигналы, но достаточно высоким, для избежания множества ложных срабатываний. Мы выбрали значение в 10 раз выше уровня шума в качестве разумного порогового значения, при котором можно обнаружить большинство декодируемых сообщений.

    2. Шаблон преамбулы даёт несколько пиков. Поскольку наилучшее соответствие достигается в течение первых 6 мкс, сохраните первый пик, начните поиск первого бита сообщения и проверьте, появится ли ещё один более высокий пик в течение следующих 3 мкс. Если это произойдёт, сохраните новый пик и возобновите поиск начала первого бита сообщения.

    3. Когда достигнет максимального значения, начните декодирование битов сообщения на 2 мкс позже.

    4. На рисунке 7 зелёным цветом показан уровень шума, а также результат сопоставления идеальной преамбулы с поступающими данными. Над уровнем шума есть несколько пиков, но нас интересует пик с максимальной амплитудой. Выборка для первого бита сообщения происходит через 2 мкс после этого пика.

  3. Для каждого отдельного бита суммируйте амплитуды отсчётов за первые 0,5 мкс и вторые 0,5 мкс. В зависимости от того, какая сумма больше, определяется логический уровень, соответствующий биту — 1 или 0.

  4. Вычислите контрольную сумму после принятия решений по битам. Для этого потребуется управляющая логика, которая будет сбрасывать регистры CRC при поступлении первого бита, вычислять контрольную сумму для 88 бит, а затем очищать регистры CRC для последних 24 битов. Сообщение ADS-B считается действительным, если полученные биты соответствуют контрольной сумме.

  5. Проанализируйте биты сообщения в соответствии со стандартом Mode S (см. рис. 8).

 Рисунок 7. Расчёт уровня шума и корреляции преамбулы.
Рисунок 7. Расчёт уровня шума и корреляции преамбулы.
Рисунок 8. Расшифрованные сообщения Mode S.
Рисунок 8. Расшифрованные сообщения Mode S.

На рисунке выше из командного окна MATLAB показаны два сообщения, которые были успешно декодированы из набора данных, состоящего из миллиона выборок. Отображены шестнадцатеричные символы, составляющие 88-битное сообщение и 24-битную контрольную сумму, а также результаты процесса декодирования: идентификатор воздушного судна, тип сообщения, а также скорость, высота и местоположение воздушного судна.

MATLAB предоставляет мощный язык для математических вычислений и обработки сигналов, что позволяет относительно легко решить эту задачу. Код MATLAB, необходимый для обработки выборок данных и, в конечном счёте декодирования сообщений, невелик — всего 200 строк. Кроме того, интерпретируемый характер MATLAB позволяет в интерактивном режиме тестировать различные идеи и быстро находить подходящее решение. Для создания работающей программы было протестировано несколько механизмов синхронизации, пороговых значений и уровней шума на различных наборах данных.

Этот код MATLAB был протестирован на сигналах от самолётов, летающих в местном воздушном пространстве, а декодированные сообщения сверены с данными таких источников, как airframes.org и flightaware.com. Аппаратное обеспечение и код работают очень хорошо: нам удалось расшифровать передачи с самолётов, находящихся на расстоянии 50 миль (около 80 км - прим. пер.).

Путь к реализации

Читатели, которым интересно следить за работой модели Simulink, могут найти файлы в репозитории Analog Devices на GitHub:

https://github.com/analogdevicesinc/MathWorks_tools/tree/2017b/hil_models/ADSB_Simulink

MATLAB — отличная среда для тестирования проектных идей и алгоритмов на ПК, но если конечная цель — создать программное обеспечение или HDL для использования на встраиваемой платформе, особенно на такой, как система на кристалле Zynq, то хорошим решением будет Simulink. Simulink хорошо подходит для моделирования аппаратных средств, необходимых для программируемого устройства. Оптимальный подход — использовать MATLAB для разработки и проверки алгоритма, а затем перенести проект в Simulink и продолжить разработку до окончательной аппаратной реализации.

К счастью, код MATLAB для этого алгоритма обрабатывает данные по выборкам, поэтому его довольно просто преобразовать в Simulink. В отличие от 200 строк кода MATLAB, модель Simulink проста в отображении и описании (см. рис. 9).

Рисунок 9. Модель алгоритма обнаружения и декодирования Mode S в Simulink.
Рисунок 9. Модель алгоритма обнаружения и декодирования Mode S в Simulink.

На рисунке 9 видно, что первым шагом при декодировании является вычисление уровня шума и корреляции с преамбулой. Для этих вычислений используются блоки цифровых фильтров. Блок управления синхронизацией реализован с помощью Stateflow® — инструмента для создания конечных автоматов, который используется для генерации сигналов синхронизации, сброса и управления для остальной части алгоритма декодирования. Stateflow очень полезен для моделей, в которых нужно отделить логику управления от потока данных. После активации таймера и триггеров блок BitProcess принимает входные I/Q-семплы и вычисляет биты данных, а блок CRC_Check вычисляет контрольную сумму. Анализ сообщений по-прежнему выполняется в скрипте MATLAB на основе этой модели Simulink.

Если углубиться в изучение модели, можно выделить несколько функций, которые делают Simulink подходящим инструментом для разработки встраиваемых систем, особенно для разделения проекта на функции, ориентированные под систему на кристалле Zynq, а также для генерации HDL-кода и кода на языке C.

  1. Simulink отлично поддерживает вычисления с фиксированной запятой, поэтому вы можете создать и протестировать битовую версию своего проекта. Отдельные блоки позволяют задать длину слова и дробную часть для математических операций в вашей модели. Хорошим примером является блок цифрового фильтра, который используется для вычисления корреляции преамбулы (рис. 10). Вы можете задать режим округления и поведение при переполнении для вычислений (Floor и Wrap — самые простые варианты для математических операций в HDL). Кроме того, для операций умножения и сложения в фильтре можно указать разную длину слова и дробную точность (рис. 11). Можно использовать варианты выбора разрядности, соответствующие АЦП приёмника, и задействовать аппаратные умножители, например, 18-битные × 25-битные умножители в блоках DSP48 системы на кристалле Zynq.

  2. Встраиваемые системы часто имеют множество режимов работы и алгоритмов с условным выполнением. Stateflow особенно хорошо подходит для управления этими управляющими сигналами. Stateflow позволяет наглядно представить логику управления, необходимую для обнаружения и декодирования сообщений Mode S. На рисунке 12 ниже показаны состояния логики:

    1. SyncSearch: поиск преамбулы в записанных образцах

    2. WaitForT0: дождитесь начала первого фрагмента сообщения

    3. BitProcess: включить битовую обработку

    4. EmptyReg: очищает регистр контрольной суммы и сравнивает биты с результатом битовой обработки

    По мере того как алгоритм обнаружения и декодирования переходит из одного состояния в другое, блок Stateflow генерирует сигналы, которые запускают обработку битов, сбрасывают счётчики битовых решений и регистры контрольных сумм, а также считывают биты контрольной суммы в конце сообщений в Mode S.

  3. Библиотеки блоков Simulink позволяют инженерам работать как на очень высоком, так и на очень низком уровне детализации. В Simulink есть высокоуровневые блоки, такие как цифровой фильтр, быстрое преобразование Фурье и генератор с числовым управлением, которые упрощают создание схем обработки сигналов. Если требуется более точное управление схемой, например, для оптимизации скорости или площади, инженеры могут использовать низкоуровневые блоки, такие как блоки задержки, логические операторы (например, «исключающее ИЛИ») и переключатели. 24-битная контрольная сумма в этой модели представляет собой регистр сдвига с обратной связью, построенный с использованием этих низкоуровневых блоков (рис. 13).

Рис. 10. Блок цифрового фильтра Simulink, используемый для корреляции преамбулы, 12-битные типы данных.
Рис. 10. Блок цифрового фильтра Simulink, используемый для корреляции преамбулы, 12-битные типы данных.
Рисунок 11. Настройки типа данных с фиксированной запятой.
Рисунок 11. Настройки типа данных с фиксированной запятой.
Рисунок 12. Диаграмма состояний для декодирования сообщений в Mode S.
Рисунок 12. Диаграмма состояний для декодирования сообщений в Mode S.
Рисунок 13. Регистр сдвига с обратной связью для вычисления контрольной суммы в Mode S.
Рисунок 13. Регистр сдвига с обратной связью для вычисления контрольной суммы в Mode S.

Эта модель Simulink представляет собой аппаратно-ориентированную версию алгоритма MATLAB, который обнаруживает и декодирует сообщения в Mode S. Simulink — полезный инструмент для преодоления разрыва между поведенческим алгоритмом, написанным в MATLAB, и кодом для реализации на встроенном оборудовании. Вы можете добавить в модель Simulink аппаратно-ориентированные элементы, запустить модель и убедиться, что внесённые изменения не нарушают работу алгоритма декодирования.

Заключение

Сочетание платформы быстрого прототипирования Zynq SDR и программного обеспечения MathWorks даёт инженерам в области связи новый гибкий способ быстрого создания прототипов беспроводных приёмников. Благодаря высокой степени программируемости и производительности гибкого широкополосного радиочастотного приёмопередатчика AD9361/AD9364, а также простоте подключения между аппаратным обеспечением и средой MATLAB, инженеры могут работать с самыми разными интересными беспроводными сигналами. С помощью MATLAB инженеры могут быстро опробовать множество проектных идей и выбрать наиболее перспективное решение. Если конечная цель разработки — встраиваемый процессор, то Simulink — это инструмент, с помощью которого инженеры могут дорабатывать проект с учётом особенностей аппаратного обеспечения и в итоге создавать код для программирования процессора. Такой подход сокращает количество специалистов, необходимых для разработки беспроводного приёмника, и ускоряет цикл разработки от концепции до рабочего прототипа.

В следующей статье этой серии мы расскажем, как использовать аппаратно-программный комплекс (HIL) для проверки конструкции приёмника, захватывая сигналы с целевого приёмопередатчика и запуская на хосте модель системы обработки сигналов в Simulink для верификации.

Ссылки

1 AD9361. Analog Devices.

2 AD9364. Analog Devices.

3 960-1164 MHz. National Telecommunications and Information Administration.

4 Technical Provisions for Mode S Services and Extended Squitter. International Civil Aviation Organization.

5 Surveillance and Collision Avoidance Systems. Aeronautical Telcommunications, Volume IV. International Civil Aviation Organization.

6 Pu, Di, Andrei Cozma, and Tom Hill. “Four Quick Steps to Production: Using Model-Based Design for Software-Defined Radio.” Analog Dialogue, Volume 49.

Ссылки на исходный код и модели

MATLAB Mode S Decoding Algorithm: https://github.com/analogdevicesinc/MathWorks_tools/tree/2017b/hil_models/ADSB_MATLAB

Simulink Mode S Decoding Models: https://github.com/analogdevicesinc/MathWorks_tools/tree/2017b/hil_models/ADSB_Simulink

Комментарии (0)