Бөлісу құралы:


Руководство. Общие сведения о виртуальной rf (vRF) с помощью демонстрации Aqua с помощью GNU Radio

В этом руководстве: данные из общедоступного спутника, данные из спутника NASA Aqua перемежаются с помощью управляемого модема, то есть необработанный сигнал RF, полученный от спутника Aqua наземным станцией, передается через модем, управляемый Azure Orbital. Выходные данные этого модема, который находится в виде байтов, затем передаются на виртуальную машину пользователя. В рамках шага "Настройка профиля контакта для общедоступного спутникового канала вниз" для конфигурации demodulation было установлено значение Aqua Direct Broadcast, что включено и настроено управляемого модема для демонстрации или декодирования сигнала RF, полученного от Aqua. Используя концепцию vRF, управляемый модем не используется, а необработанный сигнал RF отправляется на виртуальную машину пользователя для обработки. Эта концепция может применяться как к ссылке вниз, так и к связи вверх, но в этом руководстве мы рассмотрим процесс ссылки вниз. Мы создадим vRF на основе GNU Radio, который обрабатывает необработанный сигнал RF и выступает в качестве модема.

Из этого руководства вы узнаете, как выполнить следующие задачи:

  • Ознакомьтесь с ограничениями и компромиссами использования vRF.
  • Настройте профиль контакта через vRF вместо управляемого модема.
  • Обрабатывайте данные из Aqua (в виде необработанного RF) с помощью GNU Radio в качестве модема, используя как автономную или разработку, так и настройку в режиме реального времени.

Необходимые компоненты

Общие сведения об ограничениях и компромиссах использования vRF

Прежде чем ознакомиться с руководством, важно понять, как работает vRF и как он сравнивается с использованием управляемого модема. При использовании управляемого модема весь физический уровень (PHY) происходит в Azure Orbital, то есть сигнал RF немедленно обрабатывается в ресурсах Azure Orbital, а пользователь получает только данные байты, созданные модемом. Выбрав vRF, нет управляемого модема, и необработанный сигнал RF передается пользователю с оцифроватора наземных станций. Такой подход позволяет пользователю запускать собственный модем или записывать сигнал RF для последующей обработки.

Преимущества vRF включают возможность использовать модемы, к которым Azure Orbital не поддерживается или имеет доступ. vRF также позволяет выполнять один и тот же сигнал RF через модем при попытке различных параметров оптимизировать производительность. Этот подход можно использовать для уменьшения количества проходов спутников, необходимых во время тестирования и ускорения разработки. Из-за характера необработанных сигналов RF размер пакета или файла обычно больше байтов, содержащихся в этом сигнале RF; обычно от 2 до 10x больше. Дополнительные данные означает, что пропускная способность сети между виртуальной машиной и Azure Orbital может быть ограничением для vRF.

В этом руководстве вы узнаете, как работает vRF. В конце этого руководства мы включим несколько сведений о RF и оцифровке, интересующих пользователя vRF.

Роль DIFI в vRF

Наземные станции Azure Orbital состоят из дигитайзеров, использующих DIFI для отправки и получения цифровых сигналов RF. Протокол ПАКЕТОВ DIFI, технически называемый "IEEE-ISTO Std 4900-2021: Digital IF Interoperability Standard", определяет интерфейс плоскости данных, предназначенный для передачи и получения цифровых данных IF (например, примеров IQ) и соответствующих метаданных по стандартным IP-сетям. Несмотря на то что DIFI является стандартом IF, примеры IQ в базовой полосе также можно передавать с помощью DIFI, как и в Azure Orbital. Основной вариант использования пакетов DIFI заключается в создании интерфейса между вспомогательными цифровыми системами наземных станций (транссиверами) и программными модемами, что обеспечивает взаимодействие и борьбу с блокировкой поставщика, которая страдает от спутниковой промышленности.

