В этом примере показано, как использовать блок декодера RS для декодирования и восстановления сообщения из кодового слова Рида-Соломона (RS). В этом примере набор случайных входных сигналов генерируется и подается в comm.RSEncoder функция и ее выход подаются в блок RS-декодера. Выходной сигнал блока RS-декодера сравнивается с входным сигналом 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(:);
Выходные данные comm.RSEncoder функция предоставляется как вход в блок Simulink.
simDataIn = inputMsg(:); simStartIn = startSig(:); simEndIn = endSig(:); simValidIn = validIn(:);
modelname = 'RSDecoder';
open_system(modelname);
out = sim(modelname);

simOutput = out.dataOut(out.validOut);
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