Декодируйте и восстановите сообщение с кодовой комбинации RS

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

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

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 

Смотрите также

Блоки

Для просмотра документации необходимо авторизоваться на сайте