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

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

Введение

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

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

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

modelname = 'commrshdl';
open_system(modelname);

Источник

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

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].

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

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

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

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

Значения$N$ и$K$ установлены в коллбэке InitFcn модели и используются, чтобы сконфигурировать HDL Оптимизированные блоки Энкодера и Декодера RS. Значения$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 Encoder. Подсистема ErrorGen добавляет, что шум к RS закодировал сообщение. Чтобы открыть подсистему ErrorGen, запустите следующие команды:

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

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

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

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

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 с в сигнале вставки.

Декодируемое и откорректированное сообщение из блока декодера RS показывает сигнал outputdata. Обратите внимание на то, что блок декодера RS вводит приблизительно 3 длины периода задержки. Наблюдайте, что outputdata видит, что ошибки, вызванные шумом, корректируются.

Сгенерируйте 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® Output

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

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

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

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