Закодируйте и декодируйте сигнал с помощью Системных объектов энкодера и декодера Рида Соломона. В этом примере показано, как включать каждый объект в функцию для генерации 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
Введите ошибки наугад местоположения в закодированном сообщении. Тростник-Solomon может откорректировать до (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.