Декодируйте и восстанавливайте сообщение из кодового слова RS

Этот пример показывает, как использовать блок RS Decoder для декодирования и восстановления сообщения из кодового слова Рида-Соломона (RS). В этом примере набор случайных входов генерируется и предоставляется в comm.RSEncoder функция и ее выход передается в блок RS Decoder. Выход блока RS Decoder сравнивается с входом comm.RSEncoder функция для проверки наличия ошибок. Пример модели поддерживает генерацию HDL-кода для подсистемы RS Decoder.

Настройте параметры входных данных

n = 255;
k = 239;
primPoly = [1 0 0 0 1 1 1 0 1];
B = 1;
nMessages = 4;
data = zeros(k,nMessages);
inputMsg = (zeros(n,nMessages));
startSig = [];
endSig = [];

Сгенерируйте случайные входные выборки

Сгенерируйте случайные выборки на основе n, k и m значений и предоставьте их как вход в comm.RSEncoder функция. Здесь n - длина кодового слова, k - длина сообщения, а m - зазор между системами координат.

hRSEnc = comm.RSEncoder;
hRSEnc.CodewordLength = n;
hRSEnc.MessageLength = k;
m=0;

for ii = 1:nMessages
data(:,ii) = randi([0 n],k,1);
[inputMsg(1:n,ii)] = hRSEnc(data(:,ii));
inputMsg1(1:n,ii) = inputMsg(1:n,ii);
[inputMsg(n+1:n+m,ii)] = zeros(m,1);
validIn(1:n,ii) = true;
validIn(n+1:n+m) = false;

endSig = [endSig [false(n-1,1); true;false(m,1);]];
startSig = [startSig [true;false(n+m-1,1)]];

end

refOutput = data(:);

Импортируйте закодированные случайные входные выборки в модель Simulink ®

Выходные выходы comm.RSEncoder функция предусмотрена как вход в блок Simulink.

simDataIn = inputMsg(:);
simStartIn = startSig(:);
simEndIn = endSig(:);
simValidIn = validIn(:);

Запустите модель Simulink

modelname = 'RSDecoder';
open_system(modelname);
out = sim(modelname);

Экспортируйте выборки декодов блока Simulink в рабочую область MATLAB ®

.
simOutput = out.dataOut(out.validOut);

Сравните выход блока Simulink с входами, предоставленными comm.RSEncoder функция

fprintf('\nHDL RS Decoder\n');
difference = double(simOutput) - double(refOutput);
fprintf('\nTotal number of samples differed between Simulink block output and MATLAB function output is: %d \n',sum(difference));
HDL RS Decoder

Total number of samples differed between Simulink block output and MATLAB function output is: 0 

См. также

Блоки