Протокол пакетов DIFI содержит два основных типа сообщений: пакеты данных и контекстные пакеты. Из-за устаревших аппаратных причин существует две разные версии контекстных пакетов. Наземные станции Azure Orbital используют актуальные пакеты контекста (DIFI версии 1.1) для сигналов X-Band и устаревший формат для сигналов S-Band. Если вы используете пакет GR-difi GNU Radio, необходимо выбрать формат 108-байтов для X-Band и 72-байтового формата для S-band. Для vRFs, отличных от GNU Radio, необходимо убедиться, что для контекстных пакетов используется правильная версия DIFI, здесь можно найти версию 1.1, а устаревшую версию можно вывести из этого раздела кода. Дополнительные рекомендации включены в vRF в справочнике по AOGS в конце этого руководства.

Шаг 1. Использование AOGS для планирования контакта и сбора данных Aqua

Сначала мы удаляем управляемый модем и записываем необработанные данные RF в pcap-файл. Выполните действия, перечисленные в руководстве. Данные по ссылке из общедоступного спутника NASA Aqua, но на этапе настройки профиля контакта для миссии нисходящей связи Aqua оставьте пустым конфигурацию демодуляции и выберите UDP для протокола. Наконец, в конце вместо socat команды (которая фиксирует TCP-пакеты), выполните команду sudo tcpdump -i eth0 port 56001 -vvv -p -w /tmp/aqua.pcap , чтобы записать пакеты UDP в pcap-файл.

Примечание.

Следующие три изменения необходимы для учебника: данные downlink из общедоступного спутника NASA Aqua:

  • Конфигурация демонстрации: оставьте пустым
  • Протокол: выбор UDP
  • Шаг 8 и 9. Вместо этого используйте команду sudo tcpdump -i eth0 port 56001 -vvv -p -w /tmp/aqua.pcap

После передачи спутника у вас должен быть файл /tmp/aqua.pcap размером 10–20 ГБ (в зависимости от максимального повышения прав). Этот файл содержит пакеты DIFI, содержащие необработанный сигнал RF, полученный наземным станцией, в виде примеров IQ.

Шаг 2. Извлечение примеров IQ из пакетов DIFI

Далее мы извлекаем образцы IQ и сохраняем их в более традиционной форме; двоичный IQ-файл. Следующие действия можно выполнить на любой виртуальной машине или компьютере с копией созданного файла aqua.pcap. Эти действия включают использование короткого скрипта Python, поддерживаемого консорциумом DIFI, для извлечения примеров IQ из пакетов DIFI UDP в IQ-файл.

  1. Скачайте или скопируйте следующий код в новый скрипт Python.
  2. Измените, filename чтобы соответствовать месту, где вы сохранили pcap (/tmp/aqua.pcap).
  3. Запустите скрипт Python с помощью python3 difi_to_binary_iq.pyи создайте новый файл в том же каталоге, что и pcap, с расширением .cs8 . Этот файл представляет собой двоичный IQ-файл, содержащий оцифрованные примеры RF в виде 8-разрядных целых чисел и ничего другого. Выполнение скрипта занимает некоторое время, и при запуске файла становится больше. После завершения скрипта файл примерно тот же размер, что и pcap-файл. Вы можете остановить скрипт перед завершением (с помощью control-C) и продолжить работу с руководством; Всю длительность контакта не требуется для остальной части руководства.
  4. (Необязательно) Если вы хотите визуализировать сигнал, установите Инспекторум с помощью инструкции "Проверка", используя https://github.com/miek/inspectrum/wiki/Build#building-on-debian-based-distros ( inspectrum /tmp/aqua.pcap.cs8 используя путь к новому .cs8 файлу). После того как в графическом интерфейсе проверяющего элемента можно настроить Power Max и Power Min просмотреть полный динамический диапазон сигнала.

Если вы также хотите использовать примеры IQ в формате float32 вместо int8 (некоторые программы позволяют загружать только формат float32), можно использовать следующий фрагмент кода Python:

import numpy as np
samples = np.fromfile('/tmp/aqua.pcap.cs8', np.int8) / 127.0
samples = samples.astype(np.float32)
samples.tofile('/tmp/aqua.pcap.cf32')

Мы будем использовать версию float32 для следующего шага, так как она упрощает потокограф GNU.

Шаг 3. Демонстрация сигнала Aqua в GNU Radio

