Этот пример показывает, как использовать блок 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(:);
Выходные выходы 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