В этом примере показано, как реализовать энкодер и декодер для стандарта IEEE® 802.16 [1] использование HDL Оптимизированные библиотечные блоки Энкодера и Декодера Тростника-Solomon (RS).
Код RS является небинарным блочным кодом. Код RS, который сопоставляет информационные символы в кодовую комбинацию длины символа, обозначается как RS () код. Символы для кода являются целыми числами между и, которые представляют элементы конечного поля GF (). Широкополосный стандарт Беспроводного доступа IEEE 802.16 [1] использует Сокращение, Прокалывание и Стирания RS (255,239) код, сгенерированный на GF (256), i.e., и. Энкодер RS вводит символы четности, которые используются декодером RS, чтобы обнаружить и откорректировать ошибки символа. Код может откорректировать до ошибок символа в каждой кодовой комбинации.
Эта модель показывает, как использовать 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);
Значения и установлены в коллбэке InitFcn модели и используются, чтобы сконфигурировать HDL Оптимизированные блоки Энкодера и Декодера RS. Значения и не могут быть изменены в этой модели.
Энкодер RS выводит сокращенный код, если длина сообщения меньше символов. В этом случае это заполнит входной сигнал нулями, кодирует заполненное сообщение и добавляет 16 символов проверки четности. Блок затем удаляет добавленные нулевые символы, создавая символ выход.
Полевой порождающий полином, используемый стандартом IEEE 802.16. Соответственно, и для энкодера RS и для декодера, Источник примитивного полинома установлен как Свойство, Примитивный полином установлен как [1 0 0 0 1 1 1 0 1], Источник B, который является стартовой степенью для корней примитивного полинома, установлен как Свойство, и значение B установлено как 0. Полином генератора кода, используемый стандартом IEEE 802.16, где.
Ограничения на и длина кодовой комбинации детализированы на странице с описанием блока 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 Coder™.
Получите уникальное временное имя каталога для сгенерированных файлов,
workingdir = tempname;
Чтобы проверять, существуют ли какие-либо проблемы с моделью для генерации HDL-кода, можно запустить следующую команду:
checkhdl('commrshdl/RS Subsystem','TargetDirectory',workingdir);
Введите следующую команду, чтобы сгенерировать HDL-код:
makehdl('commrshdl/RS Subsystem','TargetDirectory',workingdir);
Введите следующую команду, чтобы сгенерировать испытательный стенд:
makehdltb('commrshdl/RS Subsystem','TargetDirectory',workingdir);
Следующий рисунок показывает симулятор HDL ModelSim после выполнения сгенерированных .do скриптов файла для испытательного стенда. Сравните результат ModelSim с результатом Simulink®, как построено прежде.
1. IEEE 802.16: стандарт IEEE для воздушного интерфейса для широкополосных систем беспроводного доступа (Версия станд. IEEE 802.16-2009). IEEE-SA. 8 июня 2012.
2. Джордж К. Кларк младший, J. Затвор Каин, кодирование с коррекцией ошибок для цифровой связи, Нью-Йорка: Спрингер, 1981.