Интернет Вещей На Русском Языке. Помехоустойчивое Кодирование В Openunb

Доступ к медиа (MAC, Media Access Control) в OpenUNB очень простой — произвольный и асинхронный.

Этот тип доступа также называется асинхронным ALOHA. Даже Wi-Fi может похвастаться более сложным вариантом MAC. Благодаря этому упрощению конечные точки OpenUNB могут значительно сэкономить на энергопотреблении и затратах на оборудование.

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

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

Стандарты сотовой связи в настоящее время являются примером хорошо спроектированных систем радиосвязи.

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

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

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

Кстати, на Хабре есть отличные статьи по помехоустойчивости кодирование в целом и по LDPC-кодирование в частности.

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

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

Как было доказано в [1], полярные коды, предложенные Ариканом, способны асимптотически достигать границы Шенона.

Это преимущество позволяет использовать полярные коды в современных системах мобильной связи.

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

Идея традиционного алгоритма декодирования [1] полярных кодов заключается в последовательной оценке информационных битов.

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

Этот алгоритм декодирования известен как алгоритм последовательного исключения (SI).

Одним из способов преодоления зависимости от оценок предыдущих битов является использование алгоритма списка Тала-Варди.

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

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

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

Это дает возможность эффективно использовать канал связи и передавать сообщения по нескольким каналам с низкой вероятностью ошибки.

Полярные коды строятся с использованием матрицы вида:

Интернет вещей на русском языке.
</p><p>
 Помехоустойчивое кодирование в OpenUNB

Матрица G называется ядром Арикана, а m обозначает ее степень Кронекера.

Формально алгоритм кодирования полярного кода состоит из двух основных этапов, а именно: формирования кодовой последовательности и умножения на матрицу Арикана.

Формирование кодового слова означает вставку информационных битов в незамороженные позиции кодовой последовательности и дальнейшее умножение этой последовательности на матрицу Арикана.

Степень матрицы связана с длинной кодовой последовательностью как N = 2^m. О полярных кодах можно прочитать на русском языке.

Здесь , по-английски - Здесь .

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

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

Для этого сравним их с обычными конкурентами: BCH, Reed-Solomon, Golay. (Здесь следует отметить, что полярный код чувствителен к типу модуляции и что он особенно хорош с DBPSK.) Проведем в Matlab моделирование вероятности битовой ошибки в зависимости от отношения сигнал/шум на бит. (SNR) указанных кодов примерно с одинаковыми скоростями.

Результаты моделирования показаны на рисунке.

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

Интернет вещей на русском языке.
</p><p>
 Помехоустойчивое кодирование в OpenUNB

Прирост в 1 дБ или меньше может показаться мелочью, не стоящей затраченных усилий.

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

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

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

При SNR около 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 – количество бит информации.



Интернет вещей на русском языке.
</p><p>
 Помехоустойчивое кодирование в OpenUNB

На рисунке выше наиболее вероятные пути обозначены сплошными линиями, а количество этих путей определяется размером списка 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, включаем запись трансляции, запускаем передатчик и через аттенюатор записываем сигнал в файл.

В программе мы читаем сигнал из файла, измеряем SNR и добавляем шум к полученному сигналу.

Далее запускаем процесс сбора статистики и ложимся спать.

По прибытии в нашем распоряжении имеется следующее расписание:

Интернет вещей на русском языке.
</p><p>
 Помехоустойчивое кодирование в OpenUNB

График с точностью до ошибки совпадает с графиком модели в Matlab. Попутно получаем график вероятности потери пакетов в зависимости от SNR:

Интернет вещей на русском языке.
</p><p>
 Помехоустойчивое кодирование в OpenUNB

.

Последний график вселяет оптимизм, призывая нас в район, на улицу, прогуляться с передатчиком, чтобы ощутить мощь физического уровня OpenUNB. P.S. Хочу выразить благодарность нашему постоянному программисту защита 137 и присоединившийся к нам специалист по помехоустойчивому кодированию РадиоТех34 .

[1] Арикан ?.

Поляризация канала: метод построения кодов достижения пропускной способности для симметричных каналов без памяти с двоичным входом // IEEE Transactions on Information Theory. –– 2009. –– Июль.

–– Том 55, вып.

7. –– С.

3051–3073. [2] Таль И.

, Варди А.

Декодирование полярных кодов по списку // Труды Международного симпозиума IEEE по теории информации.

–– 2011. –– С.

1–5. Теги: #Беспроводные технологии #iot #Разработка Интернета вещей #Интернет вещей #открытый исходный код #sdr #Разработка систем связи #стандарты связи #интернет вещей #разработка Iot #программное обеспечение с открытым исходным кодом #оборудование с открытым исходным кодом #unb #OpenUNB

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.