exponenta event banner

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

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

Импорт кодированных случайных входных выборок в модель 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 

См. также

Блоки