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

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

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

Specify the input variables.
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

Запустите модель Simulink, чтобы экспортировать декодируемые выборки блока Simulink к рабочей области MATLAB®.

modelname = 'RSDecoder';
open_system(modelname);
out = sim(modelname);
simOutput = out.dataOut(out.validOut);

Сравните блок Simulink Выход с входом функции MATLAB

Сравните выход блока 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 

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

Блоки