Закодируйте и декодируйте сигнал, используя Reed Solomon энкодера и Системных объектов декодера. В этом примере показано, как включить каждый объект в функцию для генерации HDL-кода.
Создайте случайное сообщение для кодирования. Это сообщение меньше длины кодового слова, чтобы показать, как объекты поддерживают укороченные коды. Дополните сообщение нулями, чтобы учесть задержку декодера, включая поиск Кьена.
Написание функции, которая создает и вызывает HDLRSEncoder
Системная object™ с кодом RS (255 239). Этот код используется в стандарте IEEE ® 802.16 Broadband Wireless Access. B
- стартовая степень корней примитивного полинома. Вы можете сгенерировать HDL из этой функции.
Примечание.Синтаксис объекта выполняется только в R2016b или более поздней версии. Если вы используете более ранний релиз, замените каждый вызов объекта на эквивалентный step
синтаксис. Для примера замените myObject(x)
с step(myObject,x)
.
function [dataOut,startOut,endOut,validOut] = HDLRSEnc80216(dataIn,startIn,endIn,validIn)
%HDLRSEnc80216
% Processes one sample of data using the comm.HDLRSEncoder System object(TM)
% dataIn is a uint8 scalar, representing 8 bits of binary data.
% startIn, endIn, and validIn are logical scalar values.
% You can generate HDL code from this function.
persistent rsEnc80216;
if isempty(rsEnc80216)
rsEnc80216 = comm.HDLRSEncoder(255,239,'BSource','Property','B',0)
end
[dataOut,startOut,endOut,validOut] = rsEnc80216(dataIn,startIn,endIn,validIn);
end
Вызовите функцию, чтобы закодировать сообщение.
rsEnc80216 =
comm.HDLRSEncoder with properties:
CodewordLength: 255
MessageLength: 239
PrimitivePolynomialSource: 'Auto'
PuncturePatternSource: 'None'
BSource: 'Property'
B: 0
Вводите ошибки в случайных местах в закодированном сообщении. Рид-Соломон может исправить до (N-K )/2 ошибок в каждом N символе. Таким образом, в этом примере возможность коррекции ошибки является (255 - 239 )/2 = 8 символов.
Symbol(147): was 0x1f, now 0x82
Symbol(16): was 0x6b, now 0x82
Symbol(173): was 0x3, now 0xd1
Symbol(144): was 0x66, now 0xcb
Symbol(90): was 0x13, now 0xa4
Symbol(80): was 0x5a, now 0x60
Symbol(82): was 0x95, now 0xcf
Symbol(56): was 0xf5, now 0x88
Написание функции, которая создает и вызывает HDLRSDecoder
Системные object™. Этот объект должен иметь тот же код и полином, что и энкодер. Вы можете сгенерировать HDL из этой функции.
function [dataOut,startOut,endOut,validOut,err] = HDLRSDec80216(dataIn,startIn,endIn,validIn)
%HDLRSDec80216
% Processes one sample of data using the comm.HDLRSDecoder System object(TM)
% dataIn is a uint8 scalar, representing 8 bits of binary data.
% startIn, endIn, and validIn are logical scalar values.
% You can generate HDL code from this function.
persistent rsDec80216;
if isempty(rsDec80216)
rsDec80216 = comm.HDLRSDecoder(255,239,'BSource','Property','B',0)
end
[dataOut,startOut,endOut,validOut,err] = rsDec80216(dataIn,startIn,endIn,validIn);
end
Вызовите функцию, чтобы обнаружить ошибки в закодированном сообщении.
rsDec80216 =
comm.HDLRSDecoder with properties:
CodewordLength: 255
MessageLength: 239
PrimitivePolynomialSource: 'Auto'
BSource: 'Property'
B: 0
NumErrorsOutputPort: false
Выберите допустимый выход декодера и сравните декодированные символы с исходным сообщением.
All 188 message symbols were correctly decoded.