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

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

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

Настройте переменные рабочей области для модели, чтобы использовать. Можно изменить эти значения переменных согласно требованиям. Блок поддерживает фиксированную длину кодовой комбинации 255.

k = 239;        % Message length 223 or 239
s = k;          % Shortened message length ranges from 1 to k
i = 4;          % Interleaving depth 1, 2, 3, 4, 5, or 8
numFrames = 3;  % Number of input frames
numErrors = 16; % Maximum number of correctable errors allowed in the input frame is (255-k)*i/2

Сгенерируйте случайные входные выборки

Сгенерируйте случайные выборки с помощью заданной длины сообщения, сокращенной длины сообщения, и чередовав глубину. Закодируйте случайные выборки с помощью ccsdsRSEncode функция, и затем вставляет numErrors количество ошибок наугад местоположения в закодированных выборках.

% Generate random message samples
msg = randi([0 255],s*i,1);

% Encode message samples
encoderOut = ccsdsRSEncode(msg,k,i,s);

% Insert errors in encoded output
errorLoc = randi([1 (255-k+s)*i],numErrors,1);
errorVal = randi([1 255],numErrors,1);
chOut = encoderOut;
chOut(errorLoc) = errorVal;

Декодируйте закодированные данные Используя MATLAB® Function

Декодируйте закодированные данные, содержащие ошибки ccsdsRSDecode функция.

[refOutput,refNErr] = ccsdsRSDecode(chOut,k,i,s);
refOutput = repmat(refOutput,numFrames,1);
refNErr = repmat(refNErr,numFrames,1);

Декодируйте закодированные данные Используя Simulink® Block

Декодируйте закодированные данные, содержащие ошибки блок CCSDS RS Decoder. Выполнение модели импортирует переменные входного сигнала от рабочего пространства MATLAB до блока CCSDS RS Decoder в модели.

% Set frame gap between input frames
if(k == 223 && (i == 1 || i == 2))
    frameGap = 602-(255*i);
else
    frameGap = 0;
end

% Assign inputs to model
dataIn = repmat([chOut; zeros((k-s)*i,1); zeros(frameGap,1)],numFrames,1);
startIn = repmat([true; false(255*i -1,1); false(frameGap,1)],numFrames,1);
endIn = repmat([false((255-k+s)*i -1,1); true; false((k-s)*i,1); ...
    false(frameGap,1)],numFrames,1);
validIn = repmat([true((255-k+s)*i,1); false((k-s)*i,1); ...
    false(frameGap,1)],numFrames,1);

numOutputSamples = k*i;
stopTime = (3065 + numOutputSamples)*numFrames; % Maximum latency of the
                                                % block is 3065 clock cycles

% Run the Simulink model
model_name = 'HDLCCSDSRSDecoder';
open_system(model_name);
set_param([model_name '/HDL CCSDS RS Decoder/CCSDS RS Decoder'], ...
    'MessageLength',num2str(k),'InterleavingDepth',num2str(i));
sim(model_name);

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

Сравните блок CCSDS RS Decoder выход с ccsdsRSDecode функциональный выход.

dataOut = squeeze(decOut);
validOut = squeeze(validOut);
endOut = squeeze(endOut);
numCorrErrOut = squeeze(numCorrErr);
simOutput = dataOut(validOut);
fprintf('\nHDL CCSDS RS Decoder\n');
difference = double(simOutput) - double(refOutput);
fprintf(['\nTotal number of samples that differ between Simulink block output ' ...
    'and MATLAB function output is: %d \n'],sum(difference));
HDL CCSDS RS Decoder

Total number of samples that differ between Simulink block output and MATLAB function output is: 0 

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

Блоки

Функции