Использование HDL-оптимизированного RS-энкодера/декодера Библиотечных блоков

В этом примере показано, как реализовать энкодер и декодер для стандарта IEEE ® 802.16 [1], используя HDL-оптимизированные блоки библиотеки Reed-Solomon (RS) и Decoder.

Введение

Код 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$. RS $M=8$энкодера вводит$N-K=16$ символы четности, которые используются декодером RS для обнаружения и исправления ошибок символов. Код может исправить до$T=\textrm{floor}[(N-K)/2]=8$ ошибок символов в каждом кодовом слове.

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

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

modelname = 'commrshdl';
open_system(modelname);

Источник

Исходная подсистема генерирует информационные символы для RS Encoder. Чтобы открыть подсистему 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].

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

Обратите внимание, что значения messagelength и period могут изменяться по желанию.

Подсистема RS верхнего уровня содержит блоки HDL Optimized RS Encoder и Decoder. Чтобы открыть подсистему RS, выполните следующие команды:

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

Значения$N$ и$K$ устанавливаются в коллбэке InitFcn модели и используются для конфигурирования блоков HDL Optimized RS Encoder и Decoder. Значения$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$ подробно описаны в блоке Энкодера Integer-Input 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 может использоваться, чтобы просмотреть несколько сигналов в одном окне, и просмотр сигналов таким образом облегчает наблюдение переходов. Сигналы в этой модели на различных стадиях, а именно, перед кодированием, после кодирования, после добавления шума и после декодирования, транслируются потоком. Синий значок в модели указывает потоковые сигналы. Запустите Logic Analyzer с панели инструментов модели.

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

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

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

Декодированное и исправленное сообщение из блока декодера 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 ®

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

Выбранные ссылки

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

2. George C. Clark Jr, J. Bibb Cain, Error-Correction Coding for Digital Communications, New York: Springer, 1981.