Русский
Русский
English
Статистика
Реклама

Sdr

Интернет вещей по-русски. Канальный уровень OpenUNB. Общие положения и адресация устройств

05.02.2021 12:22:10 | Автор: admin

Канальный уровень OpenUNB сильно отличается от всего, что мы видели. Так получилось из-за заложенной в OpenUNB возможности только односторонней передачи: от оконечного устройства к сети. Тем не менее, разработчики вложили много усилий в создание протокола канального уровня, чтобы устройства и сеть OpenUNB не потеряли простоту, энергоэффективность и безопасность. Давайте посмотрим, что у них получилось.


Так как канальный уровень OpenUNB довольно сложен, я решил разбить его на подсистемы и описывать их в отдельных статьях. Кстати, приведу список всех наших статей об OpenUNB:



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


Канальный уровень отвечает за механизм управления доступом устройств к радиоканалу (Media Access Control, MAC) и механизм управления логической связью (Logical Link Control, LLC) между устройствами и сервером сети.


Канальный уровень определяет:


  1. механизм множественного доступа устройств к радиоканалу;
  2. механизм повторных передач пакетов;
  3. формат пакетов канального уровня и алгоритм их формирования;
  4. схему адресации устройств;
  5. процедуру активации (аутентификации и регистрации) устройств на сервере;
  6. механизм криптографической защиты передаваемых данных (шифрование, контроль целостности и подлинности).

Сегодня мы рассмотрим первые четыре пункта списка.


Для обеспечения множественного доступа устройств к радиоканалу в сети используется неслотированная частотная ALOHA. Частота передачи каждого пакета должна выбираться устройством случайно из всей полосы рабочих частот приема шлюзов. В случае если передача пакета осуществляется с повторами, для каждой очередной передачи должна выбираться случайная частота отличная от частот, выбранных для предыдущих передач пакета.


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


Формат пакета OpenUNB по уровням:


image


Как видно из рисунка выше, канальный уровень добавляет к пользовательским данным шесть байт (что, прошу заметить, очень мало). Далее сообщение канального уровня передается физическому, который добавляет преамбулу и помехоустойчивое кодирование (это описано ранее здесь и здесь).


В эти шесть байт входят адрес (DevAddr) и проверочное слово (MIC). Обе эти части имеют одинаковый размер (три байта) и простые, но тщательно отточенные разработчиками свойства.


Слово DevAddr это временный адрес устройства. В лирическом отступлении можно отметить, что мало можно найти протоколов IoT, в которые внедрена концепция временных адресов, хотя в сотовой связи она присутствует начиная со стандартов 2G. В OpenUNB временный адрес (меняется каждые 4 часа) формируется криптографически из базового ключа K0, привязанного к DevID, назначение которого имеет необыкновенную гибкость. Во-первых, DevID может не быть уникальным. Пользователь даже может назначить DevID случайным образом. Уникальность DevID придаст назначение соответствующего ему базового секретного ключа K0. Во-вторых, нет даже требований к длине DevID. Стандарт требует иметь его длину не менее 4 байт, но рекомендует длину 16 байт. В-третьих, такая гибкость приводит к возможности назначать DevID в разных сетях децентрализовано, не сверяясь друг с другом.


Если говорить точно, временный адрес DevAddr вырабатывается так:


$ DevAddr = MSB24 (ECB (Ka, 0x01 || Ne || 0^{n-32})),$


где Ne номер эпохи (время), а Ka ключ активации, который получается так:


$ Ka = CTR (K0, Na || 0^{n/2-16}, 0^k),$


где Na номер активации, а K0 базовый секретный ключ.


Процедуры ECB и CTR здесь это криптопреобразования "режим простой замены" и "режим гаммирования", соответственно. Эти процедуры определены в стандартах шифрования ГОСТ.


Таким образом, если считать криптопреобразования стойкими, а ключ K0 секретным, связь между DevID и DevAddr экономически оправданным способом установить не получится. Поэтому третья сторона не может сопоставить пакеты в эфире с конкретным устройством IoT, не зная ключ K0. Какой еще протокол IoT может похвастаться таким удивительным свойством?!


Слово MIC, проверочное слово, уникально. Оно имеет по меньшей мере две ипостаси: это имитовставка и слово контроля целостности в одном лице. За счет этого двойного назначения получается немалая экономия в объеме данных, а значит и в энергии, потребляемой устройством. Есть еще третья функция MIC, скрытая от неискушенного читателя. Это конкретизация соответствия DevAddr и DevID. Очевидно, ввиду малости длины DevAddr, это поле не будет уникальным для всех DevID, по крайней мере это не гарантируется криптопреобразованиями. Но существует связь DevAddr и MIC, которая определяется секретным ключом K0 и другими параметрами. Если говорить точно, то чудо-слово MIC получается так:


$MIC = CMAC24 (Km, P),$


где значение вектора P зависит от длины блока n и длины поля MACPayload. Пусть len
однобайтная целочисленная беззнаковая переменная, равная длине полезных данных
MACPayload в битах (переменная len может принимать значения 16 или 48), тогда:


если len = 48 и n = 64, то


$P = DevAddr || MACPayload || Nn || 0^{2n-len-48} || len;$


в остальных случаях


$P = DevAddr || MACPayload || Nn || 0^{n-len-48} || len.$


Процедура CMAC24 здесь это криптопреобразование "режим выработки имитовставки" согласно ГОСТ.


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


Про DevID

Идентификатор устройства DevID записывается в энергонезависимую память устройства, а также хранится на сервере сети. Идентификатор DevID должен иметь длину не менее 4 байт, а его формат может быть различным (например, в разных сетях может использоваться свой формат идентификаторов). Рекомендуется использовать идентификаторы DevID длиной не менее 128 бит.


Устройства, работающие в разных сетях, могут иметь одинаковые идентификаторы DevID. Таким образом, назначение идентификаторов DevID в каждой сети может осуществляться независимо. Например, если идентификаторы DevID назначают операторы сети, то им не требуется договариваться друг с другом об уникальности идентификаторов DevID для устройств из разных сетей. Рекомендуется, чтобы устройства, работающие в одной сети, имели уникальные идентификаторы DevID. Например, их может централизованно назначать оператор сети. Однако допустимо, чтобы устройства, работающие в одной сети, имели совпадающие идентификаторы DevID. Например, пользователи могут сами назначать устройствам случайные идентификаторы DevID и сообщать их на сервер сети при активации устройства. Алгоритм разрешения ситуаций, когда несколько устройств из одной или разных сетей имеют одинаковые идентификаторы DevID, представлен в стандарте.


Про DevAddr

Временный адрес устройства DevAddr имеет фиксированную длину 3 байта. Значение временного адреса устройства DevAddr изменяется в процессе работы устройства и передается в пакетах канального уровня:


  • начальное значение временного адреса DevAddr0 = CRC24 (DevID). Этот адрес передается только в служебных пакетах активации, которые отправляются при активации устройства для его аутентификации и регистрации на сервере сети;
  • для всех последующих пакетов, передающих полезные данные уровня приложений, устройство использует временный адрес DevAddr, который пересчитывается каждую эпоху (раз в EPOCH_DURATION) с помощью функции криптографического преобразования.

