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