Далее мы создадим фактический модем vRF, основанный на GNU Radio, используемый для демонстрации сигнала Aqua.

Logo for GNU Radio Free Software Project.

GNU Radio — это бесплатный набор средств разработки программного обеспечения с открытым исходным кодом, который предоставляет блоки обработки сигналов и многие примеры приложений для обработки цифровых сигналов (DSP). Его можно использовать с легко доступным оборудованием с низкой стоимостью RF для создания программно-определенных радиосвязей или без оборудования в среде моделирования, подобной моделированию. GNU Radio широко используется в исследованиях, промышленности, академии, государственных и хоббиистских средах для поддержки исследований беспроводной связи и реальных радиосистем. В этом руководстве мы используем GNU Radio для демонстрации Aqua (т. е. GNU Radio выступает в качестве модема).

Хотя GNU Radio можно использовать в режиме без головы, в этом руководстве мы используем графический интерфейс GNU Radio (то есть классический интерфейс), поэтому необходимо скопировать на виртуальную машину с переадресациям /tmp/aqua.pcap.cf32 X11 или компьютером с настольным компьютером Ubuntu 20/22. Команда scp может использоваться для копирования файла из виртуальной машины в Azure на локальный компьютер разработки.

Установка GNU Radio

Если вы используете Ubuntu 22, выполните команду sudo apt-get install gnuradio. Если вы используете Ubuntu 20, используйте следующие команды для установки GNU Radio:

sudo add-apt-repository ppa:gnuradio/gnuradio-releases
sudo apt-get update
sudo apt-get install gnuradio python3-packaging

Убедитесь, что gnu Radio установлен правильно и что графика работает с помощью gnuradio-companion; окно должно всплывать, которое выглядит следующим образом:

Screenshot of the GNU Radio desktop GUI.

Если дерево блоков справа не отображается, его можно отобразить с помощью значка блочного стекла в правом верхнем углу.

Запуск блок-графа Aqua

Приложение GNU Radio называется блок-графом, и обычно оно обрабатывает или создает сигнал RF. Начальный блок-граф для использования можно скачать здесь. Откройте этот .grc файл в GNU Radio и увидите следующий блок-граф:

Screenshot of the GNU Radio Aqua flowgraph.

Примечание.

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

Блок-граф начинается с чтения в IQ-файле, преобразовав его из чередуемых 8-разрядных целых чисел в сложный тип данных GNU Radio, а затем он повторно перезагрегает сигнал для перехода от исходного 18,75 МГц до 15 МГц, что является целым числом выборок на символ. Это изменение может быть немного запутано, так как в профиле контакта мы указали пропускную способность 15 МГц. Как описано в конце этого руководства, для X-Band сигнализатор использует частоту выборки, которая составляет 1,25 раза указанной пропускной способности. Оказывается, что в этом блок-графе мы хотим частоту выборки 15 МГц, чтобы у нас было ровно два образца на символ; поэтому мы должны перезапустить от 18,75 МГц до 15 МГц. Далее у нас есть блок автоматического контроля получения (AGC), чтобы нормализовать уровень мощности сигнала. Корневой фильтр косинуса (RRC) выступает в качестве соответствующего фильтра. Цикл Костас выполняет синхронизацию частоты, чтобы удалить любые небольшие смещения частоты, вызванные ошибкой осциллятора или несовершенным исправлением Doppler. Следующие три блока используются, так как Aqua использует смещение QPSK (OQPSK) вместо обычного QPSK. Затем синхронизация символов выполняется таким образом, чтобы символы OQPSK были образцы в их пиковых числах. Мы можем визуализировать эту выборку QPSK с помощью блока приемника созвездий (показан пример выходных данных). Оставшаяся часть блок-графа пересекает реальные и мнимые части и сохраняет их как int8 (chars/bytes), которые представляют мягкие символы. Хотя он может преобразовать эти мягкие символы в 1 и 0, более поздние преимущества обработки от полного значения символов.

Перед запуском блок-схемы дважды щелкните блок источника файла и обновите путь, соответствующий месту сохранения /tmp/aqua.pcap.cf32. Нажмите кнопку воспроизведения в верхней части, чтобы запустить блок-схему. Если предыдущие шаги были успешными, и ваш контакт Aqua был успехом, вы увидите следующую плотность спектральной мощности (PSD) и график IQ:

Screenshot of the GNU Radio Aqua Power Spectral Density (PSD).

Screenshot of the IQ plot of the Aqua signal.

Ваш может отличаться, в зависимости от силы полученного сигнала. Если графический интерфейс не появился, проверка выходные данные GNU Radio в нижнем левом углу для ошибок. Если графический интерфейс отображается, но напоминает горизонтальную шумную линию (без горба), это означает, что контакт на самом деле не получил сигнал Aqua. В этом случае дважды проверка, что автозапуск включен в профиле контакта и правильно введена частота центра.

Время, которое требуется для завершения GNU Radio, основано на том, сколько времени вы позволяете запускать скрипт pcap_to_iq в сочетании с питанием компьютера или ЦП виртуальной машины. При выполнении блок-графа выполняется демонстрация сигнала RF, хранящегося /tmp/aqua.pcap.cf32 в файле и создании файла /tmp/aqua_out.bin, который содержит выходные данные модема. Вы можете скопировать этот .bin файл с виртуальной машины.

Мы завершаем это руководство здесь. Если вы хотите декодировать байты в образы, вы можете использовать средства НАСА или открытый код средства, такие как altillimity/X-Band-Decoders.

(Необязательно) Шаг 4. Запуск динамического потока радиографа GNU

В этом руководстве до этой точки представлена часть разработки и тестирования для создания vRF. Мы преобразуем этот потокограмм GNU Radiograph, чтобы он был запущен в реальном времени на виртуальной машине, напоминая истинный модем vRF.

Обработка входных данных

Ранее мы вручную преобразовали pcap пакета DIFI в двоичный IQ-файл, а затем загружали этот двоичный IQ-файл в GNU Radio с блоком источника Fink. Мы можем упростить потокограмму с помощью блока в gr-difi (поддерживаемом Корпорацией Майкрософт) для получения пакетов DIFI в GNU Radio! Этот добавленный блок требует установки модуля GNU Radio вне дерева (OOT), который похож на подключаемый модуль для GNU Radio:

sudo apt-get install python3-pip cmake liborc-dev doxygen
sudo pip install pytest pybind11
cd ~
git clone https://github.com/DIFI-Consortium/gr-difi
cd gr-difi
mkdir build
cd build
cmake -DCMAKE_FIND_ROOT_PATH=/usr ..
make -j4
sudo make install
sudo ldconfig

После выполнения этих действий вы сможете повторно открыть GNU Radio и просмотреть новые блоки (ИСТОЧНИК DIFI и приемник DIFI), перечисленные в дереве блоков. В блок-схеме, используемой во время предыдущего раздела, выполните следующие действия:

  1. Замените блок источника файла блоком источника DIFI
  2. Дважды щелкните блок источника DIFI, чтобы изменить его параметры
  3. Исходный IP-адрес должен быть IP-адресом интерфейса eth0 виртуальной машины.
  4. Порт должен иметь значение 56001, как и в шаге tcpdump.
  5. Задайте для номера потока DIFI значение 0. Все остальные параметры можно оставить по умолчанию

Если вы хотите протестировать этот блок-граф на компьютере разработки, вам потребуется средство, например udpreplay , чтобы воспроизвести pcap, который мы записали. В противном случае можно подождать, пока блок-граф не будет использоваться в режиме реального времени на виртуальной машине, подключенной к Azure Orbital. Это ограничение является одной из причин, которые помогают записывать сигнал во время этапа разработки и тестирования vRF.

Обработка выходных данных

Вы можете оставить приемник файлов в конце и получить записанный файл каждый проход, но многие приложения требуют потоковой передачи байтов из модема. Один из вариантов — использовать блок приемника TCP вместо приемника файлов. Блок приемника TCP можно настроить в режиме сервера или клиента в зависимости от того, какая сторона должна выполнять начальное подключение. Присвойте типу входных данных значение Byte, а приемник TCP передает байты через необработанные полезные данные TCP.

