В этом примере показано, как реализовать кодер и декодер для стандарта IEEE ® 802.16 [1] с использованием блоков библиотеки кодеров и декодеров RS.
Код RS является небинарным блочным кодом. Код RS, который отображает
информационные символы в кодовое слово длиной символа
, обозначается как 
код RS (,). Символами кода являются целые числа между
и,
представляющие элементы конечного поля GF ().
Стандарт широкополосного беспроводного доступа IEEE 802,16 [1] использует укорочение, прокалывание и стирание кода RS (255 239), генерируемого на GF (256), т.е., и
.
Кодер RS вводит
символы четности, которые используются декодером RS для обнаружения и исправления ошибок символов. Код может исправлять до символьных
ошибок в каждом кодовом слове.
В этой модели показано, как использовать оптимизированные блоки 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);

Значения
и
устанавливаются в обратном вызове InitFcn модели и используются для конфигурирования блоков оптимизированного RS-кодера и декодера HDL. Значения
и
не могут быть изменены в этой модели.
Кодер RS выводит укороченный код, если длина сообщения меньше
символов. В этом случае оно заполняет входное сообщение
нулями, кодирует дополненное сообщение и добавляет 16 символов контроля четности. Блок затем удаляет добавленные нулевые символы, создавая
вывод символа.
Полином генератора поля, используемый стандартом IEEE 802.16, является.
Соответственно, как для RS-кодера, так и для декодера Источник примитивного многочлена устанавливается как Свойство, примитивный многочлен устанавливается как [1 0 0 0 1 1 1 0 1], Источник B, который является начальной мощностью для корней примитивного многочлена, устанавливается как Свойство, и значение B устанавливается как 0. Полином генератора кода, используемый стандартом IEEE 802.16, является,
где.
Ограничения и
длина кодового слова
подробно описаны на странице ссылок блока 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 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 после запуска созданных сценариев .do файла для тестового стенда. Сравните результат ModelSim с результатом Simulink ®, построенным ранее.

1. IEEE 802.16: Стандарт IEEE для радиоинтерфейса для систем широкополосного беспроводного доступа (редакция IEEE Std 802.16-2009). IEEE-SA. 8 июня 2012 года.
2. Джордж Кларк-младший, Дж. Бибб Кейн, кодирование с исправлением ошибок для цифровых коммуникаций, Нью-Йорк: Спрингер, 1981.