Важно отметить, что используемая схема вычисления временных адресов DevAddr не гарантирует их уникальность. Разрешение возможных коллизий временных адресов разных устройств осуществляется на сервере сети при расшифровании принятых пакетов на этапе проверки имитовставки MIC.


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


Как обычно, теоретическая проработка у нас сразу вытекает в практику. Исходники криптопреобразований для оконечного устройства уже можно найти на Github.


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


Пока писалась эта статья, пришла отличная новость: стандарт опубликован на сайте Сколтеха. Теперь полная картина не ускользнет от вас.

Подробнее..

Интернет вещей по-русски. Процедура активации OpenUNB

28.02.2021 12:13:00 | Автор: admin

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


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


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


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


В OpenUNB активация устройства производится пользователем. Также необходим доверенный канал между пользователем и сервером сети. Схема взаимодействия представлена ниже:


image


Как видно из схемы, пользователь должен иметь некоторое мобильное устройство с программой и находиться рядом с устройством OpenUNB.


В стадии "запрос на активацию" пользователь должен по служебному каналу отправить на сервер запрос на активацию, в котором передается идентификатор DevID активируемого конечного устройства. Если активация возможна, то сервер сообщает об этом. Далее пользователь делает "запуск процедуры активации на устройстве". Это может быть пакет по радио-интерфейсу или другому, удобному. Это также может быть нажатие кнопки "активация" или просто включение питания устройства. После этого события устройство передает "служебный пакет активации", в котором содержится номер текущей активации.


Если сервер правильно (совпадает имитовставка MIC) получает сообщение обо активации от устройства по каналу OpenUNB, то он индицирует пользователю "подтверждение успешной активации". После этого пакеты данных могут передаваться защищенно.


Рассмотрим подробно процедуру со стороны устройства и со стороны сервера.


Со стороны устройства процедура выглядит так:


  1. проверяется текущее значение счетчика активаций Na. Если счетчик активаций уже достиг максимально возможного значения, то данное устройство больше не может использоваться, и выключается;
  2. увеличивается значение счетчика активаций: Na = Na + 1;
  3. вырабатывается ключ активации Ka;
  4. вырабатывается ключ расчета имитовставки Km для эпохи Ne = 0;
  5. формируется служебный пакет активации, в поле MACPayload которого содержится текущее значение счетчика активаций Na, а в качестве адреса указывается DevAddr0 = CRC24(DevID). При этом поле MACPayload передается в открытом виде (не шифруется), а поле имитовставки MIC рассчитывается на ключе Km для номера Nn = 0. Сформированный служебный пакет активации должен быть отправлен MAX_PKT_TX_NUM раз подряд для повышения вероятности его доведения;
  6. устройство считает активацию успешно завершенной и может передавать пакеты полезных данных.

Напомним формат пакета OpenUNB:
image


Сервер по приему пакета активации ищет адрес из пакета в списке адресов активированных устройств. Для каждого из найденных совпадений:


  1. сохраняется полученное значение счетчика активаций устройства Na. Если для данного устройства ранее уже осуществлялась успешная активация, то сервер должен дополнительно проверить, что текущее значение Na больше чем значение Na, полученное при предыдущей успешной активации. Если эта проверка завершается неуспешно, то сервер переходит к следующему найденному устройству;
  2. вырабатывается ключ активации Ka;
  3. вырабатывается ключ расчета имитовставки Km для эпохи Ne = 0;
  4. для пакета проверяется совпадение имитовставки MIC на ключе Km для номера Nn = 0.

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


Детали работы процедур активации OpenUNB смотрите в первоисточнике на сайте Сколтеха.


Реализованные процедуры активации и другие процедуры безопасности доступны в исходниках здесь.


Наш бессменный мастер Интернета вещей deef137 всегда на связи и готов помочь с вопросами по коду.

Подробнее..

Интернет вещей по-русски. Безопасность в OpenUNB

08.03.2021 14:16:44 | Автор: admin

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


Для иллюстрации актуальности я приведу в пример протокол CRISP, кстати, отечественной разработки. Наличие такой разработки, доведенной уже до статуса методических рекомендаций Технического комитета по стандартизации "Криптографическая защита информации", подтверждает практическую непригодность обычных "тяжелых" протоколов безопасности для Интернета вещей. Они оказываются слишком ресурсоемкими.


Различных радио-протоколов Интернета вещей сейчас наплодилось огромное множество, но в сфере LPWAN не везде разработчики протокола передачи берут на себя тяжелую ношу защиты информации. Можно долго спорить, нужно ли вообще включать защиту в радио-протокол LPWAN, а не перекладывать ее на вышележащие уровни, но если предложенная схема хороша, то стоит надеяться на большую вероятность внедрения стандарта в индустрию. Главный тезис: вообще без защиты в Интернете вещей сейчас уже нельзя. И она должна быть на уровне.


Так же рассуждали и разработчики OpenUNB, ставя во главу угла энергоэффективность и встроенную безопасность информации. Тем, кто еще ничего не знает про OpenUNB, я советую прочитать предыдущие статьи на эту тему:



а также изучить первоисточник на сайте Сколтеха.


Сегодня мы рассмотрим механизм криптографической защиты передаваемых данных (шифрование, контроль целостности и подлинности).


Чтобы обеспечить базу безопасности, у каждого устройства и сервера должно быть что-то общее, секретное, которое никто не знает. В OpenUNB это секретный ключ шифрования K0, имеющий длину k, равную 128 или 256 бит. Весь остальной протокол должен быть сделан так, чтобы этот базовый, основной ключ не стал бы известен никому никаким образом, а информация при этом была защищена. Поэтому базовый ключ претерпевает такое множество преобразований в своем стремлении встретиться с информацией.


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


В недрах устройства и сервера OpenUNB есть счетчик активаций Na и счетчик эпох Ne, которые остаются примерно одинаковыми в процессе работы системы. Сначала вырабатывается ключ активации:


$ Ka = CTR (K0, Na || 0^{n/2-16}, 0^k).$


Потом уже по ключу активации вырабатываются рабочие ключ шифрования Km и ключ имитозащиты Ke:


$ Km = CTR (Ka, 0x02 || Ne || 0^{n/2-32}, 0^k),$


$ Ke = CTR (Ka, 0x03 || Ne || 0^{n/2-32}, 0^k).$


Для криптографических преобразований разработчики OpenUNB рекомендуется использовать блочный шифр Магма, который имеет длину блока n = 64 бита и длину ключа k = 256 бит, определенный в стандарте ГОСТ Р 34.12-2015.


Шифрование выглядит так:


$ EncryptedMACPayload = CTR (Ke, Nn || 0^{n/2-16}, MACPayload),$