Приемник ZMQ PUB — это еще один вариант, который является библиотекой обмена сообщениями, которая находится на основе TCP или межпроцессного взаимодействия (IPC) для более сложного поведения, например PUB/SUB.

Если вы оставляете его в качестве приемника файлов, рекомендуется добавить несколько строк Python в конце блок-графа (после его завершения), копирующий созданный файл в новое расположение.

Запуск блок-графа в режиме без головы

Есть хороший шанс, что виртуальная машина, получающая поток Azure Orbital, не поддерживает среду рабочего стола, которая приводит к сбою GNU Radio. Необходимо настроить этот блок-граф, чтобы избежать использования графических интерфейсов.

  1. Изменение блока "Параметры" в левом верхнем углу
  2. В разделе "Параметры создания" выберите "Нет графического интерфейса"
  3. В разделе "Параметры запуска" выберите "Запуск до завершения"
  4. Нажмите кнопку "ОК"

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

Screenshot of GNU Radio running in Headless Mode.

Запуск динамического блок-графа

После настройки блок-графа с источником DIFI и в режиме без головы можно запустить блок-граф в реальном времени на виртуальной машине. В GNU Radio Companion (GRC) при каждом нажатии кнопки воспроизведения файл .py создается в одном каталоге. Этот скрипт Python необходимо скопировать на виртуальную машину. Если gnu Radio и gr-difi установлены правильно, вы должны иметь возможность запустить скрипт Python с помощью python yourflowgraph.py и ожидает, пока поток DIFI из Azure Orbital будет запущен. Вы можете добавить любой код Python, который вы хотите добавить в этот скрипт Python, например копирование результирующего файла в новое расположение каждый проход. Примечание. При повторном создании скрипта Python в GRC этот новый код Python должен быть добавлен вручную.

Если описанные выше действия выполнены, вы успешно создали и развернули связь вниз на основе GNU Radio!

Ссылка на VRF в AOGS

В этом разделе описано несколько сведений о rf/digitizer, которые интересуют пользователя или конструктора vRF.

На стороне нисходящей связи vRF получает сигнал от Azure Orbital. Поток DIFI отправляется на виртуальную машину пользователя Azure Orbital во время вспомогательного контакта. Ожидается, что пользователь будет записывать поток в режиме реального времени, записывая его или обрабатывая в реальном времени. Примеры включают использование tcpdump, socat или непосредственно приема в модем. Далее приведены некоторые спецификации, связанные с тем, как наземные станции Azure Orbital получают и обрабатывают сигнал:

  • Частота центра указана в профиле контакта
  • Пропускная способность сигнала (BW) задана в профиле контакта, а частота выборки — 1.25*BW для X-Band и 1.125*BW для контактов S-Band.
  • Поток DIFI использует 8-разрядную глубину (2 байта для примера IQ)
  • Режим получения дигитайзера установлен для использования автоматического управления получением (AGC) с целевым объектом питания -10 dBFS
  • Не используется спектральная инверсия
  • Смещение частоты не используется
  • Размер MTU пользовательской виртуальной машины должен иметь значение 3650 для X-Band и 1500 для S-Band, что является максимальным размером пакета, поступающим из Azure Orbital.

На стороне связи пользователь должен предоставить поток DIFI в Azure Orbital на протяжении всего прохода для передачи Azure Orbital. Следующие примечания могут быть заинтересованы в конструкторе vRF вверх по ссылке:

  • Частота центра указана в профиле контактов
  • Частота выборки сигнала устанавливается через поток DIFI (несмотря на то, что пропускная способность предоставляется в рамках профиля контакта, это исключительно для конфигурации сети под капотом).
  • Битовая глубина устанавливается через поток DIFI, но Azure Orbital ожидает 8 битов
  • Идентификатор потока DIFI должен иметь значение 0.
  • Как и в нижней связи, размер MTU должен быть 1500 для S-Band и до 3650 для X-Band (ваш выбор)
  • Не используется спектральная инверсия
  • Смещение частоты не используется

Следующие шаги

Сведения о том, как легко развернуть подчиненные компоненты, необходимые для получения и обработки данных наблюдения за землей с помощью орбитальной станции Azure, см. в следующих статье: