exponenta event banner

Использование блоков библиотеки кодеров и декодеров RS с оптимизированным HDL

В этом примере показано, как реализовать кодер и декодер для стандарта IEEE ® 802.16 [1] с использованием блоков библиотеки кодеров и декодеров RS.

Введение

Код RS является небинарным блочным кодом. Код RS, который отображает$K$ информационные символы в кодовое слово длиной символа$N$, обозначается как $N$$K$код RS (,). Символами кода являются целые числа между$0$ и, $2^M-1$представляющие элементы конечного поля GF (). $2^M$Стандарт широкополосного беспроводного доступа IEEE 802,16 [1] использует укорочение, прокалывание и стирание кода RS (255 239), генерируемого на GF (256), т.е., и$N=255$$K=239$. $M=8$Кодер RS вводит$N-K=16$ символы четности, которые используются декодером RS для обнаружения и исправления ошибок символов. Код может исправлять до символьных$T=\textrm{floor}[(N-K)/2]=8$ ошибок в каждом кодовом слове.

В этой модели показано, как использовать оптимизированные блоки RS-кодера и библиотеки декодеров HDL для моделирования и генерации кода HDL. Он реализует кодирование и исправление ошибок для стандарта IEEE 802.16. Дополнительные сведения о поддержке HDL для блоков оптимизированного RS-кодера и декодера HDL см. в разделе Оптимизированный или оптимизированный RS-декодер с целочисленным входом RS-кодера. Для получения дополнительной информации об алгоритме, используемом в блоках, см. [2].

Чтобы открыть эту примерную модель, выполните следующие команды.

modelname = 'commrshdl';
open_system(modelname);

Источник

Подсистема источника генерирует информационные символы для кодера RS. Чтобы открыть подсистему Source, выполните следующие команды:

systemname = [modelname '/Source'];
open_system(systemname);

Одно из сообщений (информационных символов), используемых стандартом IEEE 802.16, содержит следующие 36 байт (рандомизированные данные, указанные на стр. 827 [1]).

  message = [D4 BA A1 12 F2 74 96 30 27 D4 88 9C 96 E3 A9 52 B3 15 AB FD
  92 53 07 32 C0 62 48 F0 19 22 E0 91 62 1A C1 00].

Источник повторно передает сообщение, за которым следует защитный интервал. Модель имеет длину сообщения параметров для количества символов в кодируемом сообщении; и период, который включает в себя длину сообщения и длину защитного интервала. Защитный интервал между сообщениями соответствует задержке кодера, добавляющего символы контроля четности к сообщению, и декодера, выполняющего поиск Chien. В обратном вызове initFcn модели длина сообщения устанавливается равной 36, а период - равной 236 (что предполагает, что защитный интервал имеет длину 200 символов).

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

Подсистема RS верхнего уровня содержит блоки оптимизированного RS кодера и декодера HDL. Для открытия подсистемы RS выполните следующие команды:

systemname = [modelname '/RS Subsystem'];
open_system(systemname);

Значения$N$ и$K$ устанавливаются в обратном вызове InitFcn модели и используются для конфигурирования блоков оптимизированного RS-кодера и декодера HDL. Значения$N$ и $K$не могут быть изменены в этой модели.

Кодер RS выводит укороченный код, если длина сообщения меньше$K$ символов. В этом случае оно заполняет входное сообщение$239-36=203$ нулями, кодирует дополненное сообщение и добавляет 16 символов контроля четности. Блок затем удаляет добавленные нулевые символы, создавая$36+16=52$ вывод символа.

Полином генератора поля, используемый стандартом IEEE 802.16, является. $p(x)=x^8+x^4+x^3+x^2+1$Соответственно, как для RS-кодера, так и для декодера Источник примитивного многочлена устанавливается как Свойство, примитивный многочлен устанавливается как [1 0 0 0 1 1 1 0 1], Источник B, который является начальной мощностью для корней примитивного многочлена, устанавливается как Свойство, и значение B устанавливается как 0. Полином генератора кода, используемый стандартом IEEE 802.16, является, $g(x)=(x+\lambda^0)(x+\lambda^1)(x+\lambda^2)\ldots (x+\lambda^{2T-1})$где.$\lambda=02_{\textrm{hex}}$

Ограничения и$M$ длина кодового слова$N$ подробно описаны на странице ссылок блока RS кодера с целочисленным входом. Подсистема ErrorGen добавляет шум в кодированное сообщение RS. Чтобы открыть подсистему ErrorGen, выполните следующие команды:

systemname = [modelname '/RS Subsystem/ErrorGen'];
open_system(systemname);

Подсистема ErrorGen реализует логику добавления шума к кодовым словам в местоположениях, указанных в константе Noise Locations. Местоположение может быть изменено по желанию. В этом примере шум будет добавлен к 5-му, 23-му, 34-му и 12-му кодовым словам, соответствующим символам F2, 07, 1A и 9C. Функциональный блок MATLAB ® выводит логическое значение true только в этих четырех моментах времени для каждого пакета и активирует побитовую операцию XOR между исходными символами и шумом.

Выходные сигналы

Запустите модель с помощью следующей команды:

sim(modelname);

Просмотр сигналов

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

Анализ результатов

На выходе логического анализатора входной сигнал данных представляет собой вход блока кодера RS, и это 36-байтовое сообщение, указанное в спецификации IEEE 802.16. Кодированные данные показывают выходной сигнал блока кодера RS. Следует отметить, что спецификация IEEE 802.16 выполняет прокалывание байтов четности и сохраняет только первые четыре байта из 16 байтов. В этой демонстрации используются все 16 байт четности, а первые четыре байта четности - 49, 31, 40 и BF, соответствующие спецификации IEEE 802.16.

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

Декодированное и откорректированное сообщение из блока RS-декодера отображается сигналом выходных данных. Следует отметить, что блок декодера RS вводит около 3 периодов задержки. Просмотрите выходные данные, чтобы увидеть, что ошибки, вызванные шумом, исправлены.

Создание кода HDL и испытательного стенда

Для проверки и создания кода HDL в этом примере необходимо иметь лицензию HDL Coder™.

Получите уникальное имя временного каталога для созданных файлов,

    workingdir = tempname;

Чтобы проверить наличие проблем с моделью для генерации кода HDL, можно выполнить следующую команду:

    checkhdl('commrshdl/RS Subsystem','TargetDirectory',workingdir);

Введите следующую команду для создания кода HDL:

    makehdl('commrshdl/RS Subsystem','TargetDirectory',workingdir);

Для создания стенда введите следующую команду:

    makehdltb('commrshdl/RS Subsystem','TargetDirectory',workingdir);

Выходные данные ModelSim ®

На следующем рисунке показан симулятор ModelSim HDL после запуска созданных сценариев .do файла для тестового стенда. Сравните результат ModelSim с результатом Simulink ®, построенным ранее.

Выбранные привязки

1. IEEE 802.16: Стандарт IEEE для радиоинтерфейса для систем широкополосного беспроводного доступа (редакция IEEE Std 802.16-2009). IEEE-SA. 8 июня 2012 года.

2. Джордж Кларк-младший, Дж. Бибб Кейн, кодирование с исправлением ошибок для цифровых коммуникаций, Нью-Йорк: Спрингер, 1981.