где Nn номер пакета, а выработка имитовставки так:


$MIC = CMAC24 (Km, P),$


где значение вектора P зависит от длины блока n и длины поля MACPayload. Пусть len
однобайтная целочисленная беззнаковая переменная, равная длине полезных данных
MACPayload в битах (переменная len может принимать значения 16 или 48), тогда:


если len = 48 и n = 64, то


$P = DevAddr || MACPayload || Nn || 0^{2n-len-48} || len;$


в остальных случаях


$P = DevAddr || MACPayload || Nn || 0^{n-len-48} || len.$


Процедура CMAC24 здесь это криптопреобразование "режим выработки имитовставки" согласно ГОСТ.


Далее эти поля вставляются на свои места. Напомним схему формирования пакета:
image


Более подробно, со всеми деталями, вы можете прочитать о безопасности в OpenUNB в первоисточнике.


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


Как всегда, исходники крипто-преобразований от deef137 доступны на Github.

Подробнее..

Прием всего Bluetooth разом на SDR с CUDA? Легко

31.07.2020 16:11:33 | Автор: admin

В последнее время коллеги по "цеху" независимо друг от друга стали спрашивать меня: как получить c одного SDR-приемника одновременно все каналы Bluetooth? Полоса ведь позволяет, есть SDR с выходной полосой 80 МГц и более. Можно, конечно, сделать это на ПЛИС, но время такой разработки будет довольно большим. Мне давно было известно, что сделать такое на GPU довольно просто, но чтобы так!


Стандарт Bluetooth определяет физический уровень в двух версиях: Classic и Low Energy. Спецификация есть здесь. Документ ужасно большой, читать его целиком опасно для мозга. К счастью, большие компании, производящие измерительную технику, имеют средства для создания наглядных документов по теме. Tektronix и National Instruments, например. У меня совершенно нет шансов в конкуренции с ними по качеству представления материала. Интересующихся прошу изучать по ссылкам.


Все, что мне нужно знать о физическом уровне для создания многоканального фильтра, это шаг сетки частот и скорость модуляции. Они сведены в таблицу в одном из указанных документов:


image


Таким образом, нам нужно нарезать полосу 80 МГц на 79 фильтров с шагом настройки 1 МГц и, одновременно с этим, на 40 фильтров с шагом настройки 2 МГц. Частоты следования отсчетов с выходов фильтров должны быть 1 МГц и 2 МГц, соответственно.


Таким образом, нам необходимо две гребенки фильтров.


Для начала выберем параметры этих фильтров исходя из полос сигналов Bluetooth Classic и Bluetooth Low Energy. Нам нужны их импульсные характеристики, чтобы рассчитать нагрузку на вычислительное устройство фильтра. Здесь сразу стоит оговориться, что длины импульсных характеристик мы выбрали исходя из требований "быстрого" алгоритма фильтрации. Суть от этого не меняется. И число коэффициентов импульсной характеристики не должно быть слишком большим, чтобы фильтр был реализуем на вменяемой вычислительной аппаратуре.


Для фильтров с шагом 1 МГц выберем полосу пропускания ФНЧ (половина полосы пропускания полосового фильтра) 500 кГц, длину импульсной характеристики подгоним к 480 отводам. Для фильтров с шагом 2 МГц эти параметры выберем 1 МГц и 240 отводов, соответственно. Тип окна выбираем Кайзера. Рассчитаем импульсные характеристики в filterDesigner и выгрузим их в формате С-header:


Скриншоты из filterDesigner

image
image
image
image


Можно решать задачу лобовым способом: строить соответствующий по числу фильтров массив DDC (Digital Down Converter). Такой подход хорош для ПЛИС, где возможна экономия за счет уменьшения разрядности вычислителей первых ступеней. Также ПЛИС это наиболее энергетически-эффективный способ реализации. Но трудозатраты при этом способе наиболее высоки.


При выполнении гребенки фильтров на популярных нынче GPU появляется возможность реализации более хитрого алгоритма: полифазной гребенки фильтров на основе БПФ, который на CUDA доступен из библиотеки. В заграничной литературе алгоритм называется Polyphase or WOLA (Weight, Overlap and Add) FFT Filterbank. Лень к рисованию не дает мне возможности выполнить наглядное объяснение самостоятельно. В Сети есть много материалов по теме, особенно наглядный график выполнен здесь на странице 11 (огромное спасибо уважаемым авторам), вот он:


image


Я попробую пояснить схему обработки своими словами. Слабонервных прошу не читать.

Я попробую пояснить схему обработки своими словами в рамках моих методических возможностей. БПФ есть свертка входного сигнала со всем спектром комплексных ортогональных гармоник, укладывающихся на интервале импульсной характеристики. Импульсная характеристика фильтра, на которую умножается сигнал перед входом БПФ, модулируется этим спектров гармоник. Другими словами, огибающая импульсных характеристик результирующих фильтров гребенки выносится за скобки. Далее, спектр гармоник прореживается в некоторое число раз, ввиду расширения полосы пропускания фильтра относительно фильтра в прямоугольным окном. На рисунке мы видим прореживание на четыре. Другими словами, после расширения полосы окном Кайзера (с одновременным увеличением затухания в полосе задержания), нам уже нужны не все фильтры а только четвертая их часть. Остальные избыточны, их частотные характеристики перекрываются. Из четырех точек БПФ, идущих подряд, выбираем только нулевую, вычисление которой есть суммирование четырех
входных точек, взятых через время, равное четверти длительности исходного БПФ.


Железо выберем то, которое есть под рукой. Это плата ввода компании "Инструментальные Системы" FMC126P. О ней я уже писал в одной предыдущей статье. В разъем FMC платы вставлен субмодуль той же компании с трансивером AD9371 с полосой 100 МГц. Весь поток с трансивера может быть непрерывно передан в компьютер для обработки.


Выберем видео-карту с GPU GTX 1050. (Соврал, это она нас выбрала: это все что было под рукой, была выдрана из вычислителя для расчета антенн, но тем удивительней было увидеть рабочую гребенку). Перейдем к программной части.


К сожалению, из-за лицензий мы не можем опубликовать полный код. Можем показать только ядра GPU. Впрочем, остальной код и не особо интересен.


Вот ядро, которое выполняет перемножение сигнала на окно и сложение, и обертка для его вызова:


__global__ void cuComplexMultiplyWindowKernel(const cuComplex *data, const float *window, size_t windowSize, cuComplex *result) {    __shared__ cuComplex multiplicationResult[480];    multiplicationResult[threadIdx.x] = cuComplexMultiplyFloat(data[threadIdx.x + windowSize / 4 * blockIdx.x], window[threadIdx.x]);    __syncthreads();    cuComplex sum;    sum.x = sum.y = 0;    if (threadIdx.x < windowSize / 4) {        for(int i = 0; i < 4; i++) {            sum = cuComplexAdd(sum, multiplicationResult[threadIdx.x + i * windowSize / 4]);        }        result[threadIdx.x + windowSize / 4 * blockIdx.x] = sum;    }}cudaError_t cuComplexMultiplyWindow(const cuComplex *data, const float *window, size_t windowSize, cuComplex *result, size_t dataSize, cudaStream_t stream) {    size_t windowStep = windowSize / 4;    cuComplexMultiplyWindowKernel<<<dataSize / windowStep - 3, windowSize, 1024, stream>>>(data, window, windowSize, result);    return cudaGetLastError();}

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


Гребенки были проверены на выходном спектре каналов в реальном времени. На вход AD9371 подавался сигнал генератора сигналов 2450 МГц, селективность фильтров соответствовала расчетной.


image


В планах: адаптация софта на плату XRTX и реализация поиска пакетов, если это кому-нибудь окажется нужно или будет свободное время.


Всю работу по софту выполнил gaudima, слава ему!

Подробнее..

Из песочницы SDR DVB-T2 receiver на C

05.10.2020 20:08:11 | Автор: admin

Software Defined Radio (программно-определяемая радиосистема) это метод замены работы по металлу (что, в принципе, полезно для здоровья) на головную боль программирования. SDR пророчат большое будущее и основным достоинством считается снятие ограничений в реализации радиопротоколов. Примером является метод модуляции OFDM (Orthogonal frequency-division multiplexing), которая стала возможна только методом SDR. Но есть в SDR и еще одна, чисто инженерная возможность, это возможность контролировать и визуализировать сигнал в любой произвольной точке с наименьшими усилиями.


Одним из интересных стандартов связи является наземное эфирное телевидение DVB-T2. 

Зачем? Конечно, можно просто не вставая включить телевизор, но смотреть там абсолютно нечего и это уже не моё мнение, а медицинский факт.


Если серьёзно, DVB-T2 разработан с очень широкими возможностями, в том числе:


  • indoor применение
  • модуляция от QPSK до 256QAM
  • полоса пропускания от 1,7MHz до 8MHz

    Опыт приема цифрового телевидения по принципу SDR есть. Стандарт DVB-T есть в известном проекте GNURadio. Есть блок gr-dvbs2rx для стандарта DVB-T2 (все для того же GNURadio), но требующий предварительной синхронизации сигнала и он вдохновляет (отдельное thanks to Ron Economos).


Подробнее..

Как принять сигналы немецкого ВМФ с помощью звуковой карты, или изучаем радиосигналы сверхнизких частот

06.11.2020 22:13:06 | Автор: admin
Привет Хабр.

Тема приема и анализа сверхдлинных весьма интересна, и на Хабре она упоминается весьма редко. Попробуем восполнить пробел, и посмотрим как это работает.


Передатчик VLF в Японии (с) en.wikipedia.org/wiki/Very_low_frequency

VLF


Сверхнизкими считаются частоты радиодиапазона частотой менее 30 КГц. Интерес к ним со стороны военных появился еще давно, когда выяснилось что радиоволны столь большой длины (длина волны до 100 км!) могут проникать сквозь воду, и их можно использовать для связи с подводными лодками. Кто придумал такой способ, сказать сложно, но уже в 1943 г в Германии был запущен передатчик Goliath, передающий данные подводным лодкам на частотах 15-25 КГц. После войны передатчик был разобран, перевезен в СССР и запущен заново, причем согласно Википедии, он работает и до сих пор.

Эффективность любой антенны зависит от длины волны, и для сверхдлинных волн КПД антенны также является сверхнизким при мощности в мегаватт, излучаемая мощность (EIRP) составляет всего лишь 30-50 КВт. Однако, возможность скрытной передачи сигналов подводным лодкам является весьма привлекательной, так что это никого не остановило такие системы, разумеется, работают и сейчас. Передать сигналы диапазона VLF очень сложно, однако принять их может любой желающий. Для этого даже не нужен радиоприемник, частоты 20-30 КГц вполне доступны для обычной звуковой карты ПК. Для этого придется взять кабель подлиннее, подключить его ко входу звуковой карты и пойти с ноутбуком куда-нибудь в лес или в поле, где нет индустриальных помех. Хотя современные технологии предоставляют куда более удобный способ приема онлайн с помощью SDR. Для примера можно посмотреть панораму приемника голландского университета Twente:



Все вертикальные линии это действующие на данный момент системы. Результат удивительный, спектр СДВ забит ничуть не меньше, чем вечерний эфир на вещательном FM-диапазоне. Посмотрим, что мы здесь можем увидеть.

На частотах 12-15 КГц мы видим метки, относящиеся к российской радио-навигационной системе Альфа (полное название РСДН-20 Радиотехническая Система Дальней Навигации). Согласно Википедии, передатчики Альфы работают на частотах 11.9, 12.6 и 14.8 КГц, система обеспечивает точность определения положения до 1.5 км. Впрочем, на панораме никаких импульсов не видно, может у них выходной приемник в Twente недостаточно чувствителен для этого сигнала, или же радиосигналы передаются по какому-то расписанию. Следующим на частоте 16.4 КГц работает передатчик Noviken, расположенный в Норвегии. Перечислять остальные смысла нет, список можно посмотреть в Википедии.

Запись и анализ


Посмотрим теперь, как собственно передаются такие сигналы. Для примера я взял наугад сигнал DHO38, передающийся на частоте 23.4 КГц из Германии. Для записи мы выбираем частоту и модуляцию как показано на рисунке, и нажимаем кнопку Audio Recording.



Полученный файл можно открыть в бесплатной программе Signals Analyser. Из картинки очевидно, что мы имеем сигнал с частотной модуляцией (FSK):



Применим к сигналу FSK-демодулятор, и получаем последовательность бит:



Кстати, скорость передачи составляет 200 бит в секунду чтобы посмотреть youtube, определенно не хватит, но для подводной лодки на глубине 30м даже так и то неплохо. И как нетрудно догадаться, VLF-связь односторонняя ответить экипаж лодки из под воды не может.

Рассмотрим сигнал более подробно. Сохраним полученный файл в WAV, как показано на скриншоте. Разумеется, получить содержимое передачи мы не сможем сигнал скорее всего зашифрован. Но можно посмотреть структуру битового потока, для этого сохраненный файл можно вывести графически с помощью Python. Визуализация позволяет найти закономерности гораздо более наглядно.
Исходный код
from scipy.io import wavfileimport matplotlib.pyplot as pltfrom PIL import Image_, data = wavfile.read('websdr_recording_2020-11-06T15_00_00Z_23.4kHz_.wav')print("WAV: %d samples" % data.shape[0])for iw in range(400, 1024, 2):    print("Saving: {} of {}...".format(iw, 1024))    w, h = iw, 800    image = Image.new('RGB', (w, h))    px, py = 0, 0    for p in range(data.shape[0]):        image.putpixel((px, py), (0, data[p]//16, 0))        px += 1        if px >= w:            px = 0            py += 1            if py >= h:                break    image.save("image-%d.png" % iw)

Мы не знаем параметры передачи, так что просто переберем все варианты вывода при разной ширине изображения. Результатом будет набор файлов, который выглядит примерно так:



Нетрудно видеть, что при определенной ширине картинки легко угадываются некоторые закономерности. Битовый поток в увеличенном виде:



Желающие могут поэкспериментировать с шириной картинки самостоятельно, принцип, надеюсь, понятен. Наклон линий обусловлен тем, что частоты передатчика и приемника не совпадают. Разумеется, чтобы получить полноценный битовый поток, 20 строчек кода явно недостаточно, а написание цифрового демодулятора с PLL явно выходит за рамки этой статьи. Да и по большому счету, смысла в этом не так уж много сигнал все равно зашифрован, и даже имея битовые данные, больше мы ничего не сделаем. Хотя желающие могут попробовать поискать закономерности самостоятельно.

Заключение


Как можно видеть, изучение подобных систем связи представляет не только технический, но и исторический интерес. А на сверхнизких частотах еще немало интересных сигналов, в том числе и природного происхождения, например резонансы Шумана на частотах 10-20 Герц.

Как бонус для тех, кто дочитал досюда: желающие увидеть вживую, как работает передача и прием на таких частотах, могут попробовать принять немецкую станцию Pinneberg, передающую метеосводки в открытом виде на частоте 147.3 КГц. Декодировать сигнал можно с помощью разных программ, например MultiPSK.

Как обычно, всем удачных экспериментов.
Подробнее..

Интернет вещей по-русски. Помехоустойчивое кодирование в OpenUNB

16.12.2020 00:12:34 | Автор: admin

Доступ к среде (MAC, Media Access Control) в OpenUNB очень прост случаен и асинхронен. Этот вид доступа еще называют асинхронная ALOHA. Даже WiFi может похвастаться более сложным вариантом MAC. За счет этого упрощения оконечные устройства OpenUNB могут сильно экономить в потребляемой энергии и стоимости оборудования. Но такой способ доступа к среде приводит к ошибкам при передаче, которые чаще происходят группами. Поэтому, хотя и не только поэтому, помехоустойчивому кодированию в OpenUNB уделено достаточно много внимания.


В настоящее время примером качественно спроектированных систем радиосвязи являются стандарты сотовой связи. Этот факт доказывается колоссальным прогрессом в способах передачи информации по радио, изменившим всю нашу жизнь. Детали реализации стандартов сотовой связи даже используются в профильных университетах, как условия задач. Создатели OpenUNB также не стали изобретать чего-то нового в смысле помехоустойчивого кодирования, а взяли пример со стандарта Интернета вещей от 3GPP NB-IoT. Там при передаче в сторону базовой станции применяется полярное кодирование.


К слову, на Хабре есть отличные статьи по помехоустойчивому кодированию вообще и по кодированию LDPC в частности. Тем, кто путается в терминах и базовых понятиях, будет полезно их прочитать.


В настоящее время особую популярность набирает новый вид помехоустойчивых кодов, называемых полярными кодами. Как было доказано в [1], предложенные Ариканом полярные коды способны асимптотически достигать границы Шенона. Данное преимущество позволяет использовать полярные коды в современных телекоммуникационных системах мобильной связи. За довольно короткое время развития полярных кодов было предложено множество алгоритмов декодирования. Идея традиционного алгоритма декодирования [1] для полярных кодов заключается в последовательной оценке информационных бит. Таким образом, если на каком то шаге декодирования происходит ошибка, то и оценка всех остальных бит тоже будет ошибочной. Такой алгоритм декодирования известен, как алгоритм последовательного исключения (ПИ). Одним из способов преодоления зависимости от оценок предшествующих бит является использование списочного алгоритма Тала-Варди.


В настоящей статье рассматривается списочный алгоритм Тала Варди, предложенный в [2] для декодирования полярных кодов, который существенно уменьшает вероятность ошибки декодирование и позволяет реализовать декодирование почти по максимуму правдоподобия уже для небольшого размера списка (L = 16).


Основная идея, лежащая в основе алгоритмов кодирования и декодирования полярных кодов поляризация канала. Поляризацией канала является операция преобразования канала связи в N независимых его копий, в которых вероятность ошибки при передаче данных стремится к 0, или к 1. Каналы с единичной вероятностью ошибки будем называть замороженными. Таким образом появляется возможность эффективного использования канала связи и передачу сообщений через множество каналов, обладающих низкой вероятностью ошибки. Полярные коды строятся на основе использования матрицы вида:


$G = \begin{pmatrix} \ 1& \ 0 \\ \ 1& \ 1 \end{pmatrix}^{\otimes m} $


Матрица G называют ядром Арикана, а через m обозначают ее кронекеровскую степень. Формально алгоритм кодирования полярного кода состоит из двух основных этапов, а именно: формирования кодовой последовательности и умножения на матрицу Арикана. Под формированием кодового слова понимается вставка информационных бит в незамороженные позиции кодовой последовательности, и дальнейшее умножение этой последовательности на матрицу Арикана. Степень матрицы соотносится с длинной кодовой последовательности как N = 2^m.


Почитать о полярных кодах по-русски можно здесь, по-английски здесь. Как введение в полярные коды рекомендуют это видео.


Для начала давайте проверим идею, что полярные коды действительно так хороши для нашего случая. Для этого сравним их с обычными конкурентами: БЧХ, Рида-Соломона, Голея. (Здесь следует заметить, что полярный код чувствителен к виду модуляции и что он особенно хорош именно при DBPSK.) Проведем имитационное моделирование в Matlab вероятности битовой ошибки в зависимости от отношения сигнал-шум на бит (ОСШб) указанных кодов с примерно одинаковыми скоростями. Результаты моделирования приведены на рисунке. По графикам видно, что даже в области малых значений ОСШб полярный код немного, но лидирует.


image


Выигрыш в 1 дБ или меньше может показаться мелочью, не достойной усилий. Но подумайте о радиоинженере, которому вы предложите уменьшить коэффициент шума уже вылизанного до предела приемника на 1 дБ, чтобы догнать конкурентов. Или подумайте о создателе сети IoT, которому нужно будет ставить базовые станции на 10 процентов чаще, чем конкурентам.


Следует отметить, что при более больших ОСШб разрыв полярного кода от конкурентов увеличивается. При ОСШб около 7.5 дБ вероятности ошибок уже отличаются на порядок, что будет приводить к значительно меньшим потерям пакетов.


Перейдем в практическую плоскость. Кодер полярного кода реализован в микроконтроллере, исходники здесь. В OpenUNB есть два варианта размера информационного блока: 64 и 96. Согласно алгоритму кодирования полярным кодом, необходимо сформировать промежуточную кодовую последовательность, которая будет содержать биты информационного блока в известных информационных позициях, а биты во всех замороженных позициях будут равны нулю. Код алгоритма представлен ниже:


int n_polar = _frozen_indicator.size();std::vector<uint8_t> iwd_s(n_polar);std::vector<int> inf_idx;std::vector<uint8_t> u(n_polar);for (int i = 0, j = 0; i < iwd_s.size(); i++) {    if (_frozen_indicator[i] == 0) {        iwd_s[i] = _iwd[j++];        inf_idx.push_back(i + 1);    }    else {        iwd_s[i] = 0;    }    u[i] = 0;}

Результатом работы данного алгоритма является промежуточное кодовая последовательность размером 128 или 196 бит, соответственно. Далее для того, что бы умножить промежуточную кодовую последовательность на матрицу Арикана, необходимо дополнить промежуточную кодовую последовательность нуля до целой степени двойки. Умножение на матрицу Арикана осуществляется с помощью функции, приведенной ниже:


return solve_recursively_prep(inf_idx, u, iwd_s, n_polar);

Декодер реализован в приложении на Raspberry. Декодер получает от демодулятора DBSPK мягкие решения и реализует алгоритм декодирования Тала Варди.


Основная идея списочного алгоритма декодирования состоит в том, чтобы обрабатывать сразу блок из не более чем L символов за одну итерацию алгоритма. То есть задача декодирования сводится к построению кодового дерева, где на каждой итерации вычисляется значение метрики пути, и строится не более чем L наиболее вероятных продолжений этого пути. В качестве примера приведем кодовое дерево (4,3), где 3 число информационных бит.


К


На рисунке, приведенном выше, сплошными линиями обозначены наиболее вероятные пути, причем количество этих путей определяется размером списка L.


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


Декодер:


std::vector<std::vector<float>> prob;std::vector<std::vector<uint8_t>> dec = pcscl_prep(8, 16, llr, &prob, info_bit_pattern_96);dec = polar_transform_noperm(dec);dec = extract_with_filter(dec, crc_mask_96, num_of_nonzero_bits_96 - short_96);std::vector<uint8_t> crc_err;crc_err = crc_ok_array(0x327, dec);

Чтобы проверить соответствие реализации полярного кода идее, проводим натурное моделирование. Для этого создаем на столе такой стенд: подключаем RTL-SDR к Raspberry, включаем запись с эфира, запускаем передатчик и через аттенюатор записываем сигнал в файл. В софте читаем сигнал из файла, делаем измерение ОСШ и подмешивание к принимаемому сигналу шума. Далее запускаем процесс сбора статистики и уходим спать. По приходу мы имеем в распоряжении такой график:


image


График с точностью до погрешностей совпадает с графиком из модели в Matlab.


Попутно получаем график вероятности потери пакета в зависимости от ОСШ:


image.


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


P.S.


Хочется выразить благодарность нашему бессменному программисту deef137 и примкнувшему в нам специалисту по помехоустойчивому кодированию RadioTech34.


[1] Arikan E. Channel polarization: A method for constructing capacity achieving codes for symmetric binary-input memoryless channels // IEEE Transactions on Information Theory. 2009. July. Vol.55, no. 7. P. 30513073.
[2] Tal I., Vardy A. List decoding of polar codes // Proceedings of IEEE International Symposium on Information Theory. 2011. P. 15.

Подробнее..

SDR приёмник SoftRock Ensemble RX II

10.06.2021 16:07:13 | Автор: admin


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

В этой публикации я хочу рассказать об удивительной конструкции, которая изменила моё представление об аппаратуре для любительской радиосвязи и положила начало моему увлечению SDR (Software Defined Radio).

Речь идёт о SoftRock Ensemble RX II, который я использую в качестве контрольного радиоприёмника уже седьмой год.

На официальном сайте SoftRock Ensemble RX II продаётся или за $65 в виде набора, или за $85 собранным. При такой цене больше хочется говорить о достоинствах, чем о недостатках.

Особенностью приёмника является то, что он не работает автономно. Выход приёмника подключается к линейному входу звуковой карты компьютера. Синтезатор частоты приёмника управляется через USB.

Мной используется HF-версия SoftRock Ensemble RX II, которая работает в диапазоне частот 1,830 МГц. Этот диапазон разбит полосовыми фильтрами на четыре поддиапазона: 1,84 МГц; 48 МГц; 816 МГц и 1630 МГц.

Приёмник покупал набором. Впервые в жизни мотал катушки для диапазонных полосовых фильтров (ДПФ) на кольцевых сердечниках. Важным моментом было наличие сайта с подробной инструкцией по монтажу и наладке.

После правильной сборки конструкция заработала сразу. Когда же я увидел эфир на панорамном индикаторе, я понял, это любовь навеки!

Аппаратная часть


Как понятно из названия, SoftRock Ensemble RX II был не первым в линейке. Видимая простота схемотехнического решения приёмника отрабатывалась американским радиолюбителем Tony Parks (KB9YIG) годами.

Принцип действия малосигнального тракта проще объяснить на схеме радиоприёмника SoftRock Lite II младшего брата SoftRock Ensemble RX II. Схема взята из инструкции по монтажу и наладке:


Из схемы видно, что это гетеродинный приёмник с квадратурным детектором (QSD).

Схема источника питания (1 Power Supply) стандартная схема включения микросхемы линейного стабилизатора 78L05.

Принимаемый сигнал радиочастоты (РЧ) через диапазонный полосовой фильтр (ДПФ) C3, L1, C4 подаётся на первичную обмотку трансформатора T1. На выводе 2 трансформатора присутствует сигнал РЧ, синфазный принимаемому, а на выводе 4 противофазный. На среднюю точку вторичной обмотки T1 (выводы 3, 5) подаётся напряжение смещения, равное половине напряжения питания. Напряжение формируется делителем на резисторах R3, R4 и фильтруется конденсаторами C7, C14, C16. Смещение нужно для правильной работы ключей и операционных усилителей (ОУ).

Ключи из состава мультиплексора-демультиплексора U3 переключаются сигналами со счётчика Джонсона, собранного на U2. В любой момент времени открыт только один ключ.

Сигнал I (Inphase) формируется на конденсаторе C5 подачей на него через R1 напряжения с вывода 2 трансформатора T1 через открытый ключ 1B4 (фаза сигнала гетеродина 0), а также подачей через резистор R2 и открытый ключ 1B1 напряжения с вывода 4 трансформатора T1 (фаза 180).

Сигнал Q (Quadrature) формируется на конденсаторе C6 подачей на него через R1 напряжения с вывода 2 трансформатора T1 через открытый ключ 2B3 (фаза сигнала гетеродина 90), а также подачей через резистор R2 и открытый ключ 2B2 напряжения с вывода 4 трансформатора T1 (фаза 270).

Резисторы R1 и R2 нужны для выравнивания разницы сопротивления открытых ключей мультиплексора-демультиплексора FST3253.

Сигналы I, Q усиливаются инвертирующими усилителями на двух половинках U4 и подаются на линейный вход звуковой карты компьютера, где и производится дальнейшая обработка квадратурного сигнала.

От простого к сложному


SoftRock Lite II предназначен для приёма сигналов на участке какого-либо одного радиолюбительского диапазона. Параметры участка определяются частотой кварцевого резонатора X1 (см. 2 Local Oscillator) и частотой дискретизации звуковой карты.

При резонансной частоте кварца 28224 кГц и частоте дискретизации 96 кГц SoftRock Lite II будет принимать сигналы в диапазоне от 7008 до 7104 кГц. Диапазонный полосовой фильтр (C3, L1, C4), соответственно, должен иметь точно такую же полосу пропускания.

На рисунке ниже показан экран программы HDSDR. Выход приёмника подключен к линейному входу звуковой карты компьютера. Частота дискретизации звуковой карты 96 кГц. Центральная частота приёма 7056 кГц. На панорамном индикаторе безмятежное спокойствие, царящее на любительском диапазоне 40 м воскресным утром 6 июня 2021 года:


В отличие от SoftRock Lite II приёмник SoftRock Ensemble RX II имеет плавную настройку в диапазоне частот от 1800 кГц до 30 МГц, поэтому схема устройства дополнена синтезатором частоты Si570, управляемым через USB контроллером ATTiny85, и переключаемым четырёхдиапазонным ДПФ.

Схема ДПФ приёмника SoftRock Ensemble RX II взята из инструкции по монтажу и наладке:


ДПФ состоит из четырёх фильтров с полосой пропускания: 1,84 МГц; 48 МГц; 816 МГц и 1630 МГц. Фильтры переключаются сигналами SEL 0 и SEL 1 силами двух мультиплексоров-демультиплексоров FST3253 U8 и U9. Аттенюаторы R17, R18, R19 и R20, R21, R22 в цепях ДПФ Band 0 и Band 1 ослабляют на 14 dB входной сигнал на низкочастотных КВ-диапазонах, которые традиционно отличаются высоким уровнем помех.

Трансформатор T2 служит для гальванической развязки ДПФ и антенны. Первичная обмотка трансформатора T3 является входом QSD.

Схема управления и синтезатора частоты показана ниже:


Схема питается от разъема USB. Подключенный к шине USB микроконтроллер U1 управляет синтезатором частоты U3 по интерфейсу I2C. Выходной сигнал синтезатора через трансформатор T1 подаётся на вход счётчика Джонсона. В зависимости от частоты приёма микроконтроллер через оптроны U4 и U5 формирует сигналы SEL 0 и SEL 1 для переключения полосовых фильтров в ДПФ.

Особенностью схемы является то, что она гальванически развязана с малосигнальным трактом приёмника. Полигоны земель изолированы друг от друга, сигналы передаются через оптроны и трансформатор:


Это сделано, чтобы исключить перетоки по полигону земли между точкой подключения к разъему USB и точкой подключения к разъему звуковой карты.

Программная часть


Программная часть состоит из программы для управления и программы для обработки данных.

Для управления приёмником и его конфигурирования применяется программа CFGSR, созданная радиолюбителем из Нидерландов F.W. Krom (PE0FKO):


Порядок установки программы управления и нужных для её работы драйверов подробно описан в инструкции по монтажу и наладке.

Для правильной работы схемы управления нужно выбрать тип устройства. В нашем случае это SoftRock Ensemble RX II LF/HF(HF):


Для работы с SoftRock Ensemble RX II обычно используется программа HDSDR. Для связи HDSDR с CFGSR служит библиотека ExtIO_Si570.dll, которую после установки конфигуратора надо скопировать из папки, куда установлен конфигуратор, в папку, куда установлена HDSDR.

Выход приёмника подключен к линейному входу звуковой карты компьютера. Запускаем HDSDR. Выбираем источник сигнала SoftRock Si570. Устанавливаем рабочую частоту дискретизации звуковой карты. Пытаемся принять сигналы точного времени, которые передаются на частоте 9996 кГц:


Как видно по панорамному индикатору, сигналы точного времени мы принимаем на частоте 9994,18 кГц. Это нужно исправить!

Калибровка частоты


Опорный кварцевый генератор находится внутри корпуса синтезатора Si570. Калибровка опорной частоты производится прямо из конфигуратора вводом частоты настройки на радиостанцию и её фактической частоты вещания:


После проведения процедуры калибровки мы начинаем принимать сигналы точного времени, как и положено, на частоте 9996 кГц:


Теперь наш маленький аппаратно-программный комплекс можно смело использовать в качестве контрольного радиоприёмника с калиброванной шкалой.

Unfinished Sympathy


До знакомства с SoftRock Ensemble RX II такие вещи как синтезатор частоты, панорамный индикатор и управление радиостанцией с помощью компьютера были для меня атрибутами профессиональной связной техники, которая стоит отнюдь не $85.

Сборка приёмника оказалась простой и приятной. Инструкции по монтажу и наладке написаны простым и понятным техническим английским языком.

Использование панорамного индикатора позволяет не только слышать, но и видеть, что происходит в эфире.

Мне очень нравится SDR. Надеюсь, и вам тоже.



Облачные серверы от Маклауд быстрые и безопасные.

Зарегистрируйтесь по ссылке выше или кликнув на баннер и получите 10% скидку на первый месяц аренды сервера любой конфигурации!

Подробнее..

MANET радиостанции тенденции и перспективы

21.03.2021 00:18:50 | Автор: admin

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

Зачем это нужно и кому?

Прошло довольно много времени со дня первой публикации о MANET, мир шагнул в новую реальность, появились и приобрели массовый характер стриминговые видео сервисы, всевозможные сенсоры, дроны, автономные платформы генерирующие большие объемы данных и т.д. Я уже молчу о смартфонах и планшетах - всему этому чуду для нормальной работы нужны широкополосные каналы с низкой задержкой. Понятно, что если есть нормальное покрытие LTE или WiFi, то большинство базовых потребностей связи будет сразу закрыто. Но что если покрытия нет?

Теперь рассмотрим ситуацию когда у вас нет инфраструктуры, а нужно гонять большие объемы данных "на лету". В первую очередь, это требуется военным, т.к. современный солдат обвешан колоссальным количеством сенсоров и включен в единую автоматизированную систему управления боем BMS. Здесь он должен быть всегда онлайн, всегда виден своему командованию и иметь возможность взаимодействовать с другими такими же как он, а в перспективе даже с роботизированными платформами на земле, воде, в воздухе (в космосе - ?), а это и передача видео, файлов, телеметрии, карт и всего другого, вне зависимости от доступной инфраструктуры. Такой себе закрытый Интернет. Вот этот сегмент как раз и закрывают такие радиостанции.

Другим потенциальным "клиентом" таких систем являются спасатели. По информации из СМИ, американские компании TrellisWare Technologies и Persisten Systems активно продвигают свои MANET радиостанций в Федеральное агентство по чрезвычайным ситуациям FEMA для решения задач эффективного управления командами спасателей, поиска людей на больших площадях и т.д. Вполне логичное решение, с учетом того, сколько ущерба инфраструктуре США приносят природные катаклизмы, а время самый дорогой ресурс для спасателя.

Архитектура

Внутренняя архитектура таких девайсов ничем не уступает самым современным смартфонам, а в некоторых аспектах, таких как например диапазон рабочих частот или требования по надежности, значительно превосходит их. Единственное в чем они уступают смартфонам - это внешний вид, в стиле "защищенный кирпич", что обусловлено требованиями стандартов MIL-STD и IEC, предъявляемых к таким устройствам. Но это ерунда - главное, чтобы работало!

Следующим важным фактором является богатая периферия. И это неудивительно, ведь это не рации "walkie-talkie" с одной кнопкой для голоса. Все данные передаются как IP пакеты, для того чтобы максимально быстро и просто подключить клиентское оборудование, в том числе кнопки РТТ для голосовых сеансов. Следовательно, нужно иметь максимум из распространенных интерфейсов и работать как маршрутизатор. Чем по сути эти девайсы и являются.

Любопытно отметить, что практически все производители подобных систем, отказались от экранов. Поскольку подключаемое клиентское оборудование - смартфоны, планшеты, компьютеры - уже имеют экраны, то зачем дублировать функционал. К тому же, вставить нормальный экран в столь компактное решение, а тем более защитить его от механических воздействий и климата (-40...+55 С) по MIL-STD, очень сложно и дорого.

Наконец, батарея. Здесь все упирается в понятие SWaP, т.е. размер, вес и потребление устройства. Как вы понимаете, эти радиостанции практически постоянно в эфире, причем не столько как генераторы трафика от своих периферийных устройств (планшетов, смартфонов и т.д.), но в основном как ретрансляторы трафика других абонентов. И это должно длится сутками! Поэтому требования к батареям предъявляются чрезвычайно высокие. Это не только ёмкость, но и работа при глубоком минусе, до -40 градусов по Цельсию. В итоге, дешевыми такие батарейки точно не назовешь.

Радиочасть

Здесь можно выразиться одной фразой - "чем шире, тем лучше". С повсеместным распространением интегральных SDR трансиверов с цифровой обработкой сигналов в этом сегменте произошла самая настоящая революция. Большие скорости передачи требуют больше полосы, а традиционные радиочастотные цепи, не могут обеспечить более широких полос частот и схем цифровой модуляции без значительного потребления энергии и увеличения в размере и весе. Таким образом, революцией в дизайне MANET радиостанций с малым форм-фактором стали встроенные SDR приемопередатчики, уменьшающие размер и потребление несколькими способами.

Analog Devices | ADRV9009 functional block diagram.Analog Devices | ADRV9009 functional block diagram.

Во-первых, радиочастотные и аналоговые устройства могут быть переведены в цифровую область - например, радиочастотные фильтры могут стать цифровыми фильтрами. Цифровые реализации этих блоков более эффективны и лучше программируемы, чем их РЧ аналоги. Во-вторых, цепи на дискретных элементах часто представляют собой гетеродинные архитектуры, которые требуют нескольких уровней преобразования частоты, фильтрации, усиления и цифровой обработки. Интегрированные трансиверы могут использовать архитектуру с нулевой промежуточной частотой (ZIF), которая резко сокращает количество требуемых компонентов в сигнальной цепи, в частности, требуемых этапов фильтрации и усиления. Удаление этих ступеней уменьшает как размер, так и потребляемую мощность [1].

К слову, широкополосные SDR трансиверы требуют соответствующих усилителей. На помощь пришел нитрид галлия (GaN). Транзисторы на этом соединении способны обеспечить необходимую широкополосность и мощность. Такие компании, как Qorvo, Ampleon, Cree в полной мере отвечают всем самым современным требованиям производителей усилителей для SDR, в то время когда основные игроки этого рынка стараются уходить на вверх на гигагерцы. Хотя в последнее время много внимания уделяется когнитивному радио и переиспользованию спектра внизу, на УКВ, перекрывая весь диапазон частот в одном устройстве.

Софт

Поскольку классическая радиотехника закончилась (см. выше), теперь все упирается в софт, а точнее в "форму волны" - waveform. Вот тут и развернулась основная борьба между производителями таких девайсов.

Большинство из них используют технологию MIMO и активно наращивают количество апертур, что в связке с цифровым диаграммообразованием открывает невероятные возможности. Помните 5G? Как там собираются достигать гигабитных скоростей и большой емкости сети? Точно таким же образом - цифровой диаграммой и обработкой сигналов, когда на каждого абонента формируется отдельный луч и с адаптивной модуляцией. Примерно такая же логика и тут.

Однако, это влечет и сопутствующие проблемы. Во-первых, это не очень удобно, т.к. надо носить много антенн, а это проблема "в полях". А во-вторых, в сетях MANET, отличие от сотовых сетей, нет базовой станции - все абоненты мобильны. Соответственно, диаграмму нужно формировать "на лету, от каждого-к каждому", что на сегодня еще является серьезной научной проблемой. В любом случае, люди над этим работают.

Другим любопытным трендом является управление сетями MANET через SDN. Как и в случае в 5G и MIMO, основным преимуществом SDN для таких радиостанций становится гибкий механизм управления параметрами сети. Причем не только физическим уровнем (адаптивная модуляция, когнитивное радио), но и канальным, и сетевым. Это особенно актуально в случае больших сетей с множеством абонентов, где параметры каналов, требования по задержке, BER, PER, полосе могут меняться динамически от абонента к абоненту. А добавьте сюда аспект безопасности, распределение доступа, управление спектром и т.д. Как этим всем управлять? В данном случае SDN подходит как нельзя лучше. Однако, и тут есть масса чисто научных проблем и организации типа DARPA туда копают очень активно.

Итого, все вышеозначенное реализуется в софте на ПЛИС/DSP и взаимодействует с SDR трансиверами и ОС (например, Linux). Таким образом, у каждого вендора есть свой уникальный waveform - комбинация модуляции, кодирования, фильтрации, управления диаграммой - реализованная как специализированная прошивка для радиостанции.

Перспективы

В заключении, хочется показать несколько самых популярных MANET радиостанций и рассмотреть перспективы этого направления. Сформировалась конкретная потребность, появились необходимые комплектующие, объемы передачи данных растут с каждым годом, поэтому абсолютно очевидно, что у подобных систем большое будущее. Другое дело, что это очень узкоспециализированное оборудование и стоит оно довольно дорого. К тому же, поскольку перекрывается практически весь радиочастотный спектр, то возникают юридические вопросы в плане использования частот гражданскими пользователями. Отсюда проблема с выходом на новые рынки.

Persistent Systems MPU5Persistent Systems MPU5TrellisWareTrellisWare

e

Silvus Streamcaster-4200Silvus Streamcaster-4200DTC, Solo8DTC, Solo8

Резюме: персональный, децентрализованный Интернет все больше набирает популярности). А какие перспективы у MANET радиостанций видите вы?

[1] - https://militaryembedded.com/comms/rf-and-microwave/next-generation-military-communications-challenges

Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru