Кодирование и декодирование сигнала с использованием объектов системы кодера и декодера Рида Соломона. В этом примере показано, как включить каждый объект в функцию для генерации кода HDL.
Создайте случайное сообщение для кодирования. Это сообщение меньше длины кодового слова, чтобы показать, как объекты поддерживают укороченные коды. Поместите сообщение с нулями, чтобы учесть задержку декодера, включая поиск Chien.
Запись функции, создающей и вызывающей HDLRSEncoder Системный object™ с кодом RS (255 239). Этот код используется в стандарте широкополосного беспроводного доступа IEEE ® 802.16.B - начальная степень корней примитивного многочлена. Из этой функции можно создать ЛПВП.
Примечание.Синтаксис этого объекта выполняется только в 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™ системы. Этот объект должен иметь тот же код и многочлен, что и кодер. Из этой функции можно создать ЛПВП